不用编写客户端调试Web Services

原创 2003年01月28日 13:44:00


当你写好了一个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了。真是方便至极呀!

最后就该介绍Request/Response了,这个面板主要显示的是利用WSS这个工具调用远程方法时生成的请求消息和接收到的响应消息的内容。当你在Invoke面板中调用了一个方法之后,就可以在Request和Response框里看到原始的请求消息和响应消息,而且可以直接对SOAP请求消息进行修改,比如修改某元素的值或属性等等,然后按Send重新调用就可以看到结果,这对于深入理解SOAP消息有很大的帮助。在该面板的左边还可以设置发送请求的属性(GET/POST)、基本认证的用户名和密码、是否使用Cookie等,以便用更灵活的方式调用Web Services。

如果你在局域网中用VS.NET进行过Web Services相关的开发,可能会发现通过Web引用只能添加局域网内的Web Services,而对Internet上提供的服务的却无能为力(这个问题可以通过编码的方式对客户端代理类的HTTP代理属性进行设置来解决),这是因为绝大部分Web Services都是通过HTTP协议进行调用,而局域网的HTTP代理服务器需要对外部的访问请求进行认证。正因为VS.NET中对于Web引用没有代理设置机制才会导致上述问题。所以,必须填入正确的验证信息(例如用户名和密码等)才能使绑定了HTTP协议的SOAP请求消息跨越防火墙到达服务端。在这一点上WSS又一次很好的简化了繁琐的步骤。

打开Edit菜单的Options,在WsdlSettings项中可以设置代理服务器的域、用户名、密码,这样就可以方便地在局域网中直接调用Internet上的Web Services了,够简单吧!同时你还可以选择除SOAP外的其它的数据编码方式(HTTP/GET、HTTP/POST)和自动生成的代码的语言(C#、VB.NET、JS)以及SOAP消息内容的显示风格等。

当然遗憾还是有的,比如缺乏对数据集DateSet的支持、不能通过UDDI进行Web Services查询等,但愿这些问题能在下一版中得到解决和完善。但瑕不掩瑜,WSS会给你带来一种绝对不一样的感受,只要你愿意,甚至可以直接把它当成所有Web Services的客户端,快来尽情享受Web Services的乐趣吧!

基于JAX-WS的Web Service服务端/客户端

JAX-WS(Java API for XML-Based Web Services)用于简化使用Java构建WebService服务端和
  • a19881029
  • a19881029
  • 2014年06月18日 11:25
  • 22337

web services客户端调用

平时只写服务端接口,今天草草看了一眼客户端的代码,先记录一下,之后再深入了解。 1.新建一个java project,导入Axis2的jar包。 2.File->new->other,新建Axis2 ...
  • ankle306
  • ankle306
  • 2017年07月20日 11:18
  • 56

客户端与服务端的WebService远程调试

前几天一直在寻找lia
  • cj7749910
  • cj7749910
  • 2014年05月17日 10:03
  • 1591

编写简单的WebService示例

1.参考文献: 1.利用Java编写简单的WebService实例  http://nopainnogain.iteye.com/blog/791525 2.Axis2与Eclipse整合...
  • CHBSRZF
  • CHBSRZF
  • 2015年09月08日 18:02
  • 1018

开发模式配置,不用每次重启tomcat,java web基础

在通常情况下,修改完代码后需要重新部署,重启tomcat,可以配置开发模式,自动监听服务端口,列出目录文件,管理多个站点等功能         一、基本配置:                1、端口配...
  • chenbean
  • chenbean
  • 2014年03月20日 23:07
  • 1845

[计网] 用python语言开发一个简单的web服务器和客户端

服务器:      当客户联系时创建一个连接套接字      从这个连接接收HTTP请求(*)      解释该请求所请求的特定文件      从服务器的文件系统获取该文件      并发送文件内容...
  • ZJU_fish1996
  • ZJU_fish1996
  • 2016年05月26日 17:01
  • 3735

web service概念、架构及相关知识

一、WebService的定义WebService有好几种定义: W3C组织对其定义:WebService是一个软件系统,为了支持跨网络的机器间互操作交互而设计。 WebService通常被定义为一组...
  • liu_shi_jun
  • liu_shi_jun
  • 2016年04月11日 14:42
  • 5059

通过Web Services上传和下载文件

随着Internet技术的发展和跨平台需求的日益增加,Web Services的应用越来越广,我们不但需要通过Web Services传递字符串信息,而且需要传递二进制文件信息。下面,我们就分别介绍如...
  • my98800
  • my98800
  • 2016年07月28日 11:22
  • 387

eclipse新浪云sae插件安装

使用 Eclipse 插件部署 Java 应用¶ 借助于新浪云 Eclipse 插件,你可以快速将本地的 Java 应用部署到线上。安装首先下载 新浪云 Eclipse 插件包 。打开 Eclips...
  • Voulez_vous_un_reve
  • Voulez_vous_un_reve
  • 2017年04月24日 12:16
  • 564

使用 Eclipse 和 Java SE 6 创建独立 Web Services 应用程序,第 1 部分: Web Services 服务端应用程序

创建项目 下一步,您将创建一个项目来构造 Web Services 服务端。项目包含源代码和其他相关文件,并允许您使用项目作为源文件的容器,或在项目中设置文件夹以对文件进行组织。 选择...
  • kaixinbingju
  • kaixinbingju
  • 2013年03月27日 15:12
  • 2407
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不用编写客户端调试Web Services
举报原因:
原因补充:

(最多只允许输入30个字)