【转载】在VS2008中使用WSE 3.0过程全记录

【转载】在VS2008中使用WSE 3.0过程全记录

WSE全称是Web Service Enhancement,提供了更好的安全性实现,以及大对象传输的设计。

有关WSE的一些介绍,如果不清楚,可以参考下面的链接

官方介绍:http://www.microsoft.com/china/MSDN/library/WebServices/WebServices/WSESecurity.mspx?mfr=true

下载位置:http://www.microsoft.com/downloads/details.aspx?FamilyID=018a09fd-3a74-43c5-8ec1-8d789091255d&DisplayLang=en

这两天讲课中又提到了WSE。现在我们用的是VS2008,与之前VS2005还有一点不一样。所以,今天我再次将使用步骤做一个完整的记录

第一部分:准备证书

WSE是需要证书的。证书是用来对消息进行加密和签名的。作为测试目的,可以通过makecert这个工具来做

image

我自己写了一个bat文件,内容如下

REM 这个脚本用来创建一个测试的证书

REM 作者:陈希章

set CERTNAME=TestServiceCert
certmgr -del -r LocalMachine -s My -c -n %CERTNAME%
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=%CERTNAME% -sky exchange -pe
set WP_ACCOUNT=NETWORK SERVICE
(ver | findstr “5.1”) && set WP_ACCOUNT=%COMPUTERNAME%\ASPNET
winhttpcertcfg -g -c LOCAL_MACHINE\My -s %CERTNAME% -a “%WP_ACCOUNT%”

REM 授予IIS帐号对该证书的访问权限
iisreset
pause

红色的部分,你可以修改成自己想要的名称

创建好证书之后

image

第二部分:创建和配置服务

1. 创建服务。

【注意】经过反复测试,必须使用网站模板,而不是项目模板创建Web Service

image

2. 在服务项目中,添加对Microsoft.Web.Service3.dll的引用

image

【备注】该程序集的位置在

image

image

3. 通过Configuration Tool配置服务。在VS2005的时候,这个工具可以集成到IDE中。而VS2008则不可以

image

image

选择”File”==》“Open”

image

在General页面中选中两个选项

image

在Security页面,注意选中Allow Test Root,因为我们用的证书是一个测试的,不受信任的。

image

在Policy页面,启用Policy

image

下面,我们准备创建一个策略。点击”Add”

image

输入一个名称,然后点击”OK”

image

image

这向导的这个页面,选择”Secure a Service Application”, 并且选择客户端验证方法为”UserName”(这种方式其实使用服务器的Windows帐号作为凭据的)

image

这个页面可以做授权(Authorization)。我们这里不做指定

image

这个页面我们保留所有默认值

image

这个页面中点击”Select Certificate” ,

image

选择我们刚才创建的证书:TestServiceCert, 然后点击“确定”

image

点击“Finish”,即可完成所有的配置

完成之后,选择”File” ==》“Save”来保存配置

image

然后,可以关闭Configuration Tool,回到Visual Studio环境中。这个Service很简单,我们也不准备做任何修改。

image

image

点击“显示所有文件”这个按钮,我们会发现多了一个文件:wse3policyCache.config

image

选择该文件,点击右键,选择”包含在项目中”

image

双击打开该文件。这是一个附加的配置文件,我们刚才所做的配置都记录在该文件中。

image

我们还可以双击Web.config,看看有什么变化

image

4. 在服务上面应用策略

完成了策略配置之后,接下来我们就是为服务应用策略了。

转到Service1.asmx.cs文件

image

到这里为止,服务端的配置就完成了。此时,请编译项目。(Ctrl+Shift+B)

接下来我们需要创建客户端进行测试

第三部分:创建客户端并且进行测试

1. 在解决方案中添加一个Windows Forms应用程序

image

image

2. 添加Web Service引用

image

image

点击“此解决方案中的Web 服务”

image

点击“Service1”

image

点击“添加引用”

image

3. 编写代码访问HelloWorld方法

image

4. 运行Client程序,进行调试

将Client项目设置为启动项目
image

然后,按F5键进行调试

image

点击“调用服务”,我们会遇到一个异常,如下

image

image

为什么会出现这样的异常呢?

原因很简单:服务器端已经启用了WSE,而客户端并没有启用。所以,接下来,我们得完成客户端的配置

5. 运行configuration Tool对客户端进行配置。

通过”File” =>”Open”打开Client项目的app.config

image

General页面中只能选中第一个选项。

image

Security页面中照样要选中“Allow test roots”

image

Policy页面中启用Policy后,点击“add”

image

输入名称,点击“Ok”

image

image

这个页面中选择“Secure a client application”,并且设置验证方法为”UserName”

image

保留默认值,在代码中指定用户的凭据

image

保留默认值

image

【注意】这里要选择与服务器相同的证书。点击Next,然后点击Finish

image

最后,完成保存后关闭Configuration Tool

回到Visual Studio之后,将wse3policyCache.config文件包含到项目中

image

并且设置该文件的属性。复制到输出目录

image

6. 在Client项目也添加对Microsoft.Web.Service3.dll的引用

image

7. 修改Web引用的代理文件

image

双击Reference.cs

image

添加一个using语句。并且将Service1这个类的基类修改为WebServiceClientProtocol.保存该文件,重新编译

8. 修改窗体代码

image

9. 再一次进行调试。我们就可以正常看到一个对话框

image

第四部分:查看加密的消息。

我们知道现在的消息是通过证书加密的,但事实上是不是真的加密了呢?我们可以通过Configuration Tool再次打开客户端的配置文件app.config

image

在Diagnostics页面,Enable Message Trace

然后保存该文件。重新调试客户端。此时会生成两个文件。

image

我们可以打开InputTrace.webinfo看一下。在SOAPBody里面的内容已经经过了加密

image

SOAPHeader里面包含了我们的用户名和密码,毫无疑问,也是经过了加密的

第五部分:使用自定义的UserNameTokenManager

上面的例子很成功,但目前它所使用的用户凭据是Windows凭据。如果我们想自定义身份验证,应该怎么办呢?

1. 创建自定义的UserNameTokenManager.

我们可以创建一个单独的类库项目

image

在该项目中,添加对Microsoft.Web.Service3.dll的引用

创建一个类型,代码大致如下

image

编译该项目。

2. 在服务项目中添加上述程序集的引用

image

3. 重新用Configuration Tool对服务的Web.config进行配置。定位到“Security”页面

image

在Security Tokens Managers的位置,点击”Add”

image

在Built in Token Managers中选择“UserNameTokenManager”

image

将Type修改为

MyUserNameTokenManger.MyUserNameTokenManger,MyUserNameTokenManger

image

保存修改之后,在web.config中可以发现下面的变化

<securityTokenManager>
  <add type=”MyUserNameTokenManager.MyUserNameTokenManager,MyUserNameTokenManager” namespace=”http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd”localName=”UsernameToken” />

注意,红色的部分一定不要去更改,否则就是无法成功。没有什么理由,但我也为此耗费了几个小时。

</securityTokenManager>

4. 重新调试客户端

客户端的配置和代码无需任何更改

如果正确地提供了密码,则会返回”Hello,world”,否则,会返回下面的错误

image

应该用try…catch的方式,捕捉到该异常之后,通知用户检查用户名和密码

 

【转自】http://www.cnblogs.com/chenxizhang/archive/2009/05/12/1455187.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119413.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Git 忽略一些文件不加入版本控制

    Git 忽略一些文件不加入版本控制

    2021年10月20日
  • 三号伴唱※414

    三号伴唱※414这个名字还有点古怪,但是知道内幕的就不难理解了~先说三号伴唱,这个有点苦笑不得,或者叫自作自受,嗨,没办法,似乎我总是该不了这个幻想的习惯 ~所以教训是,当你没有看清face的时候,你有两个选择:1,继续保持这种朦胧美,不要有see的desire(ok,但是这一点比较难做到)2,请以一颗平常心,你看的就是你看到的,不要有任何臆想和推断,否则下一个吐血的就是你~ok,该能推断的出的就已

  • CSA 第五届研讨会 想象

    CSA 第五届研讨会 想象

  • 详解java动态代理机制以及使用场景

    详解java动态代理机制以及使用场景详解java动态代理机制以及使用场景

  • 类似于吾爱激活成功教程的免费论坛_哔哩哔哩吾爱激活成功教程

    类似于吾爱激活成功教程的免费论坛_哔哩哔哩吾爱激活成功教程吾爱激活成功教程吧http://www.52pjb.net/网站收集了众多软件,类似于软件博客这种,同行业的还有胡萝卜周、易激活成功教程、心海这类的,如果你喜欢这种风格的软件下载博客,那么它绝对是首选,当然也是不要钱的,也没有什么赞助收费这类的盈利,站长完全是用爱发电!不过缺点是有些资源需要用网盘下载,毕竟是激活成功教程软件,也是可以理解的!吾爱激活成功教程论坛他也是目前国内最大的软件激活成功教程论坛,而且网友都很热心,也是国内下载氛围最好的软件下载网站论坛,也还不错。正版中国是一个分享正版软件限时免费..

    2022年10月13日
  • 手把手教你学DSP(TMS320X281X) 2020-11-30

    手把手教你学DSP(TMS320X281X) 2020-11-30内容为自己看《手把手教你学dspTMS320X281X》(顾卫刚版)图书的笔记,只是记录一下自己学习的思想历程。由于自己硬件学习也是新手,如有错误,请评论或者私信指出,如果看见一定更正;如果感觉本文对您有帮助,可以给个点赞;顺便可以关注或收藏一波不迷路。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号