会员
周边
众包
新闻
博问
闪存
赞助商
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
自助者天助
顺势而为,乘势而上!
博客园
首页
新随笔
联系
订阅
管理
添加Soap头来增加Web Service的安全性
myService.asmx.cs
添加类:
MyHeader
从 System.Web.Services.Protocols.SoapHeader继承
完整的代码如下
using
System;
using
System.Collections;
using
System.ComponentModel;
using
System.Data;
using
System.Diagnostics;
using
System.Web;
using
System.Web.Services;
//
对soap Head引用添加的命名空间
using
System.Web.Services.Protocols;
namespace
study
{
/**/
///
<summary>
///
myService 的摘要说明。
///
</summary>
//
[WebService(Namespace="
http://MyServer/MyWebServices/
")]
public
class
myService : System.Web.Services.WebService
{
/**/
///
<summary>
///
Soap头实例
///
</summary>
public
MyHeader myHeader
=
new
MyHeader();
public
myService()
{
//
CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的
InitializeComponent();
}
组件设计器生成的代码
#region
组件设计器生成的代码
//
Web 服务设计器所必需的
private
IContainer components
=
null
;
/**/
///
<summary>
///
设计器支持所需的方法 - 不要使用代码编辑器修改
///
此方法的内容。
///
</summary>
private
void
InitializeComponent()
{
}
/**/
///
<summary>
///
清理所有正在使用的资源。
///
</summary>
protected
override
void
Dispose(
bool
disposing )
{
if
(disposing
&&
components
!=
null
)
{
components.Dispose();
}
base
.Dispose(disposing);
}
#endregion
//
WEB 服务示例
//
HelloWorld() 示例服务返回字符串 Hello World
//
若要生成,请取消注释下列行,然后保存并生成项目
//
若要测试此 Web 服务,请按 F5 键
[WebMethod]
public
string
HelloWorld()
{
return
"
Hello World
"
;
}
[SoapHeader(
"
myHeader
"
)]
[WebMethod(Description
=
"
ddddddd
"
,EnableSession
=
true
)]
public
string
HelloWorld2(
string
contents)
{
string
msg
=
""
;
//
验证是否有权访问
if
(
!
myHeader.IsValid(
out
msg))
return
msg;
return
"
Hello World:
"
+
contents;
}
}
public
class
MyHeader : System.Web.Services.Protocols.SoapHeader
{
private
string
_UserID
=
string
.Empty;
private
string
_PassWord
=
string
.Empty;
/**/
///
<summary>
///
构造函数
///
</summary>
public
MyHeader()
{
}
/**/
///
<summary>
///
构造函数
///
</summary>
///
<param name="nUserID">
用户ID
</param>
///
<param name="nPassWord">
加密后的密码
</param>
public
MyHeader(
string
nUserID,
string
nPassWord)
{
Initial(nUserID,nPassWord);
}
属性
#region
属性
/**/
///
<summary>
///
用户名
///
</summary>
public
string
UserID
{
get
{
return
_UserID;}
set
{_UserID
=
value;}
}
/**/
///
<summary>
///
加密后的密码
///
</summary>
public
string
PassWord
{
get
{
return
_PassWord;}
set
{_PassWord
=
value;}
}
#endregion
方法
#region
方法
/**/
///
<summary>
///
初始化
///
</summary>
///
<param name="nUserID">
用户ID
</param>
///
<param name="nPassWord">
加密后的密码
</param>
public
void
Initial(
string
nUserID,
string
nPassWord)
{
UserID
=
nUserID;
PassWord
=
nPassWord;
}
/**/
///
<summary>
///
用户名密码是否正确
///
</summary>
///
<param name="nUserID">
用户ID
</param>
///
<param name="nPassWord">
加密后的密码
</param>
///
<param name="nMsg">
返回的错误信息
</param>
///
<returns>
用户名密码是否正确
</returns>
public
bool
IsValid(
string
nUserID,
string
nPassWord,
out
string
nMsg)
{
nMsg
=
""
;
try
{
//
判断用户名密码是否正确
if
(nUserID
==
"
admin
"
&&
nPassWord
==
"
admin
"
)
{
return
true
;
}
else
{
nMsg
=
"
对不起,你无权调用此Web服务,可能有如下原因:\n 1.您的帐号被管理员禁用。\n 2.您的帐号密码不正确
"
;
return
false
;
}
}
catch
{
nMsg
=
"
对不起,你无权调用此Web服务,可能有如下原因:\n 1.您的帐号被管理员禁用。\n 2.您的帐号密码不正确
"
;
return
false
;
}
}
/**/
///
<summary>
///
用户名密码是否正确
///
</summary>
///
<returns>
用户名密码是否正确
</returns>
public
bool
IsValid(
out
string
nMsg)
{
return
IsValid(_UserID,_PassWord,
out
nMsg);
}
#endregion
}
}
通过
soap
调用的代码如下:
//
在此处放置用户代码以初始化页面
//
创建myService对象
MyWebServer.myService service
=
new
study.MyWebServer.myService();
//
创建soap头对象
MyWebServer.MyHeader header
=
new
study.MyWebServer.MyHeader();
//
设置soap头变量
header.PassWord
=
"
admin
"
;
header.UserID
=
"
admin
"
;
service.MyHeaderValue
=
header;
//
调用web 方法
this
.Label1.Text
=
service.HelloWorld2(
"
dob
"
);
posted @
2008-01-14 15:52
自助者天助
阅读(
377
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
公告