Как добавить поведение конечной точки для открытия службы 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 метод. Поведения будут применяться только после перезапуска приложения.

Другие вопросы по тегам