使用 NetHttpBinding
NetHttpBinding 是為了使用 HTTP 或 WebSocket 服務而設計的繫結,其預設會使用二進位編碼。 NetHttpBinding 將會偵測其所搭配使用的是要求-回覆合約還是雙工合約,並改變行為來配合,也就是針對要求-回覆合約使用 HTTP,並針對雙工合約使用 WebSockets。 使用 WebSocketTransportUsage 設定即可覆寫這個行為:
Always - 這會強制使用 WebSockets,甚至用於要求-回覆合約。
Never - 這會避免使用 WebSockets。 嘗試將這個設定用於雙工合約會導致例外狀況。
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);
}