1

我正在使用 .NET 4 和 WCF 的新功能为我动态生成默认服务条目。这非常方便,因为它使我免于在配置文件中添加大约 30 个相同的(合同除外)服务条目。

现在我想使用发现。宣布部分(在线和离线时发送HelloBye )没有问题,因为我可以简单地将发现行为添加到默认行为(没有名称)。这工作得很好。

但是对于发现部分(回复发现请求),我需要向所有服务添加一个DiscoveryEndpoint 。那是我不知道该怎么做的部分。我在 MSDN 上找不到任何信息,我不确定它是否真的可以完成。

任何指针将不胜感激。

干杯。

4

2 回答 2

1

执行此操作(AFAIK)的最简单方法是创建自定义 ServiceHost/ServiceHostFactory 对,并在构造函数 / OnOpening() 方法中将 DiscoveryEndpoint 添加到 ServiceHost。

如果在 IIS 中托管服务,则需要更新 .svc 文件并将 Factory 属性指向新的 ServiceHostFactory,或者如果您使用了 WCF 4.0 中的新服务激活功能,则需要更新配置文件:

<configuration><system.serviceModel><serviceHostingEnvironment><serviceActivations>... </...
于 2011-05-09T18:10:05.247 回答
0

要走的路是创建一个包含 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>

这样,您的所有服务都将使用此默认行为,即使您未明确声明的服务也是如此。

于 2013-01-08T22:49:25.140 回答