靈活定義和處理SOAP頭訊息 (轉)
文件中編碼的資料是該格式的一部分。XML 文件由根 Envelope 標記組成,而該標記又由必需的 Body 元素和可選的 Header 元素組成。Body 元素由特定於訊息的資料組成。可選的 Header 元素可以包含不與特定訊息直接相關的附加訊息。Header 元素的每個子元素都叫做 P 標頭。
雖然 SOAP 標頭可以包含與該訊息相關的資料(因為 SOAP 規範沒有嚴格地定義 SOAP 標頭的內容),但是它們通常包含 中基礎結構處理的資訊。
使用 建立的 XML Web services 可以定義和操作 SOAP 標頭。定義 SOAP 標頭是透過定義表示特定 SOAP 標頭中資料的類以及從 microsoft.com/mshelp" />
建立一個從 SoapHeader 類派生的類,其名稱與 SOAP 標頭的根元素匹配。
public class MyHeader : SoapHeader
新增公共欄位或屬性,與 SOAP 標頭中每個元素的名稱和它們各自的資料型別匹配。
例如,在給定以下 SOAP 標頭的情況下,其後的類定義一個表示 SOAP 標頭的類。
public class MyHeader : SoapHeader
{
public string Username;
public string Password;
}
在 XML Web services 中處理 SOAP 標頭
將公共成員新增到實現表示 SOAP 標頭型別的 XML Web services 的類。
[WebService(Namespace="")]
public class MyWebService
{
// Add a member variable of the type deriving from SoapHeader.
public MyHeader myHeaderMemberVariable;
將 SoapHeader 屬性應用於要處理 SOAP 標頭的每個 XML Web services 方法。將 SoapHeader 特性的 MemberName 屬性設定為第一步中建立的成員變數的名稱。
[WebMethod]
[SoapHeader("myHeaderMemberVariable")]
public void MyWebMethod()
在應用 SoapHeader 特性的每個 XML Web services 方法中,訪問在第一步中建立的成員變數以處理在 SOAP 標頭中傳送的資料。
[WebMethod]
[SoapHeader("myHeaderMemberVariable")]
public void MyWebMethod()
{
// Process the SoapHeader.
if (myHeaderMemberVariable.Username == "admin")
{
// Do something interesting.
}
}
例項:
MyWebService XML Web services 具有一個名為 myHeaderMemberVariable 的成員變數,該成員變數屬於從 SoapHeader (MyHeader) 派生的型別並設定為 SoapHeader 特性的 MemberName 屬性。另外,將 SoapHeader 特性應用於指定 myHeaderMemberVariable 成員變數的 MyWebMethod XML Web services 方法。在 MyWebMethod XML Web services 方法中,訪問 myHeaderMemberVariable 成員變數來獲取 SOAP 標頭的 Username XML 元素的值。
" Class="MyWebService" %>
using System.Web.Services;
using System.Web.Services.Protocols;
// Define a SOAP header by deriving from the SoapHeader base class.
public class MyHeader : SoapHeader
{
public string Username;
public string Password;
}
[WebService(Namespace="")]
public class MyWebService
{
// Add a member variable of the type deriving from SoapHeader.
public MyHeader myHeaderMemberVariable;
// Apply a SoapHeader attribute.
[WebMethod]
[SoapHeader("myHeaderMemberVariable")]
public void MyWebMethod()
{
// Process the SoapHeader.
if (myHeaderMemberVariable.Username == "admin")
{
// Do something interesting.
}
}
}
生成處理 SOAP 標頭的客戶端
當與 XML Web services 進行通訊時,XML Web services 客戶端可以傳送和接收 SOAP 標頭。當使用 Wsdl.exe 實用工具為預期或返回 SOAP 標頭的 XML Web services 生成類時,該代理類包括有關 SOAP 標頭的資訊。明確地說,代理類具有表示 SOAP 標頭的成員變數,這些 SOAP 標頭與 XML Web services 中的 SOAP 標頭互相關聯。代理類也具有表示 SOAP 標頭的相應的類的定義。例如,為上面的 XML Web services 生成的代理類將具有一個 MyHeader 型別的成員變數以及 MyHeader 類的定義。
建立表示 SOAP 標頭的類的新例項。
MyHeader mySoapHeader = new MyHeader();
為該 SOAP 標頭填充值。
mySoapHeader.Username = "username";
mySoapHeader.Password = "password";
建立該代理類的新例項。
MyWebService = new MyWebService();
將該 SOAP 標頭分配到表示 SOAP 標頭的代理類的成員變數。
proxy.MyHeaderValue = mySoapHeader
對與 XML Web services 方法通訊的代理類方法。
傳送到 XML Web services 的 SOAP 請求的 SOAP 標頭部分將包括在 SOAP 標頭物件中資料的內容。
string results = proxy.MyWebMethod();
下面演示如何將 SOAP 標頭從客戶端傳遞到 XML Web services。
void Page_Load( o, EventArgs e)
{
MyHeader mySoapHeader = new MyHeader();
// Populate the values of the SOAP header.
mySoapHeader.Username = "username";
mySoapHeader.Password = "password";
// Create a new instance of the proxy class.
MyWebService proxy = new MyWebService();
// Add the MyHeader SOAP header to the SOAP request.
proxy.MyHeaderValue = mySoapHeader;
// Call the method on the proxy class that communicates with
// your XML Web service method.
string results = proxy.MyWebMethod();
// Display the results of the method in a label.
ReturnValue.Text = results;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958291/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VCL中訊息處理初探 (轉)
- 處理鍵盤輸入訊息(轉)
- C#的訊息處理方法 (轉)C#
- 自定義訊息獲取訊息(轉)
- 如何處理RabbitMQ 訊息堆積和訊息丟失問題MQ
- IOS 訊息推送處理iOS
- C++ BUILDER 訊息處理的深入探索 (轉)C++UI
- 自定義訊息和對訊息的理解
- php ActiveMQ的傳送訊息,與處理訊息PHPMQ
- Cloud Foundry架構和訊息處理機制Cloud架構
- MPLS RSVP訊息處理——VecloudCloud
- Storm保證訊息處理ORM
- 三、訊息的可靠處理
- Excel表格匯入Coreldraw地辦法和處理靈活技術Excel
- 回轉壽司你一定吃過!——Android訊息機制(處理)Android
- VC增加自定義訊息 (轉)
- .net core 訊息流處理流程
- MFC動態建立控制元件的訊息處理 (轉)控制元件
- 處理Excel表格標題靈活技術二則Excel
- 亞信安慧AntDB:靈活處理資料典範
- 用 Go 寫一個簡單訊息佇列(一):定義訊息和基礎工具Go佇列
- Delphi重定義的訊息結構
- 關於捕獲VCL沒有處理的Windows訊息 (轉)Windows
- MySQL定義異常和異常處理詳解MySql
- 訊息處理:利用控制元件的動態派生[RunTime],為控制元件新增該控制元件未定義的訊息對映 (轉)控制元件
- 處理檔案上傳時的訊息格式轉換問題
- 處理滑鼠離開視窗的訊息 (WM_MOUSELEAVE) (轉)
- VB與VC混合程式設計中處理訊息的方法 (轉)程式設計
- 利用Delphi訊息處理建立類似Windows開始選單 (轉)Windows
- gin 原始碼閱讀(5) - 靈活的返回值處理原始碼
- SAP ABAP 釋放 TR 遇到錯誤訊息 ended with return code 8 的含義和處理辦法
- 【實戰教程】微信卡券訊息處理
- Go 語言的錯誤訊息處理Go
- Storm基礎(四)保證訊息處理ORM
- 使用 Java API 處理 WebSphere MQ 大訊息JavaAPIWebMQ
- Spring Boot和Apache Kafka結合實現錯誤處理,訊息轉換和事務支援?Spring BootApacheKafka
- Protocol Buffers學習(1):定義一個訊息Protocol
- OFFICE2K符號欄的靈活設定 (轉)符號