2011-08-04 16 views
0

我有多個WCF服務的自我在一個窗口服務託管。其中一個WCF服務需要調用另一個託管在同一個Windows服務中的WCF服務。這可能需要在同一臺計算機上運行,​​或者在另一臺計算機上安裝相同的Windows服務器上運行。我是否需要應用程序添加對自身的引用,或者是否有更簡單的方法來調用它自己的服務之一。我知道如何通過更改端點地址來完成不同的機器位,但是我不太清楚我是否應該添加對自身的引用。即我是否需要使用我將從單獨的客戶端使用的相同代碼。.NET服務主機調用自身的服務

回答

2

此處的概念稱爲「位置透明度」。也就是說,在調用(WCF)服務時,在同一進程或另一臺計算機上的生命沒有(技術)差異。

通常,這被認爲是一件好事,因爲你可以在部署過程中更改後/你的服務的位置,根據您的需要(個人服務穩定性或資源消耗)。

您可以通過配置命名管道綁定來優化您在同一臺計算機上運行的事實 - 實際上是否會產生顯着差異取決於您的服務操作運行多久,執行其實際任務(請參閱here有關選擇合適綁定的更多/良好信息)。

最後,如果真的事項,你可以創建你的own binding,可能採取的事實,即這兩項服務生活在同一個進程 - 最有可能不是一個簡單的任務。

在任何情況下,但是,你要確保實際的服務實現對運輸不依賴或結合使用,所以撐起位置透明性。

+0

謝謝。最初,爲自己添加引用的概念看起來很奇怪,但認爲這很有意義。 – Jonnster

0

如果您要訪問一個WCF服務,不管它是否在過程託管與否,生成代理,因爲這是一個好主意,訪問它的一個簡單的方法。

雖然沒有必要,但您可以使用ChannelFactory自行創建Channel服務。但是,如果可以,爲什麼不爲它生成代理?

0

您可以直接創建新的關鍵字服務(針對具體實現服務的 - 而不是接口,當然)的一個新實例。我一直這樣做,它工作正常。 此外,項目不能添加對自身的引用,否則會導致空間時間連續性的撕裂;)

+0

這當然會避開所有WCF的基礎設施進行交易,安全性等方面的如果是這樣作的OP的情況我不知道可以接受的,但總的來說我認爲這是一個「壞主意」。 –

+0

考慮到提出問題的背景,我沒有假設OP正在開發高層次的應用程序(沒有違法OP),因此提出了一些有助於他的事情,而不是將他搞糊塗。 此外,調用在同一過程中的事實表明安全性不是問題。 只要記住,「所有的母親」的解決方案存在每一個問題......他們只是不總是適用:) –