Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Марк