1.创建
在WebService服务中添加一个类CustomSoapHeader,继承至System.Web.Services.Protocols.SoapHeader父类,必须添加一个无参构造函数,再添加一些验证逻辑,如图:
该类所有代码:
/// <summary>
/// 解决安全问题
/// </summary>
public class CustomSoapHeader : System.Web.Services.Protocols.SoapHeader//必须继承这个父类
{
private string userName = string.Empty;
private string passWord = string.Empty;
public CustomSoapHeader()//必须有一个无参数的构造函数
{ }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="userName">用户名</param>
/// <param name="passWord">密码</param>
public CustomSoapHeader(string userName, string passWord)
{
this.userName = userName;
this.passWord = passWord;
}
/// <summary>
/// 获取或设置用户用户名
/// </summary>
public string UserName
{
get { return userName; }
set { this.userName = value; }
}
/// <summary>
/// 获取或设置用户密码
/// </summary>
public string PassWord
{
get { return passWord; }
set { this.passWord = value; }
}
/// <summary>
/// 校验身份
/// </summary>
/// <returns></returns>
public bool Validate()
{
return this.UserName.Contains("s") && this.PassWord.Contains("1");
}
}
在对外提供的方法进行验证
public CustomSoapHeader CustomSoapHeader;//声明一个CustomSoapHeader变量
[WebMethod]
[System.Web.Services.Protocols.SoapHeader("CustomSoapHeader")]
public List<WebServiceUser> Get()
{
if (this.CustomSoapHeader != null && this.CustomSoapHeader.Validate())
{
return new List<WebServiceUser>()
{
new WebServiceUser()
{
Id=123,
Age=23,
Sex=0,
Name="艾边成",
Description="这是一个傻屌"
},
new WebServiceUser()
{
Id=234,
Age=34,
Sex=0,
Name="乔戴马",
Description="这是一个闷骚"
},
};
}
else
{
throw new SoapException("身份验证不通过", SoapHeaderException.ServerFaultCode);
}
}
在另一个程序中调用时
[TestMethod]//测试方法
public void TestMethod()
{
using (WebServiceTest.MyWebServiceSoapClient client = new WebServiceTest.MyWebServiceSoapClient())
{
var result3 = client.Get(new WebServiceTest.CustomSoapHeader()
{
UserName = "s400",
PassWord = "1232433"
});
}
}