Упростить настройку WCF - PullRequest
1 голос
/ 09 апреля 2010

У меня есть несколько сервисов 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")
  • Укажите идентификационную информацию только один раз и поделитесь между всеми определениями услуг

К моему первому замечанию, я знаю о базовых адресах , но это работает только на уровне сервиса, а не на разных сервисах. Во-вторых, я пытался переместить информацию об идентичности в поведение конечной точки, но это не поддерживается.

Могу ли я что-нибудь сделать, чтобы упростить эту конфигурацию? Или мой единственный вариант - перейти к подходу конфигурации на основе кода?

1 Ответ

1 голос
/ 09 апреля 2010

К сожалению, как вы сами заметили, концепция базового адреса распространяется только на уровень обслуживания - поэтому, если у вас есть много конечных точек для данной услуги, вы можете использовать ее.

Единственный вариант, который вам действительно нужен, - это использовать некоторые другие средства настройки базового адреса, а затем использовать его для создания конечных точек службы в коде. Если вы самостоятельно размещаете свою службу, вы можете сделать это в своем коде хоста, прежде чем вызывать ServiceHost.Open() - если вы размещаете в IIS, вам придется создать свой собственный ServiceHostFactory, который выполняет все эти настройки, а затем использовать фабрика хостов пользовательских сервисов для создания хостов сервисов в IIS.

И то, и другое выполнимо с помощью управляемых усилий - вопрос в том, стоит ли это для вас хлопот, но мы не можем решить это вместо вас ...

...