SoapHeader 多數情況下用來傳遞用戶身份驗證信息,當然它的作用遠不止如此,有待於在實際應用中發掘。
SoapHeader 缺省情況下由客戶端代理對象發送給 WebService,當然我們可以通過 WebMethodAttribute.Direction 來改變傳送方向。
SoapHeader 使用步驟:
(1) 創建繼承自 System.Web.WebServices.SoapHeader 的自定義 SoapHeader 類型。
(2) 在 WebService 中創建擁有 public 訪問權限的自定義 SoapHeader 字段。
(3)
在需要使用 SoapHeader 的 WebMethod 上添加 SoapHeaderAttribute
訪問特性。SoapHeaderAttribute 構造必須指定 memberName 參數,就是我們在第二步中申明的字段名稱。
(4) 生成器會自動爲客戶端生成同名的自定義 SoapHeader 類型,只不過比起我們在 WebService 端創建的要複雜一些。同時還會爲代理類型添加一個 soapheaderValue 屬性。
在
下面的演示代碼,客戶端將傳遞一個自定義 MyHeader 到 WebService。請注意,我們儘管在 WebService
中申明瞭 MyHeader 字段,但並沒有創建對象實例,這是因爲客戶端傳遞過來的 XML 中包含了 SoapHeader
信息,基礎結構會自動解析並創建對象實例,然後賦值給 my 字段。至於客戶端,自然需要創建一個 MyHeader
對象實例,並賦值給 WebService.MyHeaderValue 屬性。SoapHeaderAttribute.Direction
缺省就是 In,下面例子中的 "Direction = SoapHeaderDirection.In " 可以省略。
WebServices.cs
public class MyHeader : SoapHeader
{
public string Username;
public string Password;
}
[WebService(Namespace = "http://www.rainsts.net/ ", Description= "我的Web服務 ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
public MyHeader my;
[WebMethod]
[SoapHeader( "my ", Direction = SoapHeaderDirection.In)]
public void TestSoapHeadIn()
{
System.Diagnostics.Debug.Write(my.Username);
System.Diagnostics.Debug.Write(my.Password);
}
}
Client.cs
WebService ws = new WebService();
MyHeader head = new MyHeader();
head.Username = "u2 ";
head.Password = "p2 ";
ws.MyHeadValue = head;
ws.TestSoapHeadIn();
我
們改寫一下,將傳遞方向改爲從 WebService 到客戶端。自然我們需要調整 "Direction =
SoapHeaderDirection.Out ",在 WebMethod 中我們還必須創建 MyHeader
實例,因爲這次我們不會接受到客戶端傳遞的 SoapHeader 了。客戶端代理對象調用 WebMethod 後就可以使用
MyHeaderValue 屬性訪問其內容了。
WebServices.cs
public class MyHeader : SoapHeader
{
public string Username;
public string Password;
}
[WebService(Namespace = "http://www.rainsts.net/ ", Description= "我的Web服務 ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
public MyHeader my;
[WebMethod]
[SoapHeader( "my ", Direction = SoapHeaderDirection.Out)]
public void TestSoapHeadOut()
{
my = new MyHeader();
my.Username = "u1 ";
my.Password = "p1 ";
}
}
Client.cs
WebService ws = new WebService();
ws.TestSoapHeadOut();
Console.WriteLine(ws.MyHeaderValue.Username);
Console.WriteLine(ws.MyHeaderValue.Password);
SoapHeader 使用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.