我目前正在实施一项使用WCF discovery的服务,并提供Discovery Endpoint和Announcement Endpoint。我还需要使用范围来过滤客户端上已发布/已发现的端点。
向Discovery Endpoint添加范围很有用,但我无法找出Announcement Endpoint的正确配置。这就是我想出的:
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint"
behaviorConfiguration="DiscoveryBehavior" />
</announcementEndpoints>
</serviceDiscovery>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="DiscoveryBehavior">
<endpointDiscovery>
<scopes>
<add scope="http://My/Scope"/>
</scopes>
</endpointDiscovery>
</behavior>
</endpointBehaviors>
我认为这不正确,因为我重用了我为Discovery Endpoint创建的端点行为。但这是我发现描述我的范围的唯一方法。
我认为使用公告范围应该是可能的,因为:
EndpointDiscoveryMetadata
类(收到通知后我收到的实例)包含属性Scopes。但是对于我的配置,客户端的Scopes
集合对于除mex之外的所有端点都是空的(其中有两个tempuri范围)。
那么,任何想法如何正确声明公告端点的范围? 任何帮助将不胜感激,非常感谢提前。
答案 0 :(得分:0)
实际上,我自己想出来了(好吧,在Configuration sample from MSDN的帮助下,我之前没有找到)。
关键是将DiscoveryBehavior 应用于所有可发现的服务端点,而不是应用于公告端点。
所以,
<services>
<service name="MyService" behaviorConfiguration="MyServiceBehavior">
<endpoint address="MyService/" binding="wsHttpBinding"
contract="IMyService"
behaviorConfiguration="DiscoveryBehavior" />
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange"/>
<endpoint kind="udpDiscoveryEndpoint" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDiscovery>
<announcementEndpoints>
<endpoint kind="udpAnnouncementEndpoint" />
</announcementEndpoints>
</serviceDiscovery>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="DiscoveryBehavior">
<endpointDiscovery>
<scopes>
<add scope="http://My/Scope"/>
</scopes>
</endpointDiscovery>
</behavior>
</endpointBehaviors>
</behaviors>
这有效,我可以在客户端获得我的范围。我希望它有所帮助。