1.WCF中可靠性會話在繫結層保證訊息只會被傳輸一次,並且保證訊息之間的順序。當使用TCP(Transmission Control Protocol,傳輸控制協議)通訊時,協議本身保證了可靠性。
然而,它只在兩點之間的網路包這個層面提供了這樣的保證。WCF的可靠性會話特性保證了在傳輸過程中訊息不會丟失、重複或錯位。這種保證是訊息層面的,而且適用於任何數目
節點的通訊。另外,使用可靠性會話時,WCF會重連掉線的連線,在重連失敗時還會釋放會話佔用的相關資源。可靠性會話還會通過調整訊息的傳送頻率來緩解網路擁擠。

可靠性會話主要解決以下幾個問題:
確保訊息可靠交付(訊息不會丟失、重複或錯位)
確保訊息單一性(訊息只會被傳送一次)
確保訊息有序性(確定訊息之間的傳輸順序)

系統有多個繫結支援可靠性會話功能:wsHttpBinding、wsDualHttpBinding、wsFederationBinding、netTcpBinding、netNamedPipesBinding。
其中wsHttpBinding、wsFederationBinding、netTcpBinding在預設情況下可靠性會話功能是關閉。而wsDualHttpBinding、netNamedPipesBinding則預設支援可靠性功能。

2.reliableSession 屬性
1.enable

返回值為bool型別,代表是否開啟可靠性功能。

2.inactivityTimeout

返回值為TimeSpan型別,代表閒置超時時間,預設值為10分鐘,如果客戶端已經建立起服務物件,在超過此時間內沒有重新呼叫這些物件,系統將傳送提示資訊: “通訊物件 System.ServiceModel.Channels.ServiceChannel 無法用於通訊,因為其處於‘出錯’狀態。”。

3.ordered

返回值為bool型別,代表是否開啟“有序性”性功能,如果開啟此功能,代表訊息將按順序傳送。

4.maxPendingChannels

返回值為int 型別,代表最大等候通道,預設值為4。

5.maxRetryCount

返回值為int 型別,表示最大重複傳送次數,預設值為8,最大值為20。如果因斷線等原因連線失敗,客戶端重試次數超過此最大值,系統將發出錯誤提示。

6.flowControlEnabled

返回值為bool型別,預設值為true,代表是否啟動流量控制器。啟動後,當接收方的傳輸資料緩衝區已滿時,傳送方將延遲傳送資訊。

7.acknowledgementInterval

返回值為TimeSpan型別,預設值為00:00:00.2(即0.2秒),代表接收方在接收資訊之前所需要的等待時間。

8.maxTransferWindowSize

返回值為int型別,預設值為8,用於控制資料緩衝區數量。

<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors> <bindings>
<netTcpBinding>
<binding name="defaultNetTcpBinding">
<!--開啟可靠性會話功能,把過期時間配置為10秒-->
<reliableSession enabled="true" inactivityTimeout="00:00:10"/>
</binding>
</netTcpBinding>
</bindings> <services>
<service name="Pro.Service.PersonService">
<!--繫結defaultNetTcpBinding-->
<endpoint address="" bindingConfiguration="defaultNetTcpBinding" binding="netTcpBinding" contract="Pro.Service.IPersonService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.Tcp://localhost:6000/Pro.Service/PersonService/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>

WCF為我們提供了可靠訊息傳遞的有效機制,這個特性也是基於已有網路傳輸協議,WCF再次基礎 上多資料通訊模型進行了擴充套件。這種特性確實對增強我們程式的資料傳遞的準確性有很大的幫助,但是是否使用可靠訊息傳遞要基於實際的專案需要,不能強制使 用。我們獲得安全可靠性的同時,實際底層付出的是效率的程式碼。