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这个工具来做

我自己写了一个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

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

创建好证书之后

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

1. 创建服务。

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

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

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

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

选择”File”==》“Open”

在General页面中选中两个选项

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

在Policy页面,启用Policy

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4. 在服务上面应用策略

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

转到Service1.asmx.cs文件

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

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

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

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

2. 添加Web Service引用

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

点击“Service1”

点击“添加引用”

3. 编写代码访问HelloWorld方法

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

将Client项目设置为启动项目

然后,按F5键进行调试

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

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

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

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

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

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

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

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

输入名称,点击“Ok”

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

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

保留默认值

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

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

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

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

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

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

双击Reference.cs

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

8. 修改窗体代码

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

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

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

在Diagnostics页面,Enable Message Trace

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

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

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

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

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

1. 创建自定义的UserNameTokenManager.

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

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

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

编译该项目。

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

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

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

在Built in Token Managers中选择“UserNameTokenManager”

将Type修改为

MyUserNameTokenManger.MyUserNameTokenManger,MyUserNameTokenManger

保存修改之后,在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”,否则,会返回下面的错误

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

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

【转载】在VS2008中使用WSE 3.0过程全记录的更多相关文章

  1. 在VS2008中使用WSE 3.0【转】

    原文:http://www.cnblogs.com/chenxizhang/archive/2008/07/25/1251626.html 在VS2008中使用WSE 3.0 WSE 是微软推出的一套 ...

  2. VS2008中MFC界面编程Caption中文全是乱码的解决办法 -转载

    一.问题 在预览状态下可能看到中文,但是编译运行后对话框中的中文全是问号.即使你用的VS中文版,即使你也用了Unicode编码,即使有条件编译 #ifdef _WIN32LANGUAGE LANG_C ...

  3. 数组中&a与&a[0]的区别 转载自http://blog.csdn.net/FX677588/article/details/74857473

    在探讨这个问题之前,我们首先来看一道笔试题,如下: [摘自牛客网]下列代码的结果是:(正确答案是 C) main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)( ...

  4. 宏定义中使用do{}while(0)的好处 (转载)

    宏定义中使用do{}while(0)的好处   #define MACRO_NAME(para) do{macro content}while(0)   的格式,总结了以下几个原因:   1,空的宏定 ...

  5. 转载:WinForm中播放声音的三种方法

    转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...

  6. Eclipse中部署hadoop2.3.0

    1 eclipse中hadoop环境部署概览 eclipse 中部署hadoop包括两大部分:hdfs环境部署和mapreduce任务执行环境部署.一般hdfs环境部署比较简单,部署后就 可以在ecl ...

  7. VS2008中开发智能设备程序的一些总结

    原文链接:http://blog.csdn.net/citybug_nj/article/details/2598705 程序中包括四个部分: 系统配置 这个部分用来配置系统中的相关参数,参数包括数据 ...

  8. 在VS2008中配置WDK7600驱动开发环境

    网上这类资料多如牛毛,也许很多人都是转来转去,却很有人去真正的测试,有时候感觉确实对他人也是一种误导. 这里是我自己在VS2008 + WDK7600.16385.0 + DDKWizard配置自己的 ...

  9. 百度编辑器ueditor 在vs2008中的使用方法

    个人觉得百度编辑器ueditor还是不错的,虽然出生的时间比较短,但某些方面相比其它富文本编辑器更优秀,免费.可定制等等. 由于在官方下载的ueditor包是在vs2012下开发的,可以在vs2010 ...

随机推荐

  1. Ubuntu18.04 NVIDIA显卡驱动 安装大全

    离线安装NVIDIA显卡驱动 费了一天的劲,走了好多的坑,最主要的原因是gcc版本的问题,一定要用最新版本的gcc!!! 1)官网下载显卡驱动 2)apt 下载gcc包及其依赖包,可用apt-cach ...

  2. Python打包成exe,pyc

    D:\mypython\path\ C:\Python27\Scripts\pyinstaller.exe -w mypython.py # Python打包成exe D:\mypython\path ...

  3. 解决CSDN阅读全部需要登录的问题

    现在CSDN网站每次点击“阅读全部”的时候,必须要登录才能展开,很不方便.解决方法如下:点击F12打开开发者工具,点击Console,将下面两行代码粘贴进去即可: $("div.articl ...

  4. Go:类型断言

    一.基本介绍 类型断言:由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言. 如果希望将一个空接口类型重新转换成对应的类型,那么需要使用类型断言,能转换成功是因为这个空接口原先 ...

  5. 如何用纯 CSS 创作一个容器厚条纹边框特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/YLqbXy 可交互视频教程 此视 ...

  6. crm 简约笔记

    crm# 给modelform使用的    tutor = models.ForeignKey(verbose_name='班主任', to='UserInfo', related_name='cla ...

  7. 【BZOJ 1222】 [HNOI2001] 产品加工(DP)

    Description 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机 ...

  8. Vue微信自定义分享时安卓系统config:ok,ios系统config:invalid signature签名错误,或者安卓和ios二次分享时均config:ok但是分享无效的解决办法

    简述需求:要求指定页面可以进行微信自定义分享(自定义标题,描述,图片,链接),剩下的页面隐藏所有基础接口.二次分享依然可以正常使用,切换至其他页面也可以正常进行自定义分享. 这两天在做微信自定义分享的 ...

  9. 大数据学习——yum练习安装mysql

    1. 安装mysql 服务器端: yum install mysql-server yum install mysql-devel 2. 安装mysql客户端: yum install mysql 3 ...

  10. Python+selenium(Autolt实现上传)

    AutoIt是一个使用类似BASIC脚本语言的免费软件,被设计用来进行Windows GUI的自动化测试.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务. 此次小编介绍的是利用Auto ...