在调用Web Serivices时,往往需要身份验证,使得通过验证的用户才能调用你Web Serivices中的方法.当然你可以通过将参数添加到每个需要自定义身份验证方案的Web services方法中去,这需要花费很大的精力.
本文参看了IssueVision
使用了非常常用而且有效便捷的方法-----使用SoapHeader来实现自定义身份验证数据的传递.
主要步骤:
?
1首先定义自己的验证类:包括用户名和密码:
using System.Text;
using System.Web.Services.Protocols;
namespace Model
{
??? public?? class MySoapHeader: SoapHeader
??? {
??????? public? string? UserName
??????? { get;
????????? set;
??????? }
??????? public? string? PassWord
??????? {
??????????? get;
??????????? set;
??????? }
??????
??? }
}
2:在自己的WEBSERVICES中写入该类:
如:
? [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 WebService1 : System.Web.Services.WebService
??? {
??????? public Model.MySoapHeader MyHeader;
}
3:添加验证方法:
在服务器端APP.CONFIG中配置
如下:
?<add key ="UserName" value="123"/>
???<add key="PassWord" value ="123"/>
自己添加一个验证方法
? public static void VerifySoapHeader(Model.MySoapHeader MyHeader)
??????? {
??????????? string name = System.Configuration.ConfigurationManager.AppSettings["UserName"].ToString();
??????????? string pass = System.Configuration.ConfigurationManager.AppSettings["PassWord"].ToString();
??????????? if (MyHeader != null && MyHeader.PassWord != null && MyHeader.UserName != null)
??????????? {
??????????????? if (name == MyHeader.UserName && pass == MyHeader.PassWord)
??????????????? {
???????????????????
??????????????? }
??????????????? else
??????????????? {
??????????????????? throw new Exception("验证信息错误");
??????????????? }
??????????? }
??????????? else
??????????? {
??????????????? throw new Exception("验证信息错误");
??????????? }
??????? }
4:在WEBSERVICES中添加SOAP头和验证方法:
????? [WebMethod]
??????? [SoapHeader("MyHeader")]???//用于验证soap头
??????? public DataTable Select()
??????? {
??????????? SoapHeaderVerify.VerifySoapHeader(this.MyHeader);???//验证
??????????? return BLL.BTest.Select();
???????????
??????? }
?
?
5在客户端添加如下代码:
a在app.config中
添加:
<appSettings>
??? <add key="UserName"? value="123"/>
??? <add key="PassWord" value="123" />
? </appSettings>
其次:在窗口中添加
?????? localhost.WebService1SoapClient client;
??????? localhost.MySoapHeader MyHeader;
????????? ?client = new localhost.WebService1SoapClient();
??????????????? MyHeader = new localhost.MySoapHeader();
??????????????? MyHeader.UserName = System.Configuration.ConfigurationManager.AppSettings["UserName"].ToString();
??????????????? MyHeader.PassWord = System.Configuration.ConfigurationManager.AppSettings["PassWord"].ToString();
?
然后在调用WEBSERVICES的方法的时候把soap头加上就行了:
如:
client.Select(MyHeader);
?
其它的参考资料:
http://www.cnblogs.com/chhuic/archive/2009/09/28/1576050.html
http://space.itpub.net/?uid-12639172-action-viewspace-itemid-157121
http://developer.51cto.com/art/200908/141829.htm