2012-01-30 52 views
4

我們有一些與WCF服務有關的問題,我正在做一些測試: 我剛剛創建了新的WCF客戶端和服務默認設置並監控它如何在TCP級別上工作。我使用.NET 4.0和的net.tcp結合WCF:Close()是否真的關閉連接?

而我所看到的:使用聲明後關閉WCF並沒有真正的服務器緊密結合... 在TCP層應發送[FIN]包服務器,但是它不做任何事情,只是在等待和在2分鐘內服務器終止連接與[RST]包。我附上了wireshark的一些截圖

我相信這是wcf的工作原理,但我無法找到一些信息來確認它。 另外我注意到比如果使用語句關閉之後,我使用的語句打開新的它使用相同的端口上的客戶端進行通信......(portsharing是假的客戶端)

我的問題:

  • 爲什麼WCF不使用關閉連接到服務器後使用語句是 關閉?
  • 我該怎麼做才能使它正確關閉連接(發送[FIN]語句)?

謝謝。 p.s.我沒有附加任何配置,因爲它是VS2010爲我創建的默認值。

wcf communication on tcp level

回答

1

猜在這裏,但NetTcpBinding的確實實現a connection cache。 WCF將「掛在」TCP連接,直到某些內部參數/邏輯決定它可以被釋放。這是Dispose方法可能會「按設計」拋出異常的原因之一。

{我的2¢:不管這個決定合理化自己,在現實世界中的WCF設計師如何,這是一個非常危險的事情已經做了。}

+0

看起來像減少的idleTimeout可以減少數量的重置包,並將maxOutboundConnectionsPerEndpopint設置爲0,始終關閉連接 – 2012-01-31 15:04:34