我試圖更好地理解當我使用WCF代理時發生了什麼。我無法理解關閉(或不關閉)代理時發生的情況。當我關閉/中止WCF頻道/代理時會發生什麼?
- 當我在WCF代理上調用Close()或Abort()時發生了什麼?有什麼不同?
- 它在不同的綁定類型之間有什麼區別(比如,一個無會話的BasicHttpBinding和某些會話)?
- 爲什麼Close()會在某些情況下拋出,爲什麼它可能是阻塞操作?
我試圖更好地理解當我使用WCF代理時發生了什麼。我無法理解關閉(或不關閉)代理時發生的情況。當我關閉/中止WCF頻道/代理時會發生什麼?
關閉WCF客戶端
一個客戶的正常關閉連接繼承的責任。總是建議關閉代理客戶端。如果客戶端和服務之間的綁定是傳輸層會話,那麼關閉代理對於拆除雙方之間的連接至關重要。服務具有爲併發連接定義的有效負載閾值。如果併發連接的數量線性地高於此閾值,則整體服務性能以指數規律地減少。這就是爲什麼儘快處理連接至關重要。關閉代理服務器還會通知服務實例它不再被使用,並可能被GC收集(服務實例管理服務)。如果客戶端沒有關閉連接,它仍然會被WCF超時(在配置文件中找到)自動關閉。
中止WCF客戶端
在存在在服務客戶端交互的故障的情況下,兩端的對象都是潛在的完全破碎。因此在不建議異常之後使用代理。鑑於WCF綁定使用傳輸會話,故障後的客戶端甚至無法關閉它(如果沒有傳輸層會話,則客戶端可以使用或關閉代理,但不建議這樣做,因爲會話配置可能會更改)。所以在發生故障之後,唯一安全的操作是中止代理。
Close是一個同步操作,它可以在傳輸會話已被故障損壞時拋出,並且在接收到來自服務的確認響應之前它是阻塞操作(某些綁定爲true)。
很多被寫了關於這個問題,開始看: http://stackoverflow.com/questions/2440608/wcf-service-client-lifetime – 2011-08-31 14:53:15