WCF Как реализовать в клиенте обработку нескольких сервисов
От: shiyan  
Дата: 19.07.13 07:57
Оценка:
Добрый день!
Есть клиент и сервис, с которым он взаимодействует. Всё хорошо работает, когда клиент обращается к единственному сервису:

using Client.ServiceReference1;
...
BackupMonitorClient proxy1 = new BackupMonitorClient()
proxy.GetFiles()

Однако появилась потребность использовать еще несколько сервисов с одинаковым контрактом (тот же самый сервис, только хостится на других машинах в домене). Соответственно, после добавления строчек

using Client.ServiceReference1;
using Client.ServiceReference2;
using Client.ServiceReference3;

появляется неднозначность при создании дополнительных прокси-классов:

BackupMonitorClient proxy2 = new BackupMonitorClient()

проблема решается добавлением названия пространства имен перед именем класса:

Client.ServiceReference2.BackupMonitorClient Service2 = new Client.ServiceReference2.BackupMonitorClient()

А теперь вопрос: клиент написан на WinForms и вся логика приложения написана в зависимости от того, какой сервис выбран на форме (например, показать список файлов на машине PC01). Хранить список прокси-классов в какой-нибудь коллекции и использовать обобщенную переменную proxy не получится, т.к. формально эти классы лежат в разных пространствах имен и имеют соответственно разные типы (хотя контракты служб у них одинаковые). Соотвественно, вызывать методы сервиса на стороне клиента не получится, т.к. не понятно к какому прокси-классу обращаться (proxy1 или proxy2):

private void btnOK_Click(object sender, EventArgs e)
{
proxy1.GetFiles();//???????
proxy2.GetFiles();//??????

//хотелось бы использовать вот так:
var proxy = new Object();
proxy = listBox1.SelectedValue;//определяем выбранный прокси-класс
proxy.GetFiles();//ошибка: "object" не содержит определения для "GetFiles" и не был найден метод расширения "GetFiles"

}

Есть ли какое-нибудь решение, чтобы обойти эту проблему? Использую VS2010 .NET Framework 4.0
Re: WCF Как реализовать в клиенте обработку нескольких сервисов
От: QrystaL Украина  
Дата: 19.07.13 08:34
Оценка:
Здравствуйте, shiyan, Вы писали:
S>...

Тут ServiceReference[1..N] вообще не нужен, используйте ChannelFactory:
http://www.codeproject.com/Tips/558163/Difference-between-Proxy-and-Channel-Factory-in-WC
http://msdn.microsoft.com/en-us/library/ms734681.aspx
Re[2]: WCF Как реализовать в клиенте обработку нескольких сервисов
От: shiyan  
Дата: 19.07.13 09:26
Оценка:
Спасибо, большое! Буду копать в этом направлении...
Здравствуйте, QrystaL, Вы писали:

QL>Здравствуйте, shiyan, Вы писали:

S>>...

QL>Тут ServiceReference[1..N] вообще не нужен, используйте ChannelFactory:

QL>http://www.codeproject.com/Tips/558163/Difference-between-Proxy-and-Channel-Factory-in-WC
QL>http://msdn.microsoft.com/en-us/library/ms734681.aspx
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.