2011-05-31 26 views
8

我有一個以已知URI託管的託管發現服務。我有一個可發現的服務,當它啓動時,它會使用添加到服務的ServiceDiscoveryBehavior中的AnnouncementEndpoint來宣佈自己。當使用WCF ServiceDiscoveryBehavior公告端點時,會定期「重新宣佈」服務?

具體使用情況下,我想解決的是以下幾點:

  1. 託管發現服務啓動。
  2. 可發現服務啓動並向Managed Discovery服務宣告自己。
  3. 託管發現服務重新啓動(出於各種可能的原因)。

那麼可發現服務如何自我刷新(重新宣佈)到託管發現服務?

我知道託管發現服務可以堅持終端並在開始時恢復它們,但我希望一切都是動態的和自我修復的,這樣就沒有過時的終端信息的機會。

另一種使用情況是:

  1. 現有的發現服務正在運行。
  2. 新的託管發現服務已聯機。

我們如何強制或調用相同的公告服務合同呼叫到新的託管發現服務?

我希望這是關於我想要完成的足夠的信息。

回答

5

我自己找到了答案。在需要控制ServiceDiscoveryBehavior之外的公告的情況下,您可以使用AnnouncementClient類。

AnnouncementClient client = new AnnouncementClient(announcementEndpoint); 
var endpointDiscoveryMetadata = EndpointDiscoveryMetadata.FromServiceEndpoint(netTcpEndpoint); 

client.AnnounceOnline(endpointDiscoveryMetadata); 
+0

這是如何工作的?我有以下幾點:所有可發現的服務在啓動時都會向發現服務宣佈自己。但是,當我必須重新啓動發現服務本身,而不重新啓動discoberable服務時,發現服務不再知道仍在運行的可發現服務。所以,我有想法緩存所有'EndpointDiscoveryMetadata'對象,並且在重新啓動時,我想檢查存儲的'EndpointDiscoveryMetadata'背後的服務是否仍然存在。你有一個想法如何做到這一點? – esskar 2011-12-20 12:10:21

+1

@ esskar - 我所做的是實現一個週期性任務(線程),在可配置的時間間隔內「重新宣佈」。然後在發現服務實現上,它將添加或更新其內部緩存。如果你還沒有這樣做,我建議,從S​​ystem.ServiceModel.Discovery.DiscoveryProxy派生你自己的發現服務,並實現你自己的端點緩存。 請參閱http://msdn.microsoft.com/en-us/library/dd456787.aspx 另外,我實現了一項租約,每個服務都提供了元數據擴展。如果租約到期,發現服務將刪除該端點。 – Jim 2011-12-21 18:31:00

+1

...續... 如果宣佈服務通過重新宣佈自己來「更新」租約,則發現服務會將其保留在內存中。 另外,您可以使用對等網格運行多個發現服務並相互協作。網格中的每個節點共享端點。如果一個發現服務關閉,這允許您的服務具有冗餘。 – Jim 2011-12-21 18:33:55

相關問題