Программное и глобальное добавление пользовательского расширения поведения конечных точек клиента 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()
возвращает null), вы можете программно добавить это поведение в свой класс клиента.
Вам нужно сделать все это, прежде чем вызывать первый вызов службы, очевидно. Как только вы это сделаете, вы больше не сможете изменять клиента.
Марк