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"
});
}
}