Webservice实现及原理

一、什么是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没变。

 

 

原文地址:https://www.cnblogs.com/honghong75042/p/2891398.html