2010-04-09 54 views
1

我有一堆自托管的WCF服务。一切工作正常,但我正在寻找方法来规范化/简化结果配置。我尽可能简化了它,但我仍然不高兴。目前,我的配置看起来像这样:简化WCF配置

<system.serviceModel> 
    <bindings> 
     <netTcpBinding> 
      <binding name="BindingConfiguration" ...> 
       ... 
      </binding> 
     </netTcpBinding> 
    </bindings> 

    <behaviors> 
     <serviceBehaviors> 
      <behavior name="ServiceBehavior"> 
       ... 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <services> 
     <service behaviorConfiguration="ServiceBehavior" name="Name1"> 
      <endpoint address="net.tcp://localhost:8080/name1" binding="netTcpBinding" bindingConfiguration="BindingConfiguration" contract="Contract1"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
     </service> 
     <service behaviorConfiguration="ServiceBehavior" name="Name2"> 
      <endpoint address="net.tcp://localhost:8080/name2" binding="netTcpBinding" bindingConfiguration="BindingConfiguration" contract="Contract2"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
     </service> 
     ... 
    </services> 
</system.serviceModel> 

总之,我有6个服务,所以它是重复的。理想情况下,我想:

  • 要指定“localhost:8080”只有一次,所有服务之间共享,只有指定的差异(“名称1”或“NAME2”)
  • 只有指定的身份信息一次和所有服务定义之间共享

我的第一点,我知道base addresses,但只适用于服务级别,而不是跨单独的服务。至于我的第二点,我尝试将身份信息转移到端点行为中,但似乎并不支持。

有什么我可以做的简化这个配置?或者是我唯一的选择切换到基于代码的配置方法?

回答

1

不幸的是,正如你注意到自己 - 基地址概念只在每个服务级别上 - 所以如果你有一个给定服务的端点很多,那么你可以使用它。

您真正需要的唯一选择是使用一些其他方法来配置您的基地址,然后使用它在代码中创建服务端点。如果您自行托管服务,则可以在您的主机代码中执行此操作,然后再致电ServiceHost.Open() - 如果您在IIS中托管,则必须创建您自己的自定义ServiceHostFactory,它执行所有此设置,然后使用该自定义服务主机工厂在IIS中创建您的服务主机。

无论是可行的有管理的努力 - 问题是,这是值得的麻烦你,但我们不能决定你的地方...

+0

无赖 - 害怕这一点。不管怎么说,还是要谢谢你。 – 2010-04-09 13:00:14