2009-07-28 1 views
13

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

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

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

+0

Можете ли вы разместить ссылку на вопрос о неправильном синтаксическом разборе имени типа? –

ответ

14

Вы должны быть в состоянии добавить поведение клиента в коде что-то вроде этого:

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

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

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

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

Marc

+1

Это одно из решений, которые мы используем в настоящее время. Сложная часть состоит в том, что мы лениво инициализируем ее. Я бы предпочел более активный подход, возможно, в Global.asax. Кажется, я могу либо поместить его в конфигурацию приложения (по своей сути глобальную), либо я могу программно настроить его при первом использовании, но я не могу программно * глобально * настроить его. – Trinition

Смежные вопросы