0

我目前正在实施一项使用WCF 发现并提供发现端点和公告端点的服务。我还需要使用范围来过滤客户端上宣布/发现的端点。

向 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>

我想这是不正确的,因为我重用了为我的发现端点创建的端点行为。但这是我发现描述我的范围的唯一方法。

我认为应该可以使用范围进行公告,因为:

  • 没有其他方法可以过滤收到的通知
  • 该类EndpointDiscoveryMetadata(收到通知时我得到的实例)包含一个属性Scopes

但是在我的配置中Scopes,客户端的集合对于所有端点都是空的,除了 mex 一个(它有两个 tempuri 范围)。

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

4

1 回答 1

0

实际上,只是我自己想通了(好吧,在我之前没有找到的 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>

这有效,我在客户端得到了我的范围。我希望它可以帮助某人。

于 2011-05-31T05:08:54.040 回答