Определите wsHttpBinding во время выполнения с помощью WCF

StackOverflow https://stackoverflow.com/questions/896098

  •  23-08-2019
  •  | 
  •  

Вопрос

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

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

<webApplication WebServiceUrl="http://location1.com/LunarChartRestService.svc" />
<webApplication WebServiceUrl="http://location2.com/LunarChartRestService.svc"/>
Это было полезно?

Решение

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

<?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();

Марк

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top