контракты foreach в клиентском приложении из файла app.config - PullRequest
2 голосов
/ 20 декабря 2011

У меня вопрос: как я могу использовать «foreach» пространства имен службы в клиентском приложении?

Итак, у меня есть файл web.config в моей службе.Здесь раздел клиента:

<client>
      <endpoint address="http://nail:81/raj/Service1.svc" binding="basicHttpBinding"
        bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1"
        name="BasicHttpBinding_IService1" />
      <endpoint address="http://www.xxx.ru:81/upd/Service1.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService11"
        contract="ServiceReference2.IService1" name="BasicHttpBinding_IService11" />
    </client>

В моем клиентском приложении я использую его так:

updater.ServiceReference1.Service1Client myclient = new updater.ServiceReference1.Service1Client();

Проблема: в будущем у меня будет более 50 ссылок в web.config (на моем обслуживании).И я не хочу писать 50 таких строк кода:

Спасибо большое!

Ответы [ 3 ]

2 голосов
/ 20 декабря 2011

Отвечая на один из ваших комментариев (и, конечно, на ваш вопрос):

У меня есть одно клиентское приложение и 50 компьютеров с 50 службами.Все эти сервисы подключаются к моему компьютеру.Если я хочу использовать их все, я должен создать 50 клиентских объектов.Но я хочу использовать что-то вроде 'foreach' для создания объектов клиента и использовать их.Может быть, есть другой способ?

Честно говоря, я не нахожу никаких преимуществ в создании экземпляров 50-кратных клиентов службы и использую эти объекты для их использования по сравнению с созданием переменнойгде вы хотите вызвать сервисную операцию, создавая экземпляр какого-нибудь сервисного клиента ".

Действительно, у вас в памяти будет 50 объектов, для чего?Это пустая трата памяти, и в конце концов ваша цель в каком-то смысле бесполезна.

Это все равно, что сказать, что у меня 50 бизнес-менеджеров на бизнес-уровне, и я хочу их предварительно загрузить ... но подождите, почему бы неЯ создаю каждый экземпляр по отдельности, когда он нужен коду?

Может быть, я совершенно не понимаю вашу цель, но, похоже, вы хотите слишком усложнить свой сценарий, чтобы достичь той же точки.

1 голос
/ 21 декабря 2011

Действительно, мне не нужно 50 объектов для 50 ссылок на сервисы.В App.config, в разделе клиента я могу написать:

endpoint address="" 

И из кода моего клиента, в кружок, я пишу:

EndpointAddress endp = new EndpointAddress("some_ip_adress");
                            myclient.Endpoint.Address = endp;

Вот и все.

Спасибо Matías Fidemraizer за совет!

0 голосов
/ 20 декабря 2011

То, что у вас есть в конфигурации, это конфигурация службы и конечных точек, которая НЕ является тем, что вы создаете.

Вы создаете экземпляр updater.ServiceReference1.Service1Client, который является прокси-классом, сгенерированным инструментом WSDL. Единственный способ сделать это динамическим - использовать Reflection для загрузки типов в этом пространстве имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...