使用 NetHttpBinding

NetHttpBinding 是為了使用 HTTP 或 WebSocket 服務而設計的繫結,其預設會使用二進位編碼。 NetHttpBinding 將會偵測其所搭配使用的是要求-回覆合約還是雙工合約,並改變行為來配合,也就是針對要求-回覆合約使用 HTTP,並針對雙工合約使用 WebSockets。 使用 WebSocketTransportUsage 設定即可覆寫這個行為:

  1. Always - 這會強制使用 WebSockets,甚至用於要求-回覆合約。

  2. Never - 這會避免使用 WebSockets。 嘗試將這個設定用於雙工合約會導致例外狀況。

  3. WhenDuplex - 這是預設值,行為方式如上所述。

NetHttpBinding 在 HTTP 模式和 WebSocket 模式下都會支援可靠工作階段。 在 WebSocket 模式中,工作階段是由傳輸提供。

警告

當使用 NetHttpBinding 且繫結的 TransferMode 設為 TransferMode.Streamed 時,大量資料流可能會造成死結與呼叫逾時。 為了解決此問題,請傳送較小的訊息或使用 TransferMode.Buffered。

設定服務以使用 NetHttpBinding

可以將 NetHttpBinding 設定成和任何其他繫結程序一樣。 下列組態檔片段說明如何使用 NetHttpBinding 來設定 WCF 服務。

<system.serviceModel>  
    <services>  
      <service name="WcfService1.Service1">  
        <endpoint address=""  
                  binding="netHttpBinding"  
                  contract="WcfService1.IService1"/>  
        <endpoint address="mex"  
                  binding="mexHttpBinding"  
                  contract="IMetadataExchange"/>  
      </service>  
    </services>  
    <bindings>  
      <netHttpBinding>  
        <binding name="My_NetHttpBindingConfig">  
          <webSocketSettings transportUsage="WhenDuplex"/>  
        </binding>  
      </netHttpBinding>  
    </bindings>  
    ...
  </system.serviceModel>  

下列程式碼片段示範如何在程式碼中加入 NetHttpBinding

ServiceHost svchost = new ServiceHost(typeof(Service1), baseAddress);  
            NetHttpBinding binding = new NetHttpBinding();  
            svchost.AddServiceEndpoint(typeof(IService1), binding, address);
        }  

另請參閱