将范围添加到公告端点

时间:2011-05-31 04:43:36

标签: wcf service-discovery scopes

我目前正在实施一项使用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范围)。

那么,任何想法如何正确声明公告端点的范围? 任何帮助将不胜感激,非常感谢提前。

1 个答案:

答案 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>

这有效,我可以在客户端获得我的范围。我希望它有所帮助。