1

我有一堆自托管的 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 address,但这仅适用于服务级别,而不适用于单独的服务。对于我的第二点,我尝试将身份信息移动到端点行为中,但这似乎不受支持。

我能做些什么来简化这个配置吗?还是我唯一的选择是切换到基于代码的配置方法?

4

1 回答 1

1

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

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

两者都可以通过可管理的努力来实现 - 问题是这是否值得您为此烦恼,但我们无法决定代替您...

于 2010-04-09T12:53:26.367 回答