Упрощенная конфигурация

Настройка служб Windows Communication Foundation (WCF) может оказаться сложной задачей. Разных параметров много, и не всегда легко понять, какие настройки необходимы. Хотя файлы конфигурации и увеличивают гибкость служб WCF, но из-за них возникают многие труднообнаружимые проблемы. .NET Framework, версия 4 приводит рекомендации по решению этих проблем и снижению размера и упрощению конфигурации услуг.

Упрощенная конфигурация

В файлах конфигурации WCF раздел <system.serviceModel> содержит элемент <service> для каждой размещенной службы. Элемент <service> содержит коллекцию элементов <endpoint>, которыми задаются конечные точки, открытые для каждой службы, и по желанию набор поведений службы. Элементы <endpoint> указывают адрес, привязку и контракт, открытые в конечной точке, и по желанию конфигурацию привязки и поведения конечной точки. В разделе <system.serviceModel> также содержится элемент <behaviors>, с помощью которого можно указать поведение служб или конечных точек. В следующем примере демонстрируется раздел <system.serviceModel> файла конфигурации.

system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name=”MyServiceBehavior”>
        <serviceMetadata httpGetEnabled=”true”>
        <serviceDebug includeExceptionDetailInFaults=”false”>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
   <basicHttpBinding>
      <binding name=MyBindingConfig”
               maxBufferSize=”100”
               maxReceiveBufferSize=”100” />
   </basicHttpBinding>
   </bindings>   <services>
    <service behaviorConfiguration=”MyServiceBehavior”
             name=”MyService”>
      <endpoint address=””
                binding=”basicHttpBinding”
                contract=”ICalculator”
                bindingConfiguration=”MyBindingConfig” />
      <endpoint address=”mex”
                binding=”mexHttpBinding”
                contract=”IMetadataExchange”/>
    </service>
  </services>
</system.serviceModel>

Платформа .NET Framework 4 упрощает настройку службы WCF за счет отмены требования элемента <service>. Если не добавить конечные точки в раздел <service> (если он есть), а служба не может программно определить конечные точки, то набор конечных точек будет автоматически добавлен к службе: по одной на каждый базовый адрес службы и на каждый контракт, используемый службой. В каждой из этих конечных точек адрес конечной точки соответствует базовому адресу, привязка определяется схемой базового адреса, а контракт — службой. Если не нужно задавать конечные точки или поведения служб или изменять какие-либо параметры привязки, то указывать файл конфигурации вовсе не нужно. Если служба реализует два контракта, а на узле включен транспорт по протоколам HTTP и TCP, то узел службы создаст четыре точки по умолчанию: по одной на каждый контракт для каждого транспорта. Чтобы создать по умолчанию конечные точки, узел службы должен знать, какие привязки использовать. Эти параметры заданы в разделе <protocolMappings> внутри раздела <system.serviceModel>. Раздел <protocolMappings> содержит список схем транспортных протоколов, распределенных по типам привязки. Узел службы использует переданные ему базовые адреса, чтобы определить, какую привязку использовать. В следующем примере используется элемент <protocolMappings>.

Ee358768.note(ru-ru,VS.100).gifПримечание
Службы, размещенные в службах IIS или WAS, используют в качестве базового адреса виртуальный каталог.

<protocolMapping>
  <add scheme=”http”     binding=”basicHttpBinding” bindingConfiguration=”MyBindingConfiguration”/>
  <add scheme=”net.tcp”  binding=”netTcpBinding”/>
  <add scheme=”net.pipe” binding=”netNamedPipeBinding”/>
  <add scheme=”net.msmq” binding=”netMSMQBinding”/>
</protocolMapping>

В предыдущем примере конечная точка с базовым адресом, начинающимся со схемы «http», использует BasicHttpBinding. Конечная точка с базовым адресом, начинающимся со схемы «net.tcp», использует NetTcpBinding. Параметры можно переопределить в локальном файле App.config или Web.config.

Каждый элемент внутри раздела <protocolMappings> должен задавать схему и привязку. Дополнительно он может иметь атрибут bindingConfiguration, задающий конфигурацию привязки внутри раздела файла конфигурации <bindings>. Если параметры bindingConfiguration не заданы, то используется анонимная конфигурация привязки нужного типа.

Поведения службы настроены для конечных точек по умолчанию с помощью анонимных разделов <behavior> в разделах <serviceBehaviors>. Каждый неименованный элемент <behavior> в разделе <serviceBehaviors> используется для настройки поведений служб. Например, следующий файл конфигурации позволяет публиковать метаданные всех служб в узле.

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>    <!-- No <service> tag is necessary. Default endpoints are added to the service -->
    <!-- The service behavior with name="" is picked up by the service -->
 </system.serviceModel>

Поведения конечных точек настроены при помощи анонимных разделов <behavior> в разделах <serviceBehaviors>.

В следующем примере приведен файл конфигурации, эквивалентный файлу, приведенному в начале данного раздела, с упрощенной моделью конфигурации.

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults=”false”/>
        </behavior>
      </serviceBehaviors>
    </behaviors>    <bindings>
       <basicHttpBinding>
          <binding maxBufferSize=”100”
                   maxReceiveBufferSize=”100” />
       </basicHttpBinding>
    </bindings>    <!-- No <service> tag is necessary. Default endpoints will be added to the service -->
    <!-- The service behavior with name="" will be picked up by the service -->
    <protocolMapping>
      <add scheme=”http”     binding=”basicHttpBinding” / </protocolMapping>
  </system.serviceModel>

См. также

Основные понятия

Настройка служб с использованием файлов конфигурации
Настройка привязок для служб Windows Communication Foundation
Настройка привязок, предоставляемых системой

Другие ресурсы

Настройка служб
Configuring Windows Communication Foundation Applications