Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[ПСП] Учебник WCF.docx
Скачиваний:
48
Добавлен:
26.03.2016
Размер:
147.76 Кб
Скачать

Слияние поведений

Функция слияния поведений упрощает управление поведениями в ситуациях, когда должен постоянно использоваться набор общих поведений. Эта функция позволяет задавать поведения на разных уровнях иерархии конфигурации, а также настраивать наследование службами поведений от нескольких уровней иерархии конфигурации. Проиллюстрируем это следующим образом: предположим, что в IIS имеется следующая структура виртуальных каталогов:

~\Web.config~\Service.svc~\Child\Web.config~\Child\Service.svc

А файл ~\Web.config содержите следующее:

Xml

Копировать

<configuration>

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior>

<serviceDebug includeExceptionDetailInFaults="True" />

</behavior>

</serviceBehaviors>

</behaviors>

</system.serviceModel>

</configuration>

Кроме того, имеется дочерний файл Web.config, расположенный в папке ~\Child\Web.config, со следующим содержимым:

Xml

Копировать

<configuration>

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior>

<serviceMetadata httpGetEnabled="True" />

</behavior>

</serviceBehaviors>

</behaviors>

</system.serviceModel>

</configuration>

Служба, расположенная в ~\Child\Service.svc, будет действовать таким образом, как будто бы для нее заданы и поведение serviceDebug, и поведение serviceMetadata.У службы, расположенной в ~\Service.svc, будет присутствовать только поведение serviceDebug behavior.В этой ситуации две коллекции поведений с одним и тем же именем (в данном случае пустой строкой) объединяются.

Также можно очищать коллекции поведений с помощью тега <clear> и удалять отдельные поведения из коллекции с помощью тега <remove>.Например, действие следующих двух конфигураций приведет к тому, что в дочерней службе будет только поведение serviceMetadata:

Xml

Копировать

<configuration>

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior>

<remove name="serviceDebug"/>

<serviceMetadata httpGetEnabled="True" />

</behavior>

</serviceBehaviors>

</behaviors>

</system.serviceModel>

</configuration>

Xml

Копировать

<configuration>

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior>

<clear/>

<serviceMetadata httpGetEnabled="True" />

</behavior>

</serviceBehaviors>

</behaviors>

</system.serviceModel>

</configuration>

Слияние поведений проводится для безымянных коллекций поведений (как показано выше), а также для именованных коллекций поведений.

Слияние поведений работает в среде размещения IIS, в которой файлы Web.config сливаются в иерархическом порядке с корневыми файлами Web.config и machine.config.Но оно также работает и в среде приложений, где файл machine.config может объединяться с файлом App.config.

Слияние поведений применяется в конфигурациях как к поведениям конечных точек, так и к поведениям служб.

Если коллекция дочерних поведений содержит поведение, которое уже определено в коллекции родительских поведений, то дочернее поведение переопределяет родительское.Если коллекция родительских поведений содержит <serviceMetadata httpGetEnabled="False" />, а коллекция дочерних поведений содержит<serviceMetadata httpGetEnabled="True" />, то дочернее поведение переопределит в коллекции поведений родительское поведение и параметр httpGetEnabled примет значение «true».