2009-04-13 21 views
1

我正在開發一個主從命令模型,通過它,某些應用程序「主」將命令發送到稱爲「從屬」的同質過程以執行某個任務,然後以狀態完成或過程失敗。他們也應該根據請求向主人公開一些數據。使用WCF作爲主從命令模型

此模型在WCF中的外觀如何?

會主和奴隸的每個實例主機他們自己的服務?只有Master主機?只有奴隸?我應該使用回撥合約嗎?數據合同?或只是服務合同。

作爲一個側面說明,這是一個低帶寬,低強度,用於產品測試的內部分銷項目,不應被視爲「大型高需求」項目。

回答

2

你肯定會得到某種形式或形式的服務合同。這只是定義你的服務和它的操作(方法)(OperationContract)。

如果是內部的「防火牆後」系統,您可以查看雙工綁定,例如,主設備調用從設備,並在從設備完成時,從設備在雙工通道上報告。開箱即用,只有WsDualHttpBinding支持雙工,但由於您是內部的,所以在防火牆後面,您可能需要考慮創建自己的基於TCP的雙工綁定(它並不像聽起來那麼難第一!)。

在這種情況下,兩個涉及的應用程序真的是服務器和客戶端在同一時間。

您將以某種方式,形狀或形式定義DataContracts,以定義在Master和Slave之間移動的DATA - 同樣,您必須擁有Data Contracts。

編輯: 當然,另一種方法可能是使用兩個MSMQ消息隊列;主人將他的「工作」請求放入一個隊列中,從屬隊員偵聽並接收作業請求。當Slave完成時,它會將響應放入主節點作爲偵聽器的響應隊列中,並以此方式通知正在完成的工作。

馬克

0

如果從屬過程需要很長時間,那麼回調契約可能是有序的。否則,您可能會阻止主服務器等待從服務器完成(您可能需要調整WCF客戶端配置以使其不會超時)。

根據您的描述,我認爲您只需要在從屬節點上託管WCF服務,而主服務器可以是一個使用從屬服務器暴露的WCF服務的客戶端。

+0

可以多個進程主機上的相同的URI的服務,這是如何工作的,只要終點去,程序化的端點,而不是app.config中?從它的聲音中我肯定會需要回調合約。 – Firoso 2009-04-13 21:54:18

1

我與傑里米在這裏..你描述並不需要回調合同的複雜性是什麼達成一致。工作者節點可以簡單地公開WCF服務(或者甚至是WSDL或REST Web服務),然後控制器只需要知道每個子節點的URL並將消息發送給工作節點。

如果你想控制器能夠廣播一條消息,並讓所有的工作人員(我真的不喜歡主/從模擬......我很久以前就轉向調用它控制器/工作人員)節點做一些事情響應並將其進度發回到組,那麼您可能想要使用WCF中可用的經常被低估的P2P通道。這允許用WCF編寫的一組服務一次性與對方進行對話,使用的URL幾乎就像話題/會話分隔符一樣。

因此,例如,您可能會在net.p2p:// labs/commands通道上發出命令。只有控制器在該通道上發送命令,但所有工作節點都在偵聽。當他們完成異步操作時,他們可以在net.p2p:// labs/status頻道上報告進度。這種方法的另一個好處是(如果你需要這個功能的話),單個工作人員將能夠知道所有其他工作人員在做什麼。

請記住,但是如果您使用P2P,那麼您將不得不處理爭用問題 - 最終可能會有2個節點接受相同的命令。如果這很好,那麼P2P就是你的工具。如果您需要發佈命令,並且只有在各個節點變得可用時纔會連續採集(當告訴遠程節點運行單個測試腳本等時,更可能發生這種情況),那麼您可以使用MSMQ綁定而不是P2P。然後,所有工人都成爲從隊列中接收消息的客戶,並且您可以更輕鬆地抵消接受相同請求的多名工人的情況。

有關其他參考: A blog post I wrote a while back on the Peer Channel

Peer Channel Scenarios on MSDN - 這很好,因爲您可以從這裏轉到Peer Channel概念以參考指南。

Peer Channel Team Blog

+0

你可以修改p2p協議的更多信息,也可以發佈一個鏈接或2選擇文章,只是爲了其他人在未來看到這個?我感謝你的迴應。 – Firoso 2009-04-14 14:11:48