简化WCF配置

时间:2010-04-09 12:46:27

标签: wcf configuration simplify

我有一堆自托管的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”并在所有服务之间共享,并仅指定差异(“name1”或“name2”)
  • 仅指定一次身份信息,并在所有服务定义之间共享

首先,我知道base addresses,但这只适用于服务级别,而不适用于单独的服务。至于我的第二点,我已经尝试将身份信息移动到端点行为中,但似乎不支持。

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

1 个答案:

答案 0 :(得分:1)

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

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

两者都可以通过可管理的努力来实现 - 问题是这对你来说是否值得为之付出麻烦,但我们无法在你的位置做出决定......