当你写好了一个Web Services,肯定会需要一个客户端(调用端)来调用它,以检查运行是否正常。在Visual Studio.NET中你可以直接点击“运行”按钮,系统会自动生成一个Web Services的测试页来调用Web Method,虽然很方便,但这个测试页是通过HTTP/GET协议将参数加在URL后面传给Web Method的,这种调用方式(HTTP/POST也一样)只适合比较简单的Web Services,比如:传进来的参数是简单类型的,或者SOAP请求中不含SOAP消息头等等。
如果我们的Web Services应用了一些比较复杂的功能,例如:请求参数为GET和POST协议都不能编码的复杂类型,应用了定制的SOAP消息编码格式(SOAP Encoding),使用了SOAP扩展等等。这个时候就需要使用WSDL的SOAP绑定,通过SOAP协议进行消息编码来进行调用,也就是说我们得自己去专门为这个Web Services写一个客户端。其中很重要的一点就是如果Web Services客户端要使用SOAP进行调用,客户端的代理类必须从 SoapHttpClientProtocol 类派生,而VS.NET自动生成的测试页的代理类是从HttpGetClientProtocol类派生的。当然VS.NET也能比较方便的编写客户端,而且你根本不必去理会代理类,因为这是自动生成的,你要做的就是像在本地一样调用Web Method。
但问题又来了,如果你想直接编辑客户端发送的SOAP请求消息并查看接收到的响应消息时,在VS.NET里的实现就比较麻烦了,还得编一个SOAP扩展,这样一来工作量可就大了。好在Microsoft发布了.NET WebService Studio(WSS),它是用来对Web services进行交互性测试的一个万能的工具。WSS是一个很小(116K)的Windows Form应用程序,它结合了GotDotNet网站早期的WSDL Verification和WSDL Browser工具的特点,并增加了一个直观的用户界面,目前版本号为1.0。
下面我就按照对一个Web Services的方法的调用步骤来讲解一下这个软件的使用:
首先,在WSDL EndPoint文本框中输入一个有效的asmx或wsdl文件的URL,你也可以通过Browse Wsdl按钮打开一个本地的WSDL文件。然后在文本框中回车,WSS就下载WSDL(如果文本框中是asmx文件就生成它的WSDL),自动为该Web Services生成并编译一个客户端代理,整个过程可在Massages面板中看到。最后在Invoke面板中显示出一个包括该Web Services所有方法的树状视图。同时你可以在WSDL & Proxy面板中看到由这个工具自动生成的WSDL文件和其链接的XML文档定义Schema、客户端代理类(Proxy)、客户端调用代码(ClientCode)的详细内容。在Proxy代码中我们可以清楚地看到代理类继承自SoapHttpClientProtocol,因此这个工具毫无疑问是基于SOAP协议对Web Sevices进行调用,这样我们就可以使用与SOAP相关的各种功能。
再来看看Invoke面板,点击一个Web方法,右边的Input框中会马上按照SOAP消息的结构以树形方式显示出调用这个方法所需的参数和其结构;在某个参数上点击一下,对应Input的Value框中也会马上显示出这个参数的类型信息,并且可以直接填入这个参数的值或指定其值为空,参数都填好后就可以通过Invoke按钮进行调用了。调用结束后,Output框中也会按照与Input框一样的方式显示这个方法调用返回的结果和其数据结构,并且同样能显示出返回结果的数据类型和值。
让人兴奋的是,在Input和Output框中可以直接编辑消息头中的元素,这在测试要求提供消息头的Web Sevices时是十分必要的。如果要使用消息头(当然,前提是WSDL里做了相关约定),在消息头里的某个头元素上点击一下,对应的Value框中会显示出相关的类型信息,然后将IsNull设置为False,这时头元素前面就多了个加号,展开它就可以看到其下的参数,按上面讲过的方法可以设置头元素的参数的值。设置好各参数后,就可以调用需要消息头的Web Sevices了。真是方便至极呀!
共2页 第1页 第2页






