Как добавить поведение конечной точки для открытия службы WCF, размещенной в IIS
У меня есть служба WCF, размещенная на IIS, и мне нужно добавить к ней поведение конечной точки. Я не могу просто добавить его в web.config. (Мы должны поддерживать архитектуру плагинов, и авторы плагинов не будут иметь доступа к моему web.config.) Я попытался поместить это в статический конструктор для сервиса:
var endpointDispatcher = OperationContext.Current.EndpointDispatcher;
SilverlightFaultMessageInspector inspector = new SilverlightFaultMessageInspector();
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector);
но он выдает исключение, говорящее "Это значение нельзя изменить после открытия ServiceHost". Если я вызываю host.Close() перед добавлением объекта инспектора, он все равно выдает то же исключение.
Я попробовал это также:
var host = OperationContext.Current.Host;
host.Description.Endpoints[0].Behaviors.Add(new SilverlightFaultBehavior());
но, похоже, не имеет никакого эффекта. Поведение конечной точки никогда не вызывается.
Так возможно ли добавить поведение конечной точки в службу WCF, размещенную на IIS?
1 ответ
Поведение конечной точки может быть добавлено только до ServiceHost
открывается (запускается хостинг сервиса). Так что требует перезагрузки вашего сервиса. Доступ к ServiceHost
для служб, размещенных в IIS, - через ServicHostFactory
который должен быть определен в файле.svc. Так что вам вообще нужно что-то вроде кастома ServiceHostFactory
который будет загружать поведения из некоторого хранилища и использовать их в CreateServiceHost
метод. Поведения будут применяться только после перезапуска приложения.