可以在每个服务调用前或初始化时进行身份验证
1.定义有身份验证信息的类,这个类继承System.Web.Services.Protocols.SoapHeader,而且定义两个成员变量,一个为UserName,一个为PassWord,如下:
public class MySoapHeader : SoapHeader
{
public string UserName { get; set; }
public string PassWord { get; set; }
}
2.在具体调用的WebService方法中加入验证方法,具体如下:
/// <summary>
/// MyServices 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
// [System.Web.Script.Services.ScriptService]
public class MyServices : System.Web.Services.WebService
{
public MySoapHeader header;
[WebMethod(Description = "用于用户验证测试")]
[System.Web.Services.Protocols.SoapHeader("header")]//用户身份验证的soap头
public string MyServicesTest(string str)
{
string userName = header.UserName;
string passWord = header.PassWord;
if (userName == "admin" && passWord == "admin")
{
return str;
}
return "NG:用户未登录,请先登录后使用!";
}
}
MyServices.MyServices myServices = new MyServices.MyServices();
MyServices.MySoapHeader myHeader = new MyServices.MySoapHeader();
myHeader.UserName = "admin";
myHeader.PassWord = "admin";
myServices.MySoapHeaderValue = myHeader;
MessageBox.Show( myServices.MyServicesTest("test"));
扩展阅读:http://blog.csdn.net/abandonship/article/details/5824328