這篇文章有點連接到我以前的帖子在這裏 - How to create custom WCF binding which effectively reverses the communication?有沒有可能有一個WCF服務主機沒有綁定到任何特定的服務類型?
總之,我試圖建立一個反向輪詢http綁定主機輪詢其客戶端的請求。我使用http://archive.msdn.microsoft.com/duplexhttp的代碼作爲我的參考。現在,在這個綁定中,主機實際上是一個客戶端,客戶端實際上是服務器。這意味着,使用此反向輪詢http綁定的客戶端必須以提供通道泵設施的隱藏服務主機結束。
現在,使用ServiceHost類型的通常模式要求存在實際的WCF服務實現。在我的情況下,ServiceHost在客戶端是開放的 - 它沒有服務實現,並且是正確的。
我想知道什麼是解決這個問題的最好方法?
理想情況下,此服務主機不需要任何服務。輪詢主機發送未映射到任何服務合約的消息實例。這些消息由專用通道請求和回覆 - 分別爲HttpPollingRequestChannel和HttpPollingReplyChannel。但是我需要它實施的通道泵設備的服務主機。
任何幫助表示讚賞。
EDIT1
我想更多的背景信息是必要的,以澄清該圖片。我們的系統由客戶端,服務器和代理組成。客戶與服務器交談,後者將他們的請求傳達給代理,代理將結果傳回服務器。所有的頻道都是直接的HTTP - 簡單明瞭。
但是,需要能夠在防火牆後面部署代理,而無需打開入站端口。這意味着,服務器 - >代理通信不再可能。正如我所看到的,我有兩種選擇:
- 重新設計服務器 - >代理協議以使其使用輪詢。
- 實現低級綁定,它將在內部使用輪詢。
你會做出什麼樣的選擇?儘管第二選擇很難實現,但這是一次性努力。但它有很多好處。可能嗎?我認爲是的,因爲輪詢雙向http綁定已經存在於Silverlight和.NET中 - 請參閱本文開頭的鏈接。
EDIT2
我願再次強調,這我不想雙工。在雙工通信中,回調是在請求的上下文中執行的,這意味着代理髮送請求,服務器執行回叫。我的情況不同。代理髮送任何東西服務器決定與代理進行溝通。代理沒有主動請求。所以,現有的雙工綁定對我來說並不好,但我正試圖從中學習如何實現輪詢。
總體情況是這樣的:
- 代理不斷地輪詢服務器
- 如果服務器想將消息發送到代理,爲下一個輪詢請求和遊樂設施的代理頂部有消息等待的輪詢請求答覆。
輪詢請求不是任何接口的一部分,它們在低級綁定基礎結構中實現。
如果代理在防火牆後面,它必須是啓動連接的人員=它必須是託管在服務器上的服務的客戶端。 – 2011-03-07 15:07:36
我想保持儘可能低的投票隱藏。當它在綁定中時。如果沒有防火牆問題,它可以讓我快速重新配置代理以使用常規綁定。 – mark 2011-03-07 15:40:10
仍然不明白。誰在開始溝通,你的要求/限制是什麼。 – 2011-03-07 17:42:39