ChannelFactory具有State屬性意味着什麼?我瞭解創建的頻道可以具有基於連接的狀態。但是我們對ChannelFactory爲什麼也有這種連接狀態感到困惑。它是否也連接到WCF服務?WCF ChannelFactory State Property
回答
我認爲這很有趣,我不知道答案,但我猜測ChannelFactory可能會保持資源可用,以防其他通道實例使用同一資源(同時或不久的將來) 。
例如,如果您使用具有使用TcpChannel作爲傳輸通道的通道堆棧的通道工廠,則TCP連接可能由ChannelFactory管理,因爲多個通道可能會重新使用相同的TCP連接,這樣可以節省關於拆除/重新啓動連接的性能開銷。
因此,當您關閉頻道時,頻道會通知頻道工廠不再需要資源,頻道工廠隨後可以釋放資源並在其適合時(即超時?)釋放資源。
如果沒有其他人提供良好的答案,我可以檢查這是否是這種情況。
A ChannelFactory
對象具有State
,因爲它是CommunicationObject
,WCF中的所有CommunicationObjects
都有State
。當然,這只是乞討的問題,並沒有真正的幫助。
真正的問題歸結爲兩個部分
- 爲什麼沒有
ChannelFactory
從CommunicationObject
- 得到什麼沒有了
State
實際上意味着什麼?
第二個更容易回答,所以我們從那裏開始。 ChannelFactory的State
決定它是否可用於創建新的客戶端通道,和,不管這些客戶端通道是否仍可使用。
與WCF中的所有CommunicationObjects
一樣,State
也決定了您可以對該對象執行的操作。渠道工廠確實只有一個操作:CreateChannel
。如果工廠爲Open
,則可以創建通道;如果是Closed
或Faulted
,則不能。具體(內部)渠道工廠實施(如HttpChannelFactory
)在清理任何內部資源時都是Close()
'd;這包括釋放出於安全目的創建的資源,釋放手柄命名管道等
此外,當你Close()
通道工廠,它遍歷所有通道,並呼籲他們每個人Close()
,前過渡進入Closed
狀態本身。 (似乎有一些常見的實用程序代碼(創建HTTP請求等),渠道工廠代表其渠道執行代碼,以便渠道工廠關閉後渠道不再可用。這就是爲什麼渠道同時強迫關閉。)
對於所有的血淋淋的細節,去下載WCF Reference Source,但要準備好失去一天左右:)
更大的問題,那麼,這就是爲什麼一個ChannelFactory
是CommunicationObject
呢?在這裏,我正在進行猜測,因爲據我所見,工廠對象自己從來沒有實際上溝通到遠程系統。但是,他們在創建通道之前會執行很多綁定參數的設置和驗證,這需要分配與實際網絡連接相同類型的資源。例如,命名管道渠道工廠爲其渠道創建和管理連接池; HTTP和HTTPS通道工廠驗證身份信息和身份驗證值。我的猜測是渠道工廠做了一次設置工作,所以渠道可以跳過它; CommunicationObject
模式簡單地提供了一種便捷的方式來管理頻道工廠的生命週期,因爲WCF中的其他一切都是以這種方式進行管理的。
我懷疑所有渠道都通過渠道工廠。可以將其視爲一種輕量級模式端點和綁定配置,以及連接狀態。從技術上講,'ChannelFactory'將是負責連接的對象。渠道只是公開合同。 – Gusdor 2015-11-28 09:21:13
- 1. WCF ChannelFactory IDuplexSessionChannel
- 2. WCF的ChannelFactory和OperationBehavior
- 3. 手動WCF和ChannelFactory
- 4. WCF的ChannelFactory緩存
- 5. WCF-NetNamedPipe的的ChannelFactory
- 6. WCF ChannelFactory異步調用
- 7. WCF ChannelFactory vs生成代理
- 8. WCF Channel和ChannelFactory緩存
- 9. C#WCF ChannelFactory BadRequest 400錯誤
- 10. WCF/WPF最佳實踐 - WCF ChannelFactory和PRISM
- 11. WCF:不關閉ChannelFactory與不斷重新創建ChannelFactory並關閉ChannelFactory的比較
- 12. 與ChannelFactory和CreateChannel的異步WCF調用
- 13. App.config之外的WCF ChannelFactory配置?
- 14. 內存泄漏 - Ninject,WCF,WEBApi,ChannelFactory
- 15. 如何將證書添加到WCF ChannelFactory?
- 16. 由ChannelFactory引發的WCF異常
- 17. WCF ChannelFactory和連接超時的最佳做法
- 18. WCF ChannelFactory不能準確報告故障狀態?
- 19. java.lang.NoClassDefFoundError:org/jboss/netty/channel/ChannelFactory
- 20. WCF - 是否有可能偵聽與HttpListener或套接字的WCF ChannelFactory
- 21. 如何在使用spring.net wcf創建服務時調用WCF service.Abort():channelfactory
- 22. ChannelFactory <T> without interface
- 23. 如何自ChannelFactory
- 24. 如何使用Silverlight實現ChannelFactory和WCF程序集共享?
- 25. 由ChannelFactory生成的WCF對象生命週期
- 26. 使用ChannelFactory調用wcf服務的好處是什麼
- 27. 如何從ChannelFactory(WCF)更改頻道的地址
- 28. 通過channelfactory調用WCF webservice時出錯 - 未經許可
- 29. 使用ChannelFactory調用不帶服務引用的異步WCF
- 30. 具有自定義端點行爲的WCF ChannelFactory(Json-Rpc)
我認爲這是一個很好的問題,我也很好奇。驚訝的沒人有刺。 – Xiaofu 2010-03-20 12:56:42