「一般舊 XML」(POX) 應用程式會藉由交換只包含未包含在 SOAP 信封內的 XML 應用程式資料的原始 HTTP 訊息來進行通訊。 Windows Communication Foundation (WCF) 可以提供使用 POX 訊息的服務與用戶端。 在服務上,WCF 可用來實作服務,這些服務會將端點公開給用戶端,例如 Web 瀏覽器和傳送和接收 POX 訊息的腳本語言。 在用戶端上,WCF 程式設計模型可用來實作與 POX 型服務通訊的用戶端。
備註
本檔最初是針對 .NET Framework 3.0 所撰寫。 .NET Framework 3.5 內建支援使用POX應用程式。 如需有關 WCF Web HTTP 程式設計模型 的詳細資訊,請參閱。
使用 WCF 進行 POX 程式設計
使用 POX 訊息透過 HTTP 進行通訊的 WCF 服務會使用 <customBinding>。
<customBinding>
<binding name="poxServerBinding">
<textMessageEncoding messageVersion="None" />
<httpTransport />
</binding>
</customBinding>
此自訂系結包含兩個元素:
標準 WCF 文字訊息編碼器已特別設定為使用 None 值,以允許它處理未包裝在 SOAP 信封中的 XML 訊息承載。
使用 POX 訊息透過 HTTP 通訊的 WCF 用戶端會使用類似的系結(如下列命令式程式碼所示)。
private static Binding CreatePoxBinding()
{
TextMessageEncodingBindingElement encoder =
new TextMessageEncodingBindingElement( MessageVersion.None, Encoding.UTF8 );
HttpTransportBindingElement transport = new HttpTransportBindingElement();
transport.ManualAddressing = true;
return new CustomBinding( new BindingElement[] { encoder, transport } );
}
由於 POX 用戶端必須明確指定傳送訊息的 URI,所以通常必須HttpTransportBindingElement將元素上的ManualAddressing屬性設定為true手動尋址模式。 這可讓應用程式程式代碼明確尋址訊息,而且每次應用程式將訊息傳送至不同的 HTTP URI 時,都不需要建立新的 ChannelFactory 訊息。
由於 POX 訊息不會使用 SOAP 標頭來傳達重要的通訊協定資訊,POX 用戶端和服務通常必須操控用於傳送或接收訊息的 HTTP 請求中的各個片段。 HTTP 特定通訊協定資訊,例如 HTTP 標頭和狀態代碼,會在 WCF 程式設計模型中透過兩個類別呈現:
HttpRequestMessageProperty,其中包含 HTTP 要求的相關信息,例如 HTTP 方法和要求標頭。
HttpResponseMessageProperty,其中包含 HTTP 回應的相關信息,例如 HTTP 狀態代碼和狀態描述,以及任何 HTTP 回應標頭。
下列程式代碼範例示範如何建立尋址至 http://localhost:8100/customers的 HTTP GET 要求訊息。
Message request = Message.CreateMessage( MessageVersion.None, String.Empty );
request.Headers.To = "http://localhost:8100/customers";
HttpRequestMessageProperty property = new HttpRequestMessageProperty();
property.Method = "GET";
property.SuppressEntityBody = true;
request.Properties.Add( HttpRequestMessageProperty.Name, property );
首先,透過呼叫Message來建立一個空的請求CreateMessage(MessageVersion, String)。 參數 None 用來指出不需要 SOAP 信封,而且 Empty 參數會當做 Action 傳遞。 然後,透過將 To 標頭設定為所需的 URI 來處理要求訊息。 接下來,會建立一個HttpRequestMessageProperty,並將Method設定為 HTTP 動詞 GET 方法,將SuppressEntityBody設定為true,以指示不應在傳出的 HTTP 請求訊息正文中傳送任何資料。 最後,要求屬性會新增至 Properties 要求訊息的集合,以便影響 HTTP 傳輸傳送要求的方式。 然後,訊息即可透過適當的實例 IRequestChannel傳送。
類似的技術可用於服務,從傳入訊息擷取 HttpRequestMessageProperty ,並建構回應。