Служба Silverlight и дуплекс WCF - PullRequest
2 голосов
/ 21 октября 2011

Я добавил ссылку на службу WCF в приложение Silverlight, и вот как выглядит привязка из файла web.config

<bindings>
  <wsDualHttpBinding>
    <binding name="wsDualHttpBinding">
      <security mode="None" />
    </binding>
  </wsDualHttpBinding>
  <pollingDuplexHttpBinding>
    <binding name="multipleMessagesPerPollPollingDuplexHttpBinding"
      duplexMode="MultipleMessagesPerPoll" />
  </pollingDuplexHttpBinding>
</bindings>

И у меня есть этот фрагмент для создания экземпляра клиента службы

var serviceClient = new DuplexCallerIdServiceClient(
         new PollingDuplexHttpBinding(PollingDuplexMode.MultipleMessagesPerPoll),
      new EndpointAddress("http://localhost:51445/Service/MyService.svc"));

Меня беспокоит то, почему я должен указывать абсолютный URL в коде.У меня есть приложение winforms, которое использует ту же службу, и я могу просто new DuplexCallerIdServiceClient() создать экземпляр клиента службы, который кажется идеальным.Есть ли способ, которым я могу обойти это.Я не могу изменить настройки привязки.

Спасибо

1 Ответ

0 голосов
/ 21 октября 2011

Вам не нужно жестко задавать URL службы.Замените жестко закодированную строку, которая либо передается в качестве аргумента, либо вызывает функцию (или получает свойство некоторого объекта), чтобы заполнить конструктор допустимым URL-адресом службы.

Вот один из многих способов:

var serviceClient = new DuplexCallerIdServiceClient(
     new PollingDuplexHttpBinding(PollingDuplexMode.MultipleMessagesPerPoll),
  new EndpointAddress(Info.Instance.ServiceURL));

Где Info - одноэлементный объект, Instance получает его экземпляр, а ServiceUrl - строковое свойство, которое ... откуда угодно.База данных, файл конфигурации, жестко запрограммированный файл для запуска и т. Д. *

PS Осторожно с шаблоном Singleton, но как объекты информации конфигурации они могут быть очень полезны.

...