2010-04-09 2 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 сервисов, поэтому он повторяется. В идеале я хотел бы:

  • Чтобы задать «локальный: 8080» только один раз и поделена между всеми службами, и только указать разницу («name1» или «name2»)
  • Укажите только идентификационную информацию один раз и доля между всеми определениями услуг

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

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

ответ

1

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

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

И это выполнимо с управляемым усилием - вопрос заключается в том, что является ли стоит проблема для вас, но мы не можем решить, что на вашем месте ...

+0

Лентяй - боялся. Спасибо, в любом случае. –