Добавить конечную точку по умолчанию для автоматически сгенерированных сервисов - PullRequest
1 голос
/ 09 мая 2011

Я использую новые функции .NET 4 и WCF, которые динамически генерируют запись службы по умолчанию для меня. Это очень удобно, поскольку избавляет меня от добавления примерно 30 идентичных (кроме контракта) сервисных записей в конфигурационном файле.

Теперь я хотел бы использовать открытие. Нет проблем для части объявления (отправка Hello и Bye при работе в режиме онлайн и в автономном режиме), поскольку я могу просто добавить поведение обнаружения в поведение по умолчанию (без имени). Это прекрасно работает.

Однако для части обнаружения (отвечая на запросы обнаружения) мне нужно было бы добавить DiscoveryEndpoint ко всем службам. Это та часть, которую я не знаю, как сделать. Я не смог найти никакой информации на MSDN, и я не уверен, что это действительно может быть сделано.

Любой указатель будет оценен.

Приветствие.

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Самый простой способ сделать это (AFAIK) - создать пользовательскую пару ServiceHost / ServiceHostFactory и добавить точку DiscoveryEndpoint к ServiceHost в методе constructor / OnOpening ().

Если вы размещаете свои службы в IIS, вам нужно либо обновить файлы .svc и указать атрибут Factory на новую ServiceHostFactory, либо, если вы использовали новую функцию активации службы в WCF 4.0, необходимо обновить файл конфигурации:

<configuration><system.serviceModel><serviceHostingEnvironment><serviceActivations>... </...
0 голосов
/ 09 января 2013

Способ заключается в создании поведения службы по умолчанию, которое включает элемент 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>

Таким образом, все ваши службы будут использовать это поведение по умолчанию, даже те, которые вы явно не объявляете.

...