2010-01-06 51 views
10

ChannelFactory具有State屬性意味着什麼?我瞭解創建的頻道可以具有基於連接的狀態。但是我們對ChannelFactory爲什麼也有這種連接狀態感到困惑。它是否也連接到WCF服務?WCF ChannelFactory State Property

+0

我認爲這是一個很好的問題,我也很好奇。驚訝的沒人有刺。 – Xiaofu 2010-03-20 12:56:42

回答

0

我認爲這很有趣,我不知道答案,但我猜測ChannelFactory可能會保持資源可用,以防其他通道實例使用同一資源(同時或不久的將來) 。

例如,如果您使用具有使用TcpChannel作爲傳輸通道的通道堆棧的通道工廠,則TCP連接可能由ChannelFactory管理,因爲多個通道可能會重新使用相同的TCP連接,這樣可以節省關於拆除/重新啓動連接的性能開銷。

因此,當您關閉頻道時,頻道會通知頻道工廠不再需要資源,頻道工廠隨後可以釋放資源並在其適合時(即超時?)釋放資源。

如果沒有其他人提供良好的答案,我可以檢查這是否是這種情況。

9

A ChannelFactory對象具有State,因爲它是CommunicationObject,WCF中的所有CommunicationObjects都有State。當然,這只是乞討的問題,並沒有真正的幫助。

真正的問題歸結爲兩個部分

  1. 爲什麼沒有ChannelFactoryCommunicationObject
  2. 得到什麼沒有了State實際上意味着什麼?

第二個更容易回答,所以我們從那裏開始。 ChannelFactory的State決定它是否可用於創建新的客戶端通道,,不管這些客戶端通道是否仍可使用。

與WCF中的所有CommunicationObjects一樣,State也決定了您可以對該對象執行的操作。渠道工廠確實只有一個操作:CreateChannel。如果工廠爲Open,則可以創建通道;如果是ClosedFaulted,則不能。具體(內部)渠道工廠實施(如HttpChannelFactory)在清理任何內部資源時都是Close()'d;這包括釋放出於安全目的創建的資源,釋放手柄命名管道等

此外,當你Close()通道工廠,它遍歷所有通道,並呼籲他們每個人Close(),前過渡進入Closed狀態本身。 (似乎有一些常見的實用程序代碼(創建HTTP請求等),渠道工廠代表其渠道執行代碼,以便渠道工廠關閉後渠道不再可用。這就是爲什麼渠道同時強迫關閉。)

對於所有的血淋淋的細節,去下載WCF Reference Source,但要準備好失去一天左右:)

更大的問題,那麼,這就是爲什麼一個ChannelFactoryCommunicationObject呢?在這裏,我正在進行猜測,因爲據我所見,工廠對象自己從來沒有實際上溝通到遠程系統。但是,他們在創建通道之前會執行很多綁定參數的設置和驗證,這需要分配與實際網絡連接相同類型的資源。例如,命名管道渠道工廠爲其渠道創建和管理連接池; HTTP和HTTPS通道工廠驗證身份信息和身份驗證值。我的猜測是渠道工廠做了一次設置工作,所以渠道可以跳過它; CommunicationObject模式簡單地提供了一種便捷的方式來管理頻道工廠的生命週期,因爲WCF中的其他一切都是以這種方式進行管理的。

+0

我懷疑所有渠道都通過渠道工廠。可以將其視爲一種輕量級模式端點和綁定配置,以及連接狀態。從技術上講,'ChannelFactory'將是負責連接的對象。渠道只是公開合同。 – Gusdor 2015-11-28 09:21:13

相關問題