System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();
MyService.WebService service = new App.MyService.WebService();
service.CookieContainer = cookieContainer;
2.我们不想使用Web表单进行身份验证,幸运的是,ASP.Net表单验证中的表单页(即Web.config文件中 forms 元素内的loginUrl)同样可以指定为WebService文件。
我们创建一个专门用作身份验证的
Web服务,暂且命名为Login.asmx,然后让 loginUrl 等于 “Login.asmx”,当然,还需要在Web.config文件中的
authorization 节中禁止匿名访问(否则我们可就白忙活了),完成配置后的Web.config文件如下:
其实我们并不想在未通过身份验证时让浏览器转向到Login.asmx,对于使用WebService的客户程序来说,真正的实惠在于:可以匿名访问Login.asmx中的方法(当然我们也可以把Login.asmx放在单独的目录中,然后允许对该目录的匿名访问来达个这个目的,但我觉得还是用loginUrl更优雅一些)。
接下来,我们为Login.asmx添加用于身份验证的WebMethod:
[WebMethod]
public bool Check(string userName,string password)
{
if (userName == "aaaaaa" && password == "123456")//添加验证逻辑
{
System.Web.Security.FormsAuthentication.SetAuthCookie(userName, false);
return true;
}
else
{
return false;
}
}
最后一步工作就是:让客户程序中的WebService实例与Login实例共享CookieContainer。
class Sample
{
System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();
public void Login()
{
MyServiceLogin.Login login = new App.MyServiceLogin.Login();
login.CookieContainer = cookieContainer;
login.Check("aaaaaa", "123456");
}
public void ShowHelloWorld()
{
MyService.WebService service = new App.MyService.WebService();
service.CookieContainer = cookieContainer;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25897606/viewspace-756701/ ,如需转载,请注明出处,否则将追究法律责任。