您的位置:首页 > 其它

Web Service平台无关性研究与实现

2005-11-01 20:40 288 查看
Web Service平台无关性研究与实现所谓Web Service的平台无关性,即部署在不同的平台(如Unix平台、Windows平台等)上的Web Service之间,不同平台上的应用程序和部署在不同平台上的Web Service之间可以实现无困难的通信。由于Web Service采取了开放标准XML协议作为服务界面和协议描述规范,完全遮蔽不同软件系统平台的差异,所以无论什么样的程序都可以通过这种标准的协议进行互操作,达到最高的可集成性能。

下面我们来分析分别用java和delphi编写身份证号码验证与信用卡号码验证两个Web Service接口,并将其分别部署在Unix平台和Windows平台上,然后使用C#编写的Web Service客户端与这两个Web Service接口进行通信的实现过程。

1、使用java编写身份证号码验证Web Service接口


首先我们定义一个public类checkCID,然后在这个类里面编写一个公共的方法(只有public方法才可以发布为Web Service接口):

public boolean Verify(String idcard);

在这个方法里面编写具体的逻辑功能代码,用以验证参数idcard是否符合法定的身份证号码的规则。这与编写java应用程序基本没有什么区别。接下来我们需要将编写的应用发布为Web Service接口,这只需要将上面编写的代码存为checkCID.jws,然后将其放置在Java web 服务器的Web目录下即可。不过要使该Web Service接口能够正确运行,仅仅有一个支持java的web服务器还是不够的,我们还需要另外一个能够将刚才编写的代码正确发布为web service的组件,在本例中我们采用Tomcat作为web服务器,apache axis作为Web Service组件,配置好运行环境(关于如何配置运行环境的详细操作步骤,限于篇幅本文不加详述,请查阅本文用户手册)以后即将刚才编写的代码正确发布为Web Service接口了。通过该Web Service的URL(http://localhost:8080/axis/checkCID.jws)即可访问,通过http://localhost:8080/axis/checkCID.jws?wsdl即可查看由Apache Axis自动生成的描述该Web Service接口详细信息的一个XML文档。在其它的应用需要调用该接口时该XML文档是必需的。至此我们已经完成了身份证号码验证接口的编写并能够在网络中正确访问了。

2、使用delphi编写信用卡号码验证服务


Delphi从6.0就开始支持Web Services的开发和应用了,下面介绍在Delphi7.0中编写信用卡号码验证函数并将其发布为Web service的过程。打开Delphi7.0的开发环境,依次选择New|Other|WebServices|SOAPServer Application,然后选择ISAPI/NSAPI Dynamic Link Library,系统将自动包含进开发Web Service所需要的类。将刚才新建的工程保存为creditCardValidator,之后在creditCardValidatorIntf.pas文件的type部分定义Web Service的接口(只有在这里声明的接口才可以发布为Web Service接口):

function ValidateVisa(const p_card_number: string):boolean;stdcall;

接下来在creditCardValidatorIntf.Impl函数的实现文件的type部分再次声明刚刚定义的public接口,并在文件的implementation部分编写具体的函数逻辑功能代码,编写好逻辑功能代码以后选择Project|Build creditCardValidator即将刚刚建立的工程编译生成一个动态链接库文件creditCardValidator.dll。至此,我们已经完成了web service的构建,但还没有将其发布为web service,发布过程非常简单。我们选用Windows平台的IIS作为Web服务器,在IIS的默认站点里面新建一个虚拟目录cgi-bin,并将该虚拟目录的执行权限设置为“脚本和可执行文件”以使该目录具有执行ISAPI扩展的权限。最后只要将刚才编译好的creditCardValidator.dll文件拷贝到cgi-bin虚拟目录下,就将其成功的发布为Web Service了。比如我们使用URL: http://localhost/cgi-bin/creditCardValidator.dll就可以见到该Web Service发布的所有可用接口,通过URL: http://localhost/cgi-bin/creditCardValidator.dll/wsdl/IcreditCardValidator就可以查看到包含该Web Service应用所有信息的一个WSDL描述文档。

3、使用.net(c#)编写客户端与身份证号码验证Web Service和信用卡号码验证Web Service通信


在vs.net环境中要使用刚才编写的两个Web Service,其实现过程也比较简单,因为我们可以利用vs.net提供的添加web引用功能自动生成这两个Web Service的代理类,该代理类负责底层的与远端Web Service通信的所有的操作。该代理类的形式如下所示:

public class IcreditCardValidatorservice: System.Web.Services.Protocols.SoapHttpClientProtocol{

……}

在本例中,我们利用vs.net的添加web引用功能建立上面编写的两个Web Service的客户端,建立完成以后我们将看到用java和delphi编写的Verify 和ValidateVisa Web Service接口在vs.net环境中建立的客户端代理的形式分别如下:[System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace="http://DefaultNamespace", ResponseNamespace="http://localhost:8080/axis/checkCID.jws")]

[return: System.Xml.Serialization.SoapElementAttribute("VerifyReturn")]

public bool Verify(string idcard) {

……}

[System.Web.Services.Protocols.SoapRpcMethodAttribute("urn:creditCardValidatorIntf-IcreditCardValidator#ValidateVisa", RequestNamespace="urn:creditCardValidatorIntf-IcreditCardValidator", ResponseNamespace="urn:creditCardValidatorIntf-IcreditCardValidator")]

[return: System.Xml.Serialization.SoapElementAttribute("return")]

public bool ValidateVisa(string p_card_number) {

……}

在建立了Web Service的代理类以后,我们可以象使用用C#建立的本地类一样使用该类,具体通信时由该代理类负责向远端Web Service接口发送和接收SOAP消息,并将接收到的数据转换成为C#的数据类型。接下来我们讨论具体的实现过程。

首先我们新建一个test工程,然后添加身份证号码验证Web Service和信用卡号码验证Web Service的web引用,分别将这两个客户端代理类命名为checkCID 和creditCardValidator。在自动生成的Windows窗体中添加两个TextBox控件和Button控件,分别用于输入身份证号码和信用卡号码,在该Windows窗体的后台代码文件Form1.cs文件中可以简单的在文件的开头添加代理类所在的命名空间(如using test.checkCID;),然后直接建立代理类checkCIDService的对象,并使用其方法Verify进行身份证号码的验证。如输入511225198205163561,返回的结果将为false。

至此我们完成了客户端的建立并实现了跨平台、跨语言的应用程序间的通信。Web Service的平台无关性得到了很好的体现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: