一、什么是WebService?为什么需要WebService?
WebService是两个计算机之间通讯(交谈)的技术,网络中一台计算机想要调用另一台计算机的方法时,此时可以需要WebService。
很火的SOA、云计算在技术层面上都是WebService
二、自己做一个WebService
例子:
服务器端添加一个ashx页面代码如下
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
try
{
int Number1 = int.Parse(context.Request["number1"]);
int Number2 = int.Parse(context.Request["number2"]);
int summer = Number1 + Number2;
context.Response.Write(summer);
}
catch { }
}
客户端调用服务器端的的方法代码如下:
WebClient wc = new WebClient();
wc.Encoding = Encoding.UTF8;
string s = wc.DownloadString("http://localhost:6563/ShowSummer.ashx?number1=" +
textBox1.Text + "&number2=" + textBox2.Text);
textBox3.Text = s;
}
显示的结果:
客户端调用服务端的方法用到了WebClient.
WebClient类提供用于将数据发送到由 URI 标识的资源及从这样的资源接收数据的常用方法。
做了一个简单的自己编写Webservice小例子,但是由于服务端的方法很多,参数也各不一样。没有解决统一的数据格式和自描述。所以客户端在调用起来很麻烦,为了解决这些问题引入了WebService
三、WebService原理
规定请求数据格式是,函数名为根节点,参数列表为子节点:
WebService中所有的请求、返回都是XML格式,所有语言都支持XML格式。
WSDL:描述了WebService提供了哪些方法。
SOAP协议:描述了向服务器发送什么格式的调用数据,以及服务器会返回什么格式的数据。
规定所有的方法页面在请求后加wsdl这个参数的时候返回一个方法列表、方法参数、方法返回值的xml:
< operations>
<operation Name="Add">
<input>
<num1 type="int"/>
<num2 type="int"/>
</input >
<output>
<ret type="int"/>
</output>
</ operation >
</operations>
这样服务方法就自描述了,用wsdl参数访问就可以得知这个服务提供什么方法、方法的参数是什么了。
WSDL:对WebService能够提供的服务进行描述的协议。服务器只有返回这个格式的数据,代码生成器才能根据WSDL生成代码。
请求、返回的XML数据格式(有哪些节点、节点的名字等等)WebService 用SOAP协议进行规定,方法描述信息XML用WSDL协议规定。WebService技术是与语言、平台无关,因此.net可以访问java编写的WebService、java也可以访问.net编写的webservice,php、python等各种语言也几乎都支持webservice,因此可以说webservice可以实现跨语言方法调用。
但是如果自己构建请求、返回xml,解析xml请求,自己负责方法描述信息更新是很麻烦的,.net就提供了简化开发WebService、使用WebService的技术,简单的让人不敢相信
四、引用WebService做一个实例
服务器端添加一个Web服务,增加一个Add方法
客户端添加Webservice引用
运行结果如上
五、总结WebService
l 1、服务器端:就想写普通方法一样,不需要处理请求、响应。
l 2、客户端添加对asmx的“服务器引用”,然后就可以调用***SoapClient类中的方法。就“好像”直接调用了服务端的方法。
l 添加服务引用的时候工具读取asmx的WSDL自动生成了ServiceReference1中的类,这些类帮我们来拼Http请求,并且把Http返回值拆成函数的返回。
l 服务器端新建“Web服务”(asmx),在远端可以调用的方法上标注[WebMethod]。
l 客户端“添加服务引用”,填写asmx的地址。然后就可以调用Service References下自动生成的***SoapClient类了。
l 用WebService的时候如果服务端的接口定义发生变化,则需要重新添加对服务端的引用,因为Service References中的类是工具读取WSDL定义自动生成的。在服务引用上点击右键,选择“更新服务引用”。如果只是修改了WebService内部实现,而接口没变,则不需要“更新服务引用”,因为WSDL没变,Soap没变。