TransferMode 列舉

定義

表示通道對要求與回應訊息的傳輸是否使用資料流或緩衝模式。

public enum class TransferMode
public enum TransferMode
type TransferMode = 
Public Enum TransferMode
繼承
TransferMode

欄位

Buffered 0

要求訊息和回應訊息皆以緩衝處理。

Streamed 1

要求訊息和回應訊息皆以資料流處理。

StreamedRequest 2

資料流處理要求訊息,緩衝處理回應訊息。

StreamedResponse 3

緩衝處理要求訊息,資料流處理回應訊息。

範例

下列範例會透過程式碼將 TcpTransportBindingElement.TransferMode 屬性設定為 Streamed

TcpTransportBindingElement transport = new TcpTransportBindingElement();  
transport.TransferMode = TransferMode.Streamed;  
BinaryMessageEncodingBindingElement encoder = new BinaryMessageEncodingBindingElement();  
CustomBinding binding = new CustomBinding(encoder, transport);  

下列範例會透過組態將 TcpTransportBindingElement.TransferMode 屬性設定為 Streamed

<customBinding>  
    <binding name="streamingBinding">  
        <binaryMessageEncoding />  
            <tcpTransport transferMode="Streamed" />  
     </binding>  
</customBinding>  

備註

Windows Communication Foundation (WCF) 傳輸支援雙向傳輸訊息的兩種模式:

  • 緩衝處理的傳輸會將整個訊息保留在記憶體緩衝區中,直到完成傳輸作業為止。

  • 資料流處理的傳輸只緩衝訊息標頭,而公開訊息本文為資料流,每次讀取較小部分的資料。

將傳輸模式設為 Streamed 可啟用雙向資料流通訊。 將傳輸模式設為 StreamedRequestStreamedResponse 只能啟用指定方向的資料流通訊。

資料流處理的傳輸可以藉由消除大量記憶體緩衝區的需求來改善服務的延展性 (Scalability)。 變更傳輸模式是否真能改善延展性,實際需視所傳輸的訊息大小而定。 當大型訊息使用資料流而非緩衝傳輸時,延展性的改善應當最為顯著。

根據預設,HTTP、TCP/IP 和具名管道等傳輸都使用緩衝處理訊息傳輸方式。 您可以使用公開的 BasicHttpBinding 傳輸模式屬性,在 、 NetTcpBindingNetNamedPipeBinding 系統提供的系結上設定 的值 TransferMode 。 例如, NetTcpBinding.TransferMode 您可以使用 屬性, NetTcpBinding 在 類別上設定模式。 它也可在繫結的組態區段中設定。

對於不公開傳輸模式屬性的繫結,傳輸模式可在傳輸的繫結項目上設定,然後此項目可新增至自訂繫結。 例如,建立 HttpTransportBindingElement 並在建立自訂繫時,使用 TransferMode 屬性設定傳輸模式。 傳輸模式也可在自訂繫結的組態區段中設定。

使用緩衝或資料流傳輸的決定是在 HTTP 傳輸端點本機上決定的。 對於 HTTP 傳輸,傳輸模式不會透過連線傳播,或是傳播到 Proxy 伺服器或其他媒介。 設定傳輸模式不會反映在服務合約的描述中。 為服務產生 Proxy 之後,您可以 (允許但並非必要) 為要搭配資料流傳輸使用的服務編輯組態檔,以設定傳輸模式。 如果是 TCP 和具名管道傳輸,會傳播傳輸模式做為原則判斷提示。

Streamed使用傳輸模式會導致 WCF 執行時間強制執行一些限制。

  • 在資料流處理的傳輸中發生的作業,會與最多一個輸入和/或一個輸出參數 (在程式設計模型層) 簽訂合約。 該參數對應於整個訊息本文而且必定是 MessageStream 的子類型或是 IXmlSerializable 介面的實作。 擁有作業的傳回值,相當於擁有輸出參數。

  • 某些 WCF 功能,例如可靠的傳訊和 SOAP 訊息層級安全性依賴緩衝訊息來進行傳輸。 使用這些功能可能減少或消除使用資料流處理模式而獲得的效能優勢。 若要保護資料流處理傳輸的安全,請單純使用傳輸層級安全性,或是使用混合模式安全性,也就是 WS-Security 與傳輸安全性的結合。

  • SOAP 標頭一律經過緩衝處理,就算將傳輸模式設為 也是一樣。 訊息的標頭不得超出 MaxBufferSize 傳輸配額的大小。此配額於各種繫結與繫結項目上公開。

將傳輸模式由 Buffered 變更為 Streamed,會同時變更 TCP 與具名管道傳輸的原生通道類型。 對於緩衝處理的傳輸來說,原生的通道類型為 IDuplexSessionChannel。 對於資料流處理的傳輸來說,原生通道為 IRequestChannelIReplyChannel。 結果就是工作階段服務合約無法搭配傳輸資料流使用。

適用於