webservice它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web webservice
应用程序分支,是自包含、自描述、模块 化的应用,可以发布、定位、通过web调用。web service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(http,xml,soap)来访问web service,通过web service内部执行得到所需结果.web service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他web service应用程序可以发现并调用它部署的服务。
using system;
using system.io;
using system.collections;
using system.collections.generic;
using system.componentmodel;
using system.web;
using system.web.services;
using system.web.services.protocols;
using system.drawing;
using system.drawing.imaging;
namespace nightkidsservices
{
///
/// service1 的摘要说明
///
[webservice(namespace = "http://tempuri.org/")]
[webservicebinding(conformsto = wsiprofiles.basicprofile1_1)]
[toolboxitem(false)]
public class testservice :webservice
{
private static int picnum = -1;
[webmethod]
public resource getresource()
{
return resource.createresource("pic2", "asdfasd", 0);
}
[webmethod]
public string helloworld()
{
return "hello";
}
[webmethod]
public byte[] getpic()
{
picnum = (picnum + 1) % 32;
image image = image.fromfile(this.server.mappath("jpeg/" + (picnum+1).tostring() + ".bmp"));
memorystream mem=new memorystream();
image.save(mem, imageformat.jpeg);
return mem.getbuffer();
}
[webmethod]
public listgetresourcelist()
{
return new list(new resource[] { resource.createresource("pic1", "jpeg/1.bmp", 0),resource.createresource("pic2", "jepg/2.bmp", 0), resource.createresource("pic3", "jpeg/3.bmp", 0), resource.createresource("pic4", "jepg/4.bmp", 0) });
}
}
以上只是一个简单的测试使用,便于后续使用网页特效处理不同类型的数据
对于javascript,肯定是使用xmlhttprequest对象来访问服务器端的,不过这里为了简单,我没有考虑兼容性问题,直接使用xmlhttprequest对象(我使用chrome浏览器作为测试浏览器),为此我使用ajaxclient类来进行http操作(post 方法),webservice类来封装处理webservice(调用ajaxclient类作为操作类),jsonconverter类处理xml数据转换为json数据
common.js(包含jsonconverter类)
javascript document
function $(id)
{
return document.getelementbyid(id);
}
function getxmlhttp()
{
if(window.xmlhttprequest)
return new xmlhttprequest();
}
var jsonconverter={};
jsonconverter.flagstack=[];
jsonconverter.convertfromxml=function(xmlrootnode)
{
if(!xmlrootnode)
return;
var converter={};
converter.render=function(node,isarrayelement)
{
var returnstr='';
var isarray=false;
if(node.childnodes.length==1)
{
returnstr+=node.nodename+':' + "'" + node.firstchild.nodevalue + "'" ;
if(node==xmlrootnode)
returnstr='{' + returnstr + '}';
return returnstr;
}
isonenode=false;
if(node.nodename.match("arrayof*"))
isarray=true;
if(isarray)
returnstr+='[';
else
{
returnstr+='{';
if(!(isarrayelement || xmlrootnode==node))
returnstr=node.nodename + ':' + returnstr;
}
for(var i=1;i{
returnstr+=this.render(node.childnodes[i],isarray) + ',';
}
returnstr=returnstr.slice(0,-1);
if(isarray)
returnstr+=']';
else
returnstr+='}';
return returnstr;
}
//alert(converter.render(xmlrootnode));
return eval('(' + converter.render(xmlrootnode) + ')');
}
ajaxclient.js
复制代码 代码如下:
// javascript document
function ajaxclient(url)
{
var xmlhttp=getxmlhttp();
var request_url=url;
var msglist=new array();
var isopen=false;
var isrunning=false;
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readystate==xmlhttp.done)
{
isrunning=false;
if (xmlhttp.status==200)
{
msglist.push(xmlhttp.responsexml);
}
}
}
this.open=function()
{
if(xmlhttp==null)
xmlhttp=getxmlhttp();
isopen=true;
if(xmlhttp==null)
isopen=false;
}
this.send=function(msg)
{
if (isopen)
{
xmlhttp.open("post",request_url,false);
//alert(request_url);
xmlhttp.setrequestheader("content-type", "application/x-www-form-urlencoded");
xmlhttp.setrequestheader("content-length",msg==null?0:msg.length);
//xmlhttp.setrequestheader("keep-alive","on");
xmlhttp.send(msg==null?"":msg);
isrunning=true;
}
}
this.geturl=function()
{
return request_url.length==0?'':request_url;
}
this.seturl=function(url)
{
request_url=url;
}
this.receive=function()
{
var num=0;
while(!msglist.length)
{
num++;
if (num>=20000)
break;
}
return msglist.length==0?null:msglist.shift();
}
this.close=function()
{
if(!isrunning)
{
isopen=false;
xmlhttp=null;
}
}
}
// javascript document
function webservice(url)
{
var ajaxclient=new ajaxclient(null);
var requesturl=url;
var responsemsg=null;
this.request=function(requestname,paralist)
{
var url=requesturl +'/' + requestname;
var senddata='';
ajaxclient.seturl(url);
ajaxclient.open();
//alert(ajaxclient.geturl());
if (paralist!=null)
{
for(var obj in paralist)
senddata+=obj.tostring() + '=' + paralist[obj] + '&';
senddata=senddata.slice(0,-1);
}
ajaxclient.send(senddata);
//ajaxclient.close();
//responsemsg=xmltojson(ajaxclient.receive());
//for(var obj in responsemsg)
// alert(obj.tostring() + ':' + responsemsg[obj].tostring());
responsemsg=ajaxclient.receive();
}
this.getresponse=function()
{
return responsemsg;
}
}调用很简单,只需
复制代码 代码如下:
var webservice=new webservice('http://localhost/nightkidswebservice/request.asmx');
webservice.request("getresourcelist",null);
alert(jsonconverter.convertfromxml(webservice.getresponse().firstchild));在request方法里面的第一个参数对应不同的服务名称,第二个参数加入对应的服务的参数表(json格式,例如:{id:123,name:'nightkids'})
技术和规则
在构建和使用web service时,主要用到以下几个关键的技术和规则: 1.xml:描述数据的标准方法. 2.soap:表示信息交换的协议. 3.wsdl:web服务描述语言. 4.uddi(universal description, discovery and integration):通用描述、发现与集成,它是一种独立于平台的,基于xml语言的用于在互联网上描述商务的协议。
实际上,webservice的主要目标是跨平台的可互操作性。为了达到这一目标,webservice完全基于xml(可扩展标记语言)、xsd(xmlschema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。由此可以看出,在以下三种情况下,使用webservice会带来极大的好处。
长项一:跨防火墙的通信
如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器。在这种情况下,使用dcom就不是那么简单,通常也不便于把客户端程序发布到数量如此庞大的每一个用户手中。传统的做法是,选择用浏览器作为客户端,写下一大堆asp教程页面,把应用程序的中间层暴露给最终用户。这样做的结果是开发难度大,程序很难维护。 图1通过webservice集成应用程序 举个例子,在应用程序里加入一个新页面,必须先建立好用户界面(web页面),并在这个页面后面,包含相应商业逻辑的中间层组件,还要再建立至少一个asp页面,用来接受用户输入的信息,调用中间层组件,把结果格式化为html形式,最后还要把“结果页”送回浏览器。要是客户端代码不再如此依赖于html表单,客户端的编程就简单多了。 如果中间层组件换成webservice的话,就可以从用户界面直接调用中间层组件,从而省掉建立asp页面的那一步。要调用webservice,可以直接使用microsoftsoaptoolkit或.net这样的soap客户端,也可以使用自己开发的soap客户端,然后把它和应用程序连接起来。不仅缩短了开发周期,还减少了代码复杂度,并能够增强应用程序的可维护性。同时,应用程序也不再需要在每次调用中间层组件时,都跳转到相应的“结果页”。 从经验来看,在一个用户界面和中间层有较多交互的应用程序中,使用webservice这种结构,可以节省花在用户界面编程上20%的开发时间。另外,这样一个由webservice组成的中间层,完全可以在应用程序集成或其它场合下重用。最后,通过webservice把应用程序的逻辑和数据“暴露”出来,还可以让其它平台上的客户重用这些应用程序。
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整