Как использовать несколько служб WCF с одного клиента - PullRequest
5 голосов
/ 26 марта 2009

Я все еще изучаю весь WCF, поэтому, пожалуйста, потерпите меня здесь.

У меня есть две самостоятельные службы, созданные с использованием C # и VS 2008:
Сервис № 1 Добавляет два числа и возвращает результат.
Сервис № 2 Возвращает квадрат числа.

Я хочу, чтобы клиент мог отправить два номера в Службу 1, получить сумму, а затем отправить сумму в Службу 2 и получить квадрат.

У меня есть два сгенерированных прокси для обеих служб, и я могу использовать Intellisense для них, так что эта часть предположительно работает.

Теперь, как мне настроить файл app.config таким образом, чтобы я мог взаимодействовать с обеими службами? Прямо сейчас я получаю исключение каждый раз, когда пытаюсь это сделать.

[Клиент работает нормально, если у меня есть только одна из конфигураций в файле приложения за раз, и я пытаюсь вызвать только этот сервер.]

Я полагаю, что это очень нудистский вопрос, и ответ, вероятно, заключается в том, чтобы "структурировать конфигурационный файл на _____ манере", но у Google просто нет примера / руководства.

Кто-нибудь знает, как это сделать?

Примечание: Использование нескольких служб WCF от одного клиента Хотя клиент звучит как дубликат, это НЕ то, что я ищу.

Редактировать: Благодаря marc_s, у меня все получилось

Поскольку обе службы работали в разных приложениях, мне не нужно было разбивать файл конфигурации сервера, но вот что я сделал с файлами конфигурации клиента: сначала автоматически сгенерировал файлы конфигурации с помощью SvrUtil.exe, а затем объединил их таким образом:

<bindings>
  <wsHttpBinding>

    <binding>
    ...
    </binding>

    <binding>
    ...
    </binding>

  </wsHttpBinding>
</bindings>

...

  <endpoint>

...

Ответы [ 3 ]

3 голосов
/ 26 марта 2009

Я понимаю, что вы запросили ответ в App.Config, но подумайте, что это может помочь. Обычно я бы начал с программной настройки клиентских подключений, так как это проще, и как только вы это заработаете, вы можете переместить его в свой App.Config.

Вот пример того, как настроить клиент WCF.

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress(serverURL);
MyServiceClient myServiceProxy = new MyServiceClient(binding, address);

В вашем App.Config может быть что-то похожее на приведенное ниже.

<client>
    <endpoint address="http://localhost/service1.asmx"
            binding="basicHttpBinding"
            bindingConfiguration="basicHttpBinding" 
            contract="IService1"
            name="Service1" />
    <endpoint address="http://localhost/service2.asmx" 
            binding="basicHttpBinding"
            bindingConfiguration="basicHttpBinding"
            contract="IService2"
            name="Service2" />
</client>
3 голосов
/ 26 марта 2009

Если вы хотите запустить две службы на отдельных конечных точках / портах, сделайте что-то вроде этого:

на стороне сервера:

<service name="Service1">
    <endpoint address="http://localhost:8001/service1.asmx"
            binding="basicHttpBinding"
            contract="IService1" />
</service>
<service name="Service2">
    <endpoint address="http://localhost:8002/service2.asmx" 
            binding="basicHttpBinding"
            contract="IService2" />
</service>

на стороне клиента:

<client>
    <endpoint address="http://localhost:8001/service1.asmx"
            binding="basicHttpBinding"
            contract="IService1"
            name="Service1" />
    <endpoint address="http://localhost:8002/service2.asmx" 
            binding="basicHttpBinding"
            contract="IService2"
            name="Service2" />
</client>

Это должно дать вам две отдельные, отдельные конечные точки на сервере и клиент, который будет общаться с обоими.

Марк

0 голосов
/ 26 марта 2009

У вас просто есть столкновение конечных точек? Убедитесь, что обе службы не настроены на прослушивание одного и того же номера порта, например. Если бы вы могли опубликовать свой конфигурационный файл (или его продезинфицированную версию), это помогло бы.

...