2010-09-23 17 views
3

我已經實現了一個使用netTcpBinding和WsHttpBinding和Transport Security(https)作爲WCF通信綁定類型的場景。然後我比較了性能結果。有趣的是,netTcpBinding比wsHttpBinding慢。我已經閱讀了大量關於綁定性能的文檔,並且我知道netTcpBinding提供了最快速的通信,因爲它採用了二進制編碼。netTcpBinding如何比wsHttpBinding慢?

你能解釋一下在我的測試中可能會導致這種情況嗎?謝謝。

測試環境:IIS 7

public static WSHttpBinding GetWSHttpForSSLBinding() 
{ 
    WSHttpBinding binding = new WSHttpBinding(); 
    binding.TransactionFlow = true; 
    binding.MaxReceivedMessageSize = 2147483647; 
    binding.MessageEncoding = WSMessageEncoding.Text; 
    binding.Security.Mode = SecurityMode.Transport; 
    binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; 
    binding.ReaderQuotas.MaxStringContentLength = 2147483647; 
    binding.OpenTimeout = TimeSpan.MaxValue; 
    binding.CloseTimeout = TimeSpan.MaxValue; 
    binding.SendTimeout = TimeSpan.MaxValue; 
    binding.ReceiveTimeout = TimeSpan.MaxValue; 
    return binding; 
} 

public static NetTcpBinding GetTcpBinding() 
{ 
    NetTcpBinding binding = new NetTcpBinding(); 
    binding.TransactionFlow = true; 
    binding.MaxReceivedMessageSize = 2147483647; 
    binding.PortSharingEnabled = true; 
    binding.Security.Mode = SecurityMode.Transport; 
    binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows; 
    binding.Security.Transport.ProtectionLevel = ProtectionLevel.EncryptAndSign; 
    binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows; 
    binding.Security.Message.AlgorithmSuite = SecurityAlgorithmSuite.TripleDesSha256; 
    binding.ReaderQuotas.MaxStringContentLength = 2147483647; 
    binding.ReaderQuotas.MaxArrayLength = 2147483647; 
    binding.OpenTimeout = TimeSpan.MaxValue; 
    binding.CloseTimeout = TimeSpan.MaxValue; 
    binding.SendTimeout = TimeSpan.MaxValue; 
    binding.ReceiveTimeout = TimeSpan.MaxValue; 
    return binding; 
} 
+0

它在IIS上嗎?您需要提供一些關於您的基準和設置的信息。 – Aliostad 2010-09-23 09:19:23

+0

@ Aliostad:是的,它都在IIS 7上。 – mkus 2010-09-23 09:23:24

+0

你能把這兩個綁定放在這裏嗎? – Aliostad 2010-09-23 09:28:55

回答

3

你net.tcp綁定使用身份驗證,但WS HTTP綁定不。使用來自單個代理的多個操作調用並以更大的消息負載重複測試。由於頻道創建和連接建立,第一個呼叫總是很慢。

+0

感謝您的快速響應。當從我的Wcf服務返回對象變大時,netTcpBinding比WsHttpBinding有優勢。 – mkus 2010-09-23 11:36:00

2

你是在談論延遲或吞吐量。客戶端是否創建了一個連接,然後立即關閉它或跨越多個呼叫。

NetTcp在同一連接上進行了優化,因爲它使用BinaryEncoding和TextEncoding進行wshttp,所以有效負載的大小會更小。

如果您正在查看延遲 - NetTcp執行windows auth並導致AD查找vs wshttp,則您使用的是SSL身份驗證。

+0

感謝您的回覆。讓我回答你的問題。在這些測試中,客戶端創建一個連接,然後關閉它。有趣的是,在這些測試中,我發現當服務的返回類型在大小方面變得更大時,netTcpBinding有優勢,否則wsHttpBinding。 – mkus 2010-09-24 06:11:47

+0

SSL也允許連接池,但是NetTcp沒有,因爲即使您使用帶SSL的nettcp,每次都需要重新建立安全上下文,因爲NetTCP不使用http.sys的SSL池優化優化,所以通道不會合並。 – Sajay 2010-10-07 21:27:40