Я создал пользовательский ServiceHost, который я хотел бы использовать для автоматического добавления инспектора сообщений в каждую конечную точку службы, которая на нем работает. Я создал MessageInspector, который реализует IDispatchMessageInspector и IClientMessageInspector, и нашел следующий код, который должен добавить его в каждую конечную точку:
foreach (ChannelDispatcher channel in this.ChannelDispatchers) {
foreach (EndpointDispatcher endpoint in channel.Endpoints) {
endpoint.DispatchRuntime.MessageInspectors.Add(new MyMessageInspector());
}
}
Проблема, с которой я сталкиваюсь, состоит в том, что коллекция ChannelDispatchers пуста до тех пор, пока не будет открыт сервисный узел, что означает, что я не могу запустить этот код в конструкторе. Я создал обработчик событий для события Opened и вместо этого использовал этот код, но затем при попытке добавить конечную точку получаю следующую ошибку:
This value cannot be changed after a ServiceHost has been opened
Кажется, что я попал в какой-то Catch 22, возможна ли функциональность, которую я ищу в WCF?
Спасибо
Mike