2011-05-09 75 views
1

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

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

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

任何指针,将不胜感激。

干杯。

回答

1

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

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

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

这样,所有的服务都将使用这个默认的行为,即使你不”的那些:

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

我也在考虑ServiceHostFactory,但也许有一种方法可以强制默认服务主机为自定义服务主机。 – R4cOON 2011-05-10 06:47:53

0

去创造一个默认的服务行为,其中包括serviceDiscovery元素的方法明确地声明。

相关问题