内容转自:http://www.cnblogs.com/houdejun214/archive/2007/10/14/923790.html
介绍
最经我开发了为我的客户端返回一些敏感数据的 webservice 方法,我需要找到一个简单的方法来验证调用这些webservice方法的用户身份。这就是我要谈到的方法。
背景
我一直在开发 webservice 方法为我正在开发的客户端。在大多数情况下,他们传递的信息都是适应于任何公共的对象的,但最近我正在开发的一个项目要求我必须采取另一种的验证方法。
代码
我想让它在客户端容易实现,如下所示
![](Images/OutliningIndicators/None.gif)
2
![](Images/OutliningIndicators/None.gif)
3
![](Images/OutliningIndicators/None.gif)
4
![](Images/OutliningIndicators/ExpandedBlockStart.gif)
![](Images/OutliningIndicators/ContractedBlock.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
5
![](Images/OutliningIndicators/InBlock.gif)
6
![](Images/OutliningIndicators/InBlock.gif)
7
![](Images/OutliningIndicators/InBlock.gif)
8
![](Images/OutliningIndicators/InBlock.gif)
9
![](Images/OutliningIndicators/InBlock.gif)
10
![](Images/OutliningIndicators/InBlock.gif)
11
![](Images/OutliningIndicators/InBlock.gif)
12
![](Images/OutliningIndicators/InBlock.gif)
13
![](Images/OutliningIndicators/InBlock.gif)
14
![](Images/OutliningIndicators/InBlock.gif)
15
![](Images/OutliningIndicators/InBlock.gif)
16
![](Images/OutliningIndicators/InBlock.gif)
17
![](Images/OutliningIndicators/InBlock.gif)
18
![](Images/OutliningIndicators/InBlock.gif)
19
![](Images/OutliningIndicators/InBlock.gif)
20
![](Images/OutliningIndicators/ExpandedBlockEnd.gif)
基本上所有应用客户端所要做的只是需要创建一个验证对象实例(此处即为下面要要定义的soap header 和 webservice类),填充用户名称和密码,然后传递此验证对象给webservice项目中。webservice代码也非常的简单,.NET framwork让你能轻松的创建一个自定义继承于SoapHeader
类的SOAP头,在此自定义类中我们添加了新的用户名和密码成员属性
![](Images/OutliningIndicators/None.gif)
2
![](Images/OutliningIndicators/None.gif)
3
![](Images/OutliningIndicators/None.gif)
4
![](Images/OutliningIndicators/ExpandedBlockStart.gif)
![](Images/OutliningIndicators/ContractedBlock.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
5
![](Images/OutliningIndicators/InBlock.gif)
6
![](Images/OutliningIndicators/InBlock.gif)
7
![](Images/OutliningIndicators/ExpandedBlockEnd.gif)
下一步是添加自定义的验证对象到webservice方法中,在次示例中我包含一个webmethod方法SensitiveData
,我了增加我们自定义的新的SOAP头,我们需要添加如下属性到方法中
![](Images/OutliningIndicators/None.gif)
完整的方法定义如下
![](Images/OutliningIndicators/None.gif)
![](Images/OutliningIndicators/None.gif)
![](Images/OutliningIndicators/None.gif)
![](Images/OutliningIndicators/None.gif)
![](Images/OutliningIndicators/None.gif)
![](Images/OutliningIndicators/None.gif)
![](Images/OutliningIndicators/ExpandedBlockStart.gif)
![](Images/OutliningIndicators/ContractedBlock.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](Images/OutliningIndicators/ContractedSubBlock.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/b854634c0904529d4018c4c3336be836.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/InBlock.gif)
![](Images/OutliningIndicators/ExpandedBlockEnd.gif)
这里我要提醒一点就是当我所说到的SOAP 头时,我是指的在一个soap请求中的 SOAP:Header元素,与我们常说的http协议中的http header没有关系。soap请求的代码形式如下所示:
![](Images/OutliningIndicators/None.gif)
2
![](Images/OutliningIndicators/None.gif)
3
![](Images/OutliningIndicators/None.gif)
4
![](Images/OutliningIndicators/None.gif)
5
![](Images/OutliningIndicators/None.gif)
6
![](Images/OutliningIndicators/None.gif)
7
![](Images/OutliningIndicators/None.gif)
8
![](Images/OutliningIndicators/None.gif)
9
![](Images/OutliningIndicators/None.gif)
10
![](Images/OutliningIndicators/None.gif)
11
![](Images/OutliningIndicators/None.gif)
12
![](Images/OutliningIndicators/None.gif)
在实例代码中有相应的client 和 service 源代码