Переназначить конечную точку клиента во время выполнения - PullRequest
1 голос
/ 20 июня 2011

У меня есть приложение C #, которое работает в фоновом режиме.Выполнение этого приложения может занять от 1 до 10 минут, и оно обменивается данными со службой WCF, вызывая несколько веб-методов с начала и до конца его выполнения.

Чтобы избежать создания / закрытия слишком большого количества прокси-объектов, яУ меня есть один прокси-объект на время процесса.У меня есть пара серверных блоков с настроенным IIS, где находится копия службы WCF, и я хочу использовать оба блока для распределения нагрузки.Из-за отсутствия дорогостоящего решения для балансировки нагрузки я хочу на лету изменить адрес конечной точки прокси-сервера для связи с другим серверным блоком для каждого вызова метода.

Я пробовал это до первого методаcall:

client.Endpoint.Address = new EndpointAddress("http://box1.wcfserviceaddress.com/MyService.svc");

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

Можно ли это сделать или мне нужно создать клиент для вызова метода?

С уважением, F.

Ответы [ 2 ]

3 голосов
/ 20 июня 2011

Прокси-сервер получен из ClientBase, который реализует ICommunicationObject. Все классы, производные от CommunicationObject или реализующие ICommunicationObject, имеют одинаковое поведение - их можно настроить только в состоянии Created. Как только объект связи переходит из состояния Created, конфигурация не может быть изменена, и из-за этого адреса настройки после первого использования прокси-сервера (он меняет состояние на Opened) не действует. Единственный способ получить прокси с новым адресом - создать новый.

0 голосов
/ 20 июня 2011

Как только клиент создан и открыт, я на 99% уверен (без двойной проверки на 100%), что вы не можете изменить ни одну из его азбуки.Вам придется использовать прокси для каждого сервера.

...