增加 Windows Communication Foundation (WCF) 應用程式容量的其中一方式,是將它們部署至負載平衡的伺服器集群以擴展規模。 WCF 應用程式可以使用標準負載平衡技術進行負載平衡,包括軟體負載平衡器,例如 Windows 網路負載平衡,以及硬體型負載平衡設備。
下列各節將討論使用各種系統提供的系結所建置之 WCF 應用程式的負載平衡考慮。
使用基本 HTTP 系結進行負載平衡
從負載平衡的觀點來看,使用 BasicHttpBinding 通訊的 WCF 應用程式與其他常見的 HTTP 網路流量類型不同(靜態 HTML 內容、ASP.NET 頁面或 ASMX Web 服務)。 使用此系結的 WCF 通道本質上是無狀態,並在通道關閉時終止其連線。 因此,BasicHttpBinding 與現有的 HTTP 負載平衡技術搭配良好。
根據預設,會在 BasicHttpBinding 訊息中傳送具有 Keep-Alive 值的連線 HTTP 標頭,讓客戶端能夠建立對支援它們之服務的持續性連線。 此設定提供增強的輸送量,因為先前建立的連線可以重複使用,以將後續訊息傳送至相同的伺服器。 不過,連線重複使用可能會導致客戶端與負載平衡伺服器陣列內的特定伺服器產生強烈關聯,進而降低循環分配負載平衡的效能。 如果不希望有此行為,可以在伺服器上使用Keep-Alive屬性,並且搭配KeepAliveEnabled或使用者定義的CustomBinding來停用 HTTPBinding。 下列範例示範如何使用組態來執行這項作。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service
name="Microsoft.ServiceModel.Samples.CalculatorService"
behaviorConfiguration="CalculatorServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/servicemodelsamples/service"/>
</baseAddresses>
</host>
<!-- configure http endpoint, use base address provided by host
And the customBinding -->
<endpoint address=""
binding="customBinding"
bindingConfiguration="HttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</service>
</services>
<bindings>
<customBinding>
<!-- Configure a CustomBinding that disables keepAliveEnabled-->
<binding name="HttpBinding" keepAliveEnabled="False"/>
</customBinding>
</bindings>
</system.serviceModel>
</configuration>
使用 .NET Framework 4 中引進的簡化組態,可以使用下列簡化的設定來完成相同的行為。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<protocolMapping>
<add scheme="http" binding="customBinding" />
</protocolMapping>
<bindings>
<customBinding>
<!-- Configure a CustomBinding that disables keepAliveEnabled-->
<binding keepAliveEnabled="False"/>
</customBinding>
</bindings>
</system.serviceModel>
</configuration>
如需預設端點、系結和行為的詳細資訊,請參閱 WCF 服務的 簡化組態 和 簡化組態。
使用 WSHttp 系結和 WSDualHttp 系結進行負載平衡
WSHttpBinding和 WSDualHttpBinding 都可以使用 HTTP 負載平衡技術進行負載平衡,前提是對預設系結組態進行了數項修改。
關閉安全上下文建立或使用具狀態的安全性會話。 要關閉安全性內容建立,只需將 EstablishSecurityContext 上的屬性WSHttpBinding設為
false。 如果您使用 WSDualHttpBinding 或需要安全性會話,則可以使用具狀態安全性會話,如 安全會話中所述。 具狀態安全性會話可讓服務保持無狀態,因為安全性會話的所有狀態都會隨著每個要求一起傳輸,作為保護安全性令牌的一部分。 若要啟用狀態安全會話,您必須使用指定的 CustomBinding 或使用者定義的 Binding,因為系統提供的 WSHttpBinding 和 WSDualHttpBinding 不會公開必要的設定。如果您關閉安全性上下文建構,您也需要關閉服務認證協商。 若要關閉它,請將 NegotiateServiceCredential 上的 WSHttpBinding 屬性設定為
false。 若要停用服務認證交涉,您可能需要在用戶端上明確指定端點身分識別。請勿使用可靠的會話。 這項功能預設為關閉。
負載平衡 Net.TCP 系結
NetTcpBinding可以使用IP層負載平衡技術進行負載平衡。 不過,預設情況下,NetTcpBinding 會集區管理 TCP 連線,以減少連接延遲。 這是干擾負載平衡基本機制的優化。 優化 NetTcpBinding 的主要設定值是連線池設定中的租約超時。 連線集區會導致客戶端連線被關聯到伺服器陣列中的特定伺服器。 隨著這些連線的存留期增加(租用逾時設定所控制的因素),伺服器陣列中各種伺服器的負載分佈變得不平衡。 因此,平均呼叫時間會增加。 因此,在負載平衡的情境中使用NetTcpBinding時,請考慮減少繫結所使用的預設租用逾時時間。 30 秒的租用逾時是負載平衡案例的合理起點,雖然最佳值與應用程式相依。 如需通道租用逾時和其他傳輸配額的詳細資訊,請參閱 傳輸配額。
若要在負載平衡案例中獲得最佳效能,請考慮使用 NetTcpSecurity (或 TransportTransportWithMessageCredential)。