Клиент WCF, использующий несколько служб

Я пытаюсь выяснить, как настроить мой web.config (клиент) для использования двух разных веб-служб WCF, один с другим, используя

У меня две конечные точки, думаю, мне нужны две разные конфигурации привязки. Это мой текущий узел привязки:

<basicHttpBinding>
    <binding name="WebServiceProxyServiceSoapBinding" closeTimeout="00:01:00"
        openTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00"
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
        maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="Transport">
        <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>

Я не могу добавить еще один узел basicHttpBinding. Дело в том, что если ВСЕ, что я изменил, было параметром режима в <security mode="Transport">, то привязка отлично подойдет для той или иной конечной точки.

Это похоже на обычную проблему, но пока не нашел ответа. В целом у меня не очень большой опыт работы с WCF (если это не очевидно), помимо простого использования и вызова. Любая помощь будет БОЛЬШОЙ!

Эта статья была близкой, но не совсем той же проблемой, поскольку им не требовался другой режим безопасности.: Как использовать несколько служб WCF от одного клиента

Заранее спасибо.


person SCEV    schedule 24.03.2010    source источник


Ответы (2)


Вам просто нужно добавить еще один узел <binding> с другим именем и любыми другими параметрами, которые вам нравятся, под узлом <basicHttpBinding>.

Затем, очевидно, просто убедитесь, что каждый клиент настроен на использование привязки, специфичной для него, установив соответствующее имя в атрибуте bindingConfiguration для каждого узла <endpoint>.

person Drew Marsh    schedule 24.03.2010
comment
:) Это было слишком просто. Спасибо! - person SCEV; 25.03.2010

У меня две конечные точки, думаю, мне нужны две разные конфигурации привязки. Это мой текущий узел привязки:

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

Вам нужно добавить два из них, это клиентский элемент:

<system.serviceModel>
   <bindings>
       ..... (as you already have it) ....
   </bindings>
   <client>
      <endpoint name="Service1Endpoint"
                address="http://yourserver/service1.svc" 
                binding="basicHttpBinding"
                bindingConfiguration="WebServiceProxyServiceSoapBinding"
                contract="IWCFService1"  />
      <endpoint name="Service2Endpoint"
                address="http://yourserver/service2.svc" 
                binding="basicHttpBinding"
                bindingConfiguration="WebServiceProxyServiceSoapBinding"
                contract="IWCFService2"  />
   </client>
</system.serviceModel>

Это должно сработать.

Конечно, если ваша вторая служба использует другую привязку или требует других настроек безопасности, тогда да, вам нужно будет добавить второй <binding name="something else" .....> под свой <basicHttpBinding> узел и указать здесь эту вторую конфигурацию привязки с одной из двух ваших клиентских конечных точек.

person marc_s    schedule 24.03.2010
comment
Ой, я вижу, что пытался добавить второй узел ‹basicHttpBinding›, а не второй дочерний узел Binding! Спасибо! - person SCEV; 25.03.2010