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

来源:互联网 发布:linux编译android程序 编辑:程序博客网 时间:2024/05/16 00:40

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的平台无关性得到了很好的体现。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被商场要求撤场怎么办 上班没法接孩子放学怎么办 幼儿下午放学与上班错开怎么办 宝宝早上醒的早怎么办 晚卜睡不着尿多怎么办 要求正常休息公司不准怎么办 我早起被室友说怎么办? 小孩晚上睡的晚怎么办 初中一年级学不扎实怎么办 一年级学生上课爱说话怎么办 孩子不按时完成作业怎么办 高三理科基础不好怎么办 字写快了就难看怎么办 高一文科280分怎么办 高三了学不进去怎么办 副职兼任法人不够条件怎么办 正职和上级不和副职怎么办 中层正职和上级不和副职怎么办 陆军军官年龄大了怎么办 ps选区选多了怎么办 香港货物被海关扣了怎么办 羽绒服棉填充物不均匀了怎么办 蛀牙到牙神经了怎么办 t恤袖子长了怎么办 t恤袖子短了怎么办 ofo突然要交押金余款怎么办 裙子的腰小了怎么办 白衬衣棉质变软怎么办? 车被自行车刮了怎么办 刮花别人的车门怎么办 破腹产九个月意外怀孕怎么办 破腹产一年半意外怀孕怎么办 37天流产了该怎么办 旧鞋穿着磨脚了怎么办 皮鞋磨脚怎么办小窍门 拉链从下面开了怎么办 高帮足球鞋松了怎么办 橡筋裤头太紧了怎么办 内增高鞋跟太高怎么办 电脑增高架高了怎么办 银行取钱走后回来说少了怎么办