.Net客户端对WebService的调用(含WS-Security)

来源:互联网 发布:电脑com端口号怎么查看 编辑:程序博客网 时间:2024/05/16 23:43

 (本文摘自互联网单元测试及实践)

在上一节中我们介绍了测试客户端调用的方法,本章节主要讲述在.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

public partial class AppConsumeService: System.Web.Services.Protocols.

SoapHttpClientProtocol {

       //实现代码

}

 

由片段一的代码可以知道代理类是从SoapHttpClientProtocol派生的,但是如果想对消息头添加更多的信息,如签名信息,那么微软提供了Microsoft.Web.Services2.WebServicesClientProtocol的类可以使用,详细在8.6.2节进行描述。

代码8.15

01    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("urn:checkBalance",

02    RequestNamespace="http://account.api.core.aep.alisoft.com",

03    ResponseNamespace="http://account.api.core.aep.alisoft.com",

04    Use=System.Web.Services.Description.SoapBindingUse.Literal,

05    ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]

06            [return: System.Xml.Serialization.XmlElementAttribute("return", IsNullable=true)]

07            public string checkBalance([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string param0,

08            [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] string param1,

09             double param2,

10            [System.Xml.Serialization.XmlIgnoreAttribute()] bool param2Specified) {

11                object[] results = this.Invoke("checkBalance", new object[] {

12                            param0,

13                            param1,

14                            param2,

15                            param2Specified});

16                return ((string)(results[0]));

17            }

   

在代码8.15中读者容易发现,由VS2005自动生成的代理类,已经根据webservice发布的wsdl文件,将其中的方法进行了映射,如例子中提到的checkbalance的方法。同时在代码1-6行,明确指出解析该段代码和wsdl之间的映射关系,包括它所属的命名空间等信息。

 

使用VS2005来自动生成客户端,是编写客户端测试代码比较理想的方法。但是,如果你想直接编辑客户端发送的SOAP请求消息并查看接收到的响应消息时,在VS.NET里的实现就比较麻烦了,Microsoft发布了.NET WebService StudioWSS),它是用来对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.bat0001.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;在消息设置框选择对RequestResponse的消息进行签名设置,点击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的相关内容。

完成前面四个步骤的设置,就完成了对.netWS-Security的配置。下面介绍一下如何编写测试代码进行测试。

n  如何编写测试代码

本小节主要介绍如何使用NUnit框架编写调用带有WS-Security测试用例。本文将在TestWSE工程的基础上进行代码编写。

首先,在工程中引入NUnit Framework组件。右键点击Add Reference,选择nunit.framework,点击OK

在文件头中,添加代码using NUnit.Framework,在类的声明前添加[TestFixture],同时在编写每个测试用例代码时方法前面添加[Test],示例代码如代码片段8.17

                                                  代码8.17

01   using System;

02   using System.Collections.Generic;

03   using System.Text;

04   using NUnit.Framework;

05   namespace TestWSE

06   {

07     [TestFixture]

08       class TestHello

09       {

10       [Test]

11       public void TestCheckBalance()

12       {

13           Test.APPTEST.AppConsumeService ws = new Test.APPTEST.AppConsumeService();

14           String result = ws.checkBalance("2", "2", 10.2, true);

15           Assert.AreEqual("-3",result);

16       }

17       }

18   }

 

04行:添加NUnit.Framework引用

13行:新建代理类的实例

14行:调用待测试的服务器端代码

15行:对调用的结果进行断言

原创粉丝点击