在调用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