Определите wsHttpBinding во время выполнения с WCF - PullRequest
0 голосов
/ 22 мая 2009

У меня есть веб-приложение, которое предоставляет веб-сервисы с использованием WCF и wsHttpBindings. Возможно иметь приложение на разных машинах и разных URL. Это будет означать, что местоположение службы WCF будет отличаться для каждого.

Я создаю Службу Windows, которая будет ссылаться на каждое приложение и выполнять задачу. Каждое задание должно вызывать службу в веб-приложении. Я понимаю, что все привязки настроены в app.config, но есть ли более простой способ динамического вызова службы или как мне структурировать app.config?

<webApplication WebServiceUrl="http://location1.com/LunarChartRestService.svc" />
<webApplication WebServiceUrl="http://location2.com/LunarChartRestService.svc"/>

Ответы [ 2 ]

1 голос
/ 22 мая 2009

Файл конфигурации вашего клиента может выглядеть примерно так:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <client>
      <endpoint name="Endpoint1"
                address="http://location1.com/LunarChartRestService.svc"
                binding="wsHttpBinding"
                contract="(whatever-your-contract-is)" />
      <endpoint name="Endpoint2"
                address="http://location2.com/LunarChartRestService.svc"
                binding="wsHttpBinding"
                contract="(whatever-your-contract-is)" />
      <endpoint name="Endpoint3"
                address="http://location3.com/LunarChartRestService.svc"
                binding="wsHttpBinding"
                contract="(whatever-your-contract-is)" />
    </client>
  </system.serviceModel>
</configuration>

Затем в коде вы можете создать такую ​​конечную точку (клиентский прокси) на основе ее имени и, таким образом, вы можете выбрать любое местоположение, которое вам нужно. Ничто не мешает вам создавать несколько клиентских прокси! Таким образом, вы можете без проблем подключаться к нескольким конечным точкам сервера, используя несколько клиентских прокси.

В качестве альтернативы, вы также можете, конечно, создать экземпляр «WsHttpBinding» и «EndpointAddress» в коде и установить необходимые свойства (если таковые имеются), а затем вызвать конструктор для прокси клиента с этими готовыми объектами, таким образом переопределить весь цирк app.config и создать то, что вам нужно:

EndpointAddress epa = 
    new EndpointAddress(new Uri("http://location1.com/LunarChartRestService.svc"));
WSHttpBinding binding = new WSHttpBinding();

Марк

0 голосов
/ 22 мая 2009

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

Конечно, может случиться так, что вы предпочитаете не иметь дело с этой частью конфигурации WCF и предпочитаете просто иметь более простой список URL-адресов и покончить с этим. Это также вполне возможно; вам просто нужно проделать немного больше работы на стороне кода, чтобы создать экземпляры прокси / клиентских объектов на стороне клиента.

...