Использование нескольких сервисов wcf, фабричный класс для возврата проксиклиента - PullRequest
1 голос
/ 27 сентября 2010

У меня есть несколько служб в моем приложении. WebService1, WebService2, WebService3 и т. Д. *

Все сервисы имеют одинаковые методы, но они размещены на разных IP-адресах.

Теперь, когда клиент вызывает метод A (1), тогда

WebService1Client.Method () должен быть вызван;

клиент вызывает метод A (2), затем должен быть вызван WebService2Client.Method ().

Я не хочу делать переключение для каждой функции на клиенте.

Я бы предпочел создать несколько классов / методов, которые бы возвращали соответствующий proxyClient.

Как я могу создать класс для возврата объекта и, далее, как использовать этот объект.

Пожалуйста, укажите мне несколько примеров кодов или ссылок.

Спасибо

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

Если все ваши службы реализуют один и тот же контракт (я имею в виду один и тот же, а не контракт с одинаковыми методами), вы можете просто создать прокси с помощью класса ChannelFactory и привести возвращенный объект в интерфейс контракта.

Это должно дать вам ожидаемое общее поведение.

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

РЕДАКТИРОВАТЬ: так вы бы использовали ChannelFactory, вы можете избавиться от сервисной ссылки:

BasicHttpBinding myBinding = new BasicHttpBinding();
EndpointAddress myEndpoint = new EndpointAddress("http://localhost/MathService/Ep1");
ChannelFactory<IMath> myChannelFactory = new ChannelFactory<IMath>(myBinding, myEndpoint);
0 голосов
/ 27 сентября 2010

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

При использовании прокси вы должны обязательно закрыть его, когда закончите, и прервать его, когда онвыдает исключение.

var proxy = new Proxy();
try { proxy.SomeMethod(); }
catch { proxy.Abort(); }
finally { proxy.Close(); }
...