找了一下关于Asp.NET Forms WebService,大部分都是转贴“chinadhf”的下篇文章:
使用ASP.Net Forms模式实现WebService身份验证
其中提到:
System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();
MyService.WebService service = new App.MyService.WebService();
service.CookieContainer = cookieContainer;
但是,我怎么也没有找到代理实体的CookieContainer属性,惭愧!给各路牛人发邮件、回帖、留消息,都没有人答复,遗憾!!
好在又从网上找到一些资料可以解决我的问题,虽然我也觉得不是最佳解决办法。现在共享出来:
1、创建一个SoapHeader的派生类
public class CredentialSoapHeader : SoapHeader
{
public string UserName
{
get;
set;
}
public string Password
{
get;
set;
}
}
2、在需要验证的webService类里面添加验证属性
3、在需要验证的Web方法上添加标签 [SoapHeader("Credentail")]
public class Login : System.Web.Services.WebService
{
public CredentialSoapHeader Credentail
{
get;
set;
}
[WebMethod]
[SoapHeader("Credentail")]
public string HelloWorld()
{
this.VerifyCredential(this);
return "Welcome " + this.Credentails.UserName;
}
/// <summary>
/// 验证是否合法
/// </summary>
/// <param name="s"></param>
private string VerifyCredential(Login s)
{
if (s.Credentails == null || s.Credentails.UserName == null || s.Credentails.UserPassword == null)
{
return "验证失败:无用户认证信息";
}
//在这里可以进一步进行自定义的用户验证
return "OK";
}
}
这样,在客户端代理实体调用该方法时,就需要提供一个CredentialSoapHeader 的对象了,在服务端的验证方法里,我们可以添加相应的身份验证机制。