使用WCF ServiceDiscoveryBehavior公告端点时,定期“重新宣布”服务?

8

我有一个托管在已知URI上的托管发现服务。 我有一个可发现的服务,当它启动时,它使用添加到服务的ServiceDiscoveryBehavior的AnnouncementEndpoint来公布自己。

我想解决的具体用例是以下内容:

  1. 托管发现服务启动。
  2. 一个可发现的服务启动并向托管发现服务公布自己。
  3. 托管发现服务由于任何可能的原因重新启动。

那么,可发现的服务如何刷新自己(重新公告)到托管发现服务?

我知道托管发现服务可以持久化端点并在启动时恢复它们,但我希望一切都是动态和自我修复的,以便没有过时的端点信息的机会。

另一个用例:

  1. 现有的可发现服务正在运行。
  2. 新的托管发现服务上线。

我们如何强制或调用相同的公告服务合同以将其与新的托管发现服务联系起来?

我希望这就足够了解我想要实现的内容。

1个回答

5
我自己找到了答案。在需要控制ServiceDiscoveryBehavior之外的公告的情况下,您应该使用AnnouncementClient类。
AnnouncementClient client = new AnnouncementClient(announcementEndpoint);
var endpointDiscoveryMetadata = EndpointDiscoveryMetadata.FromServiceEndpoint(netTcpEndpoint);

client.AnnounceOnline(endpointDiscoveryMetadata);

这是如何工作的?我有以下内容:所有可发现的服务在启动时向发现服务宣布自己。但是,当我需要重新启动发现服务本身而不重新启动可发现的服务时,发现服务将不再知道仍在运行的可发现的服务。因此,我想到了缓存所有这些EndpointDiscoveryMetadata对象,并在重新启动时检查存储的EndpointDiscoveryMetadata后面的服务是否仍然存活。你有什么办法吗? - esskar
1
@ esskar - 我所做的是实现一个定期任务(线程),在可配置的间隔上“重新宣布”。然后在发现服务实现中,它将添加或更新其内部缓存。如果您还没有这样做,我建议从System.ServiceModel.Discovery.DiscoveryProxy派生自己的发现服务,并实现自己的端点缓存。请参见http://msdn.microsoft.com/en-us/library/dd456787.aspx此外,我实现了一个租约,每个服务都提供作为元数据扩展。如果租约到期,发现服务将删除端点。 - Jim
1
如果宣布服务通过重新宣布自身来“更新”租约,则发现服务将将其保存在内存中。此外,您可以运行多个发现服务,并使用对等网格相互合作。网格中的每个节点共享端点。这使得您的服务可以具有冗余性,如果一个发现服务出现故障。 - Jim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接