2010-09-15 3 views
2

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

Моя первая попытка была создать поведение конечной точки, и реализовать метод IEndpointBehavior.Validate, реализованный что-то вроде следующего:

void IEndpointBehavior.Validate(ServiceEndpoint endpoint) 
{ 
    ... endpoint.Address = new EndpointAddress(...); 
} 

Этот метод вызывается до того, как клиент пытается подключиться, и, кажется, успешно изменить конечный адрес. Однако инфраструктура WCF по-прежнему пытается подключиться с использованием исходного адреса.

Есть ли способ достичь этого, используя поведение конечной точки или какую-либо другую точку расширения WCF?

+0

Почему бы просто не использовать конструктор класса прокси, который принимает «EndPointAddress»? –

+0

Я не могу добиться того, что хочу, используя конструктор класса proxy (фактически в моем случае - конструктор ChannelFactory ), потому что в этот момент я еще не знаю, какой адрес использовать. – Joe

+1

Как вы не можете узнать адрес во время создания прокси? –

ответ

2

Я думаю, что проблема заключается в базовой функциональности CommunicationObject. Когда объект коммутации переходит в открытое состояние, он ничего не может изменить. Поэтому, если ваш объект связи (Channel или ChannelFactory) уже находится в состоянии Opened, вы не можете изменить адрес.

+0

Это звучит правдоподобно. Предположительно IEndpointBehavior.Validate выполняется слишком поздно, после открытия ChannelFactory. Мне интересно, есть ли другие точки расширения, которые позволяют мне прикладывать поведение к конечной точке до открытия ChannelFactory, поэтому я могу достичь своей цели. – Joe

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

  • Нет связанных вопросов^_^