有些WebService为了安全都需要进行身份验证,这里我们使用通过继承 SoapHeader 进行身份验证。
继承SoapHeader的类:
public class CustomSoapHeader: SoapHeader
{
private string username = string.Empty;
private string userpwd = string.Empty;
public CustomSoapHeader() { }
public CustomSoapHeader(string name, string pwd)
{
username = name;
userpwd = pwd;
}
public string UserName
{
set { username = value; }
get { return username; }
}
public string UserPwd
{
set { userpwd = value; }
get { return userpwd; }
}
public bool Validata()
{
return UserName.Equals("admin") && UserPwd.Equals("123");
}
}
WebService服务代码:
public class WebServiceTest : System.Web.Services.WebService
{
public CustomSoapHeader customSoapHeader;
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
[SoapHeader("customSoapHeader")]
public int Sum(int m,int n)
{
if (customSoapHeader != null && customSoapHeader.Validata())
{
return m + n;
}
else
{
throw new SoapException("身份认证不通过",SoapHeaderException.ServerFaultCode);
}
}
[WebMethod]
public List<User> GetUsers()
{
return new List<User>()
{
new User()
{
Name="Tim",
Old=15
},
new User()
{
Name="Mike",
Old=18
}
};
}
}
public class User
{
public string Name { set; get; }
public int Old { set; get; }
}
}
需要注意的是== [SoapHeader(string memberName)]== memberName是子类的变量名称
客户端调用:
private void Test()
{
CustomSoapHeader header = new CustomSoapHeader()
{
UserName = "admin",
UserPwd = "123"
};
using (WebServiceTestSoapClient client = new WebServiceTestSoapClient())
{
int sum = client.Sum(header, 5, 6);
var users = client.GetUsers();
}
}