SoapHeader 使用

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章