Упрощенная конфигурация
Настройка служб 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>.
![]() |
---|
Службы, размещенные в службах 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