我正在使用 .NET 4 和 WCF 的新功能,它们为我动态生成默认服务条目。这非常方便,因为它使我无需在配置文件中添加大约 30 个相同的(除了合同之外)服务条目。
现在我想使用发现。对于公告部分(上线和离线时发送Hello和Bye)没有问题,因为我可以简单地将发现行为添加到默认行为(没有名称)。效果很好。
但是对于发现部分(回复发现请求),我需要向所有服务添加一个 DiscoveryEndpoint。这是我不知道该怎么做的部分。我在 MSDN 上找不到任何信息,我不确定它是否真的可以完成。
任何指示将不胜感激。
干杯。
最简单的方法(据我所知)是创建自定义 ServiceHost/ServiceHostFactory 对,并在构造函数/OnOpening() 方法中将 DiscoveryEndpoint 添加到 ServiceHost。
如果您在 IIS 中托管服务,则需要更新 .svc 文件并将 Factory 属性指向新的 ServiceHostFactory,或者如果您使用了 WCF 4.0 中的新服务激活功能,则需要更新配置文件:
<configuration><system.serviceModel><serviceHostingEnvironment><serviceActivations>... </...
解决方法是创建一个包含 serviceDiscovery 元素的默认服务行为:
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
<serviceDiscovery>
<announcementEndpoints>
<endpoint
name="MyAnnouncementEndpoint"
kind="announcementEndpoint"
address="net.tcp://localhost/My.ServiceLocator/DiscoveryProxy.svc"
bindingConfiguration ="NetTcpBindingConfiguration"
binding="netTcpBinding"/>
</announcementEndpoints>
</serviceDiscovery>
</behavior>
</serviceBehaviors>
</behaviors>
这样,您的所有服务都将使用此默认行为,即使是您未明确声明的服务。