WCF ServiceHost уже имеет 5 поведений - PullRequest
5 голосов
/ 16 февраля 2010

Я создаю ServiceFactory, чтобы получить контроль над инициализацией моих служб, предоставляемых через IIS 7.

Однако я удивлен поведением ServiceHost. Хотя у меня есть 0 файлов конфигурации для службы, где бы я ни инициализировал новый ServiceHost, например:

var host = new ServiceHost(typeof(MyService), baseAddresses);

Далее я хочу добавить некоторые варианты поведения, только если сборка находится в режиме отладки:

#if DEBUG
host.Description.Behaviors.Add(new ServiceDebugBehavior());
#endif

Однако этот код не работает, потому что ServiceDebugBehavior уже применяется! Несмотря на то, что у меня нет файлов конфигурации и атрибутов, примененных к классу обслуживания, хост уже имеет такое поведение и еще 5 применено!

Это ожидаемое поведение? Что делать, если я хочу отключить ServiceDebugBehavior в сборках выпуска?

Заранее спасибо,

Ответы [ 2 ]

5 голосов
/ 16 февраля 2010

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

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

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

Если вы хотите, например, включите параметр IncludeExceptionDetailsInFaults в поведении службы для отладки вашего сервиса, попробуйте этот тип кода:

ServiceDebugBehavior behavior = 
       host.Description.Behaviors.Find<ServiceDebugBehavior>();

if(behavior != null)
{
    behavior.IncludeExceptionDetailInFaults = true;
}
else
{
    host.Description.Behaviors.Add(
        new ServiceDebugBehavior() { IncludeExceptionDetailInFaults = true });
}

В этом случае, если ServiceDebugBehavior уже существует, вы найдете его и просто установите для свойства значение true - в противном случае вы создадите и добавите новый ServiceDebugBehavior. Довольно легко, я думаю.

0 голосов
/ 16 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...