将默认端点添加到自动生成的服务

时间:2011-05-09 13:11:03

标签: wcf web-config config discovery

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

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

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

任何指针都会受到赞赏。

干杯。

2 个答案:

答案 0 :(得分:1)

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

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

<configuration><system.serviceModel><serviceHostingEnvironment><serviceActivations>... </...

答案 1 :(得分: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>

这样,即使您没有明确声明,也会使用此默认行为。