Добавление областей в конечную точку объявления - PullRequest
0 голосов
/ 31 мая 2011

В настоящее время я внедряю службу, которая использует WCF discovery и предоставляет конечную точку обнаружения и конечную точку объявления. Мне также нужно использовать области для фильтрации объявленных / обнаруженных конечных точек на моем клиенте.

Добавление областей в конечную точку обнаружения прекрасно работает, но я не могу определить правильную конфигурацию для конечной точки объявления. Вот что я придумал:

<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 на стороне клиента пуста для всех конечных точек, кроме mex (в ней две области tempuri).

Итак, есть идеи, как правильно объявить области для конечных точек объявления? Любая помощь будет оценена, большое спасибо заранее.

1 Ответ

0 голосов
/ 31 мая 2011

На самом деле, я сам все понял (ну, с помощью примера конфигурации из 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>

Это работает, и я получаю свои возможности на стороне клиента. Надеюсь, это кому-нибудь поможет.

...