Программное и глобальное добавление пользовательского расширения поведения конечной точки клиента WCF

У меня есть необходимость добавить расширение пользовательского поведения для моих конечных точек клиента WCF. Я попытался сделать это с помощью конфигурации, но был укушен часто упоминаемой ошибкой, когда конфигурация WFC не может правильно проанализировать имя типа. Так я могу сделать это программно вместо этого?

Я не могу изменить разделы конфигурации во время выполнения, потому что они доступны только для чтения. Я знаю, что если я получу экземпляр экземпляра прокси-клиента (то есть ClientBase), я могу добавить к его Endpoint.Behaviors экземпляр моего пользовательского поведения. Тем не менее, я должен был бы сделать это для каждого экземпляра.

Могу ли я добраться до конечных точек по всему миру и предварительно добавить их (например, в Global.asax), или эти конечные точки создаются и временно отбрасываются?

1 ответ

Решение

Вы должны иметь возможность добавить поведение к клиенту в коде примерно так:

IMyEndpointBehavior behavior = client.Endpoint.Behaviors.Find<IMyEndpointBehavior>();

if(behavior == null)
{
   client.Endpoint.Behaviors.Add(new MyEndpointBehaviorImplementation());
}

Первая строка проверяет, было ли это поведение уже применено, чтобы не применять его дважды. Если он еще не был применен (.Find() call возвращает null), затем вы можете программно добавить это поведение в ваш клиентский класс.

Вы должны сделать все это перед первым вызовом в службу, очевидно. Как только вы это сделаете, вы не сможете больше менять клиента.

Марк

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