Я создаю ServiceFactory для взятия под контроль inicialization моих сервисов, подвергнутых через IIS 7.
Однако я удивлен поведением ServiceHost. Хотя у меня есть 0 конфигурационных файлов для сервиса, везде, где я Инициализирую новый ServiceHost, как это:
var host = new ServiceHost(typeof(MyService), baseAddresses);
Затем я хочу добавить некоторые поведения, только если сборка находится в Режиме отладки:
#if DEBUG
host.Description.Behaviors.Add(new ServiceDebugBehavior());
#endif
Однако этот код, сбои вызывают ServiceDebugBehavior, уже применяется! Несмотря на у меня нет конфигурационных файлов, и никакие атрибуты не относились к классу обслуживания, хост уже имеет это поведение и 5 более прикладных!
Действительно ли это - ожидаемое поведение? Что, если я хочу отключить ServiceDebugBehavior на сборках конечных версий?
Заранее спасибо,
Непросто - я не знаю никаких настроек, чтобы просто отключить это. Вопрос в том, какая польза от этого ??
Насколько я понимаю, большинство из этих действий весьма существенны - аутентификация, учетные данные службы и так далее. И если они есть по умолчанию, даже без конфигурации, я бы поверил, что они есть не зря.
Но если вы действительно этого хотите, вы всегда можете создать свой собственный 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
. Думаю, довольно просто.
Вы не должны создавать поведение отладки службы внутри #if DEBUG, вместо этого просто установите значения свойств, которые вы хотите изменить по умолчанию.