|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
以前学了大概半年时间的asp(没有机会做大系统,最多是自己对公司系统做些调整和修改还有一些小程序)。应该说开始接触asp.net是今年元月5号的事。现在很想把公司的系统重新用.net来架构,却不知道如何下手。asp.net|web在平安性请求不是很高的ASP.Net程序中,基于Forms的身份考证是常常利用的一种体例,而假如必要对WebService举行身份考证,最经常使用的多是基于Soap标头的自界说身份考证体例。假如对二者做一下对照的话,明显,基于Forms的考证体例加倍便利易用,可否将Forms考证体例使用到WebService中往呢?
从实际上讲,利用基于Forms的体例对WebService举行身份考证是可行的,可是利用过程当中会存在以下两个成绩:
1.基于Forms的考证体例同时也是基于Cookie的考证体例,在利用扫瞄器时,这个成绩是不必要我们思索的。但关于利用WebService的使用程序来讲,默许是不克不及保留Cookie的,必要我们本人往做这个事情。
2.WebService既然是一个A2A(ApplicationToApplication)使用程序,利用Web表单举行身份考证明显不太符合,并且,这将不成制止的形成人机交互,使WebService的使用年夜打扣头。
接上去,我们就分步办理这两个成绩:
1.Cookie的保留成绩
WebService的客户端代办署理类有一个属性CookieContainer可用于设置或猎取Cookie汇合,保留Cookie的义务就交给他了:
System.Net.CookieContainercookieContainer=newSystem.Net.CookieContainer();
MyService.WebServiceservice=newApp.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文件以下:
<?xmlversion="1.0"encoding="utf-8"?>
<configuration>
<system.web>
<compilationdebug="false"/>
<authenticationmode="Forms">
<formsname="MyService"loginUrl="Login.asmx"></forms>
</authentication>
<authorization>
<denyusers="?"/>
</authorization>
</system.web>
</configuration>
实在我们其实不想在未经由过程身份考证时让扫瞄器转向到Login.asmx,关于利用WebService的客户程序来讲,真实的实惠在于:能够匿名会见Login.asmx中的办法(固然我们也能够把Login.asmx放在独自的目次中,然后同意对该目次的匿名会见来达个这个目标,但我以为仍是用loginUrl更文雅一些)。
接上去,我们为Login.asmx增加用于身份考证的WebMethod:
[WebMethod]
publicboolCheck(stringuserName,stringpassword)
{
if(userName=="aaaaaa"&&password=="123456")//增加考证逻辑
{
System.Web.Security.FormsAuthentication.SetAuthCookie(userName,false);
returntrue;
}
else
{
returnfalse;
}
}
最初一步事情就是:让客户程序中的WebService实例与Login实例共享CookieContainer。
classSample
{
System.Net.CookieContainercookieContainer=newSystem.Net.CookieContainer();
publicvoidLogin()
{
MyServiceLogin.Loginlogin=newApp.MyServiceLogin.Login();
login.CookieContainer=cookieContainer;
login.Check("aaaaaa","123456");
}
publicvoidShowHelloWorld()
{
MyService.WebServiceservice=newApp.MyService.WebService();
service.CookieContainer=cookieContainer;
Console.WriteLine(service.HelloWorld());
}
}
Login()今后再ShowHelloWorld(),你是不是看到了我们熟习的“HelloWorld”?Ok,就这么复杂!
简单的说:.net只有微软一家在做的,微软也不允许别人跟他做相同的工具,所以他就把需要的工具全部封装在.net的平台上了;而java是公开了。 |
|