.Net客户端对WebService的调用(含WS-Security)
?(本文摘自互联网单元测试及实践) 在上一节中我们介绍了测试客户端调用的方法,本章节主要讲述在.net环境下客户端调用的方法,我们将着重介绍如何生成客户端代理,如何实现WSS客户端配置。 ? 8.6.1? 接口代理类的生成???? 在.net下对WebService的接口调用,很重要一点需要将Soap协议进行消息编码,使之成为net下可以调用的客户端。客户端的代理类必须从 SoapHttpClientProtocol 类派生,本文提供两种方式来是实现代理类的快速编写,供读者参照。 ?????? 在本章节中首先介绍如何使用VS2005自带的WebRefrence方法来生成代理类的方法。 下面就以http://10.0.4.138:1688/webservice/AppConsumeService?wsdl 提供的服务为例。讲解一下在VS2005下如何生成代理类,并且像调用本地方法一样调用WebService的接口。 步骤一、在VS2005中新建工程TestHello,具体过程不在这里详述。 ?????? 步骤二、在工程中Refrence右击,点击添加Web引用(Add Web Refrence),如图8.5。 ? ? ???????????? ??????????? ??????????? 图8.5 ?????? 步骤三、在添加Web引用的窗体中的Url编辑框输入Wsdl的地址,并点击go,编辑器自动会获取Wsdl中的Soap协议内容。在Web refrence name的编辑框中可以编辑引用名称(如图8.6)。在本例中输入APPTEST。 ? ?????? ??????????????? ????????? 图 8.6?? ???? 步骤四,点击add reference之后,系统自动生成代理类文件。点击VS2005编辑器菜单->project->Show all files,在工程目录下可以看见一个APPTEST的文件包,打开包文件下面有个refrence.map->refrence.cs。下面对其中代码要点进行讲解。 ?????? ?????????????????????????? 代码8.14
由片段一的代码可以知道代理类是从SoapHttpClientProtocol派生的,但是如果想对消息头添加更多的信息,如签名信息,那么微软提供了Microsoft.Web.Services2.WebServicesClientProtocol的类可以使用,详细在8.6.2节进行描述。 代码8.15
在代码8.15中读者容易发现,由VS2005自动生成的代理类,已经根据webservice发布的wsdl文件,将其中的方法进行了映射,如例子中提到的checkbalance的方法。同时在代码1-6行,明确指出解析该段代码和wsdl之间的映射关系,包括它所属的命名空间等信息。 ? 使用VS2005来自动生成客户端,是编写客户端测试代码比较理想的方法。但是,如果你想直接编辑客户端发送的SOAP请求消息并查看接收到的响应消息时,在VS.NET里的实现就比较麻烦了,Microsoft发布了.NET WebService Studio(WSS),它是用来对Web services进行交互性测试的一个万能的工具。本文将主要介绍使用WSS生成代理类和做些简单的测试。 ?? 使用WSS直接进行相关方法测试。 ?????? 打开WSS(如图8.7),在编辑框WSDL ENDPOINT中输入相应的WSDL地址,还是以http://10.0.4.138:1688/webservice/AppConsumeService?wsdl为例,输入该地址,点击get。可以看到在Invoke的树形边框中将罗列出相应的服务中包含的方法。接着试试点击其中的方法,如checkbalance,设置相应的参数值,点击invoke可以在output中看到调用该服务得到的结果信息(如图8.7)。 ??????? ? 图8.7 ? ?? 直接编辑Soap消息,进行简单测试。 ?????? 在做完前面的步骤之后,点击request/Response菜单将看到,实际上在消息层面发生的Soap消息内容。如图8.8,可以编辑红色边框中的内容,点击Send键实现直接在消息层面的测试。 ??????? ? ???????????????????????????????????????????????? 图8.8 ? ?? 利用该工具直接生成代理类 同时也可以使用WSS工具生成相应的.net代码的代理类。只要点击WSDLS&Proxy菜单。在左侧的树形编辑框中点击Proxy就可以看见相应的代理类的C#代码,读者只要拷贝的自己的工程中既可以使用。 8.6.2? 有WS-Security的客户端调用本章节将介绍一下如何用.net做为客户端调用带有数字签名验证的服务器端方法。对服务器端要求进行签名验证的方法测试,需要在调用服务器端方法之前,对消息头的信息装载签名私钥的信息。为此,本章将介绍如何制作可以在.net下使用的证书;如何在.net下应用证书进行签名;编写测试用例。 n? 如何制作证书 制作证书有很多方法,本文介绍的方法是如何将jks文件中信息导入到Windows环境的证书管理器中便于.net的调用。 步骤一、按8.5.2章节中的代码8.13 keygen.bat生成0001.jks。 步骤二、使用工具JKS2PFX.bat将0001.jks转换成可以导入Windows证书管理器的pfx文件。执行代码片段如:代码8.16,得到0001.pfx。 ???????????????????????????? 代码8.16 ?
??????????????? 1???? jks2pfx 0001.jks 123456 123456 0001 步骤三、将证书导入到Windows证书管理器中。在cmd中输入mmc打开Windows控制台,点击添加/删除管理单元-证书。得到如图8.9节目,点击证书(当前用户)->个人->证书。右键点击导入证书,将证书导入到个人证书文件管理组下。 ?? ????????????????????????????????????????????????? 图 8.9 步骤四、将个人证书下的别名是mike的证书(即步骤三导入的证书),剪切到受信任的根证书颁发机构目录下,使证书授信。 步骤五、将授信过的证书拷贝回个人->证书文件夹。 步骤六、重复步骤一至步骤五的做法,将服务器端公钥引入到证书管理器。 n? 在.net下如何使用证书 本文将介绍如何使用Microsoft WSE2.0完成对WS-Security签名的装载。在使用这种方法之前首先要安装Micorsoft WSE2.0的工具,工具存放路径CD:kkkkk。本例中将新建一个工程TestWSE,并在上面逐步完成WSE配置以及代码中关于配置部分的编写。 步骤一、在工程中添加Web引用,详细步骤如8.6.1中介绍。在添加完Web引用之后,在工程中会增加一个app.config文件。 步骤二、打开程序列表中WSE2.0->Configuration Editor(如图8.10),点击file->open打开在步骤一中新增的app.config文件。勾选Enable this project for Web Services Enhancements。点击Policy,勾选Enable Policy;点击Add,在弹出窗体上点击OK,进入Security配置向导,点击Next;选择Secure a client application点击Next;在消息设置框选择对Request和Response的消息进行签名设置,点击Next;点击Select Certificate,选择相应的证书Mike;在Trusted Server Certificates窗体中,点击Add,选择包含服务器端公钥的证书。点击Save,配置WSE代理文件完成。 步骤三、刷新工程,点击Show All Files会发现新增了一个文件PolicyCache.config,把该文件添加到工程中。在Reference中添加Microsoft.Web.Services2的引用,修改Reference.cs文件中代码,将代理类的基类由原先的System.Web.Services.Protocols.SoapHttpClientProtocol改成Microsoft.Web.Services2.WebServicesClientProtocol。 步骤四、读者可以根据自己的实际情况编辑PolicyCache.config文件。如果只需要对发送的消息进行签名,那么只需要Request的代理如<request policy="#Sign-X.509-5" />,那么读者可以删除关于response policy相关的信息。同时也可以根据实际情况修改wssp:MessageParts决定对消息的哪些部分进行签名,这个需要设置和服务器相匹配的配置。本文只关心对客户端发送的消息进行签名,所以对删除response policy的相关内容。 完成前面四个步骤的设置,就完成了对.net下WS-Security的配置。下面介绍一下如何编写测试代码进行测试。 n? 如何编写测试代码 本小节主要介绍如何使用NUnit框架编写调用带有WS-Security测试用例。本文将在TestWSE工程的基础上进行代码编写。 首先,在工程中引入NUnit Framework组件。右键点击Add Reference,选择nunit.framework,点击OK。 在文件头中,添加代码using NUnit.Framework,在类的声明前添加[TestFixture],同时在编写每个测试用例代码时方法前面添加[Test],示例代码如代码片段8.17 ????????????????????????????????????????????????? 代码8.17
? 04行:添加NUnit.Framework引用 13行:新建代理类的实例 14行:调用待测试的服务器端代码 15行:对调用的结果进行断言 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |