Настройка web.config (system.serviceModel) для сайта, который взаимодействует с несколькими веб-сервисами (некоторые через dll)

У меня есть решение, которое состоит из веб-проекта и проекта библиотеки классов. Решение веб-проекта напрямую ссылается на сервис wcf. Существует второй сервис wcf, но это проект библиотеки классов, который напрямую ссылается на него. Я добавляю библиотеку классов (вывод) в качестве ссылки на мой веб-проект.

Следовательно в моем web-проекте web.config у меня теперь есть две настроенные службы scf. Этот процесс был легким, поскольку я вручную скопировал app.config (часть system.serviceModel) непосредственно в web.config, а затем настроил веб-проект для непосредственного общения с другой службой wcf (напрямую, а не через dll).

Мой веб-проект должен общаться с третьим веб-сервисом (asmx). Я снова планирую использовать это как библиотеку классов и включить dll в мой веб-проект. (Это отдельное решение). Когда я взглянул на app.config этого конкретного проекта класса lib, я подумал, что просто скопирую эти необходимые разделы и объединю их соответственно с моим текущим web.config.

Поэтому для проекта lib третьего класса (который ссылается на службу asmx) я случайно заметил, что в узле привязок есть узел basicHttpBinding, а затем - customBinding. Затем далее под клиентским узлом были два узла конечных точек, которые имели атрибуты службы. (Я не понимаю, почему здесь должно быть две конечные точки в первую очередь).

Поэтому я скопировал то, что попало под узел привязок (из lib prj app.config 3-го класса), и добавил его к узлу привязок (в web.config). Я сделал аналогичный процесс для копирования конечных точек тоже. Но теперь, когда я пытаюсь запустить веб-сайт, я получаю исключение, которое останавливается во время инициализации мыльного клиента (служба asmx): оно говорит что-то вроде того, что он не может определить конечную точку для этого контракта.

Перед добавлением веб-службы asmx файл web.config выглядит следующим образом:

  <system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IEmployeeService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" />
          </security>
        </binding>
        <binding name="WSHttpBinding_IHelper" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" />
          </security>
        </binding>
      </wsHttpBinding>      
    </bindings>
    <client>
      <endpoint address="http://localhost:8731/Design_Time_Addresses/InfiniumIS/EmployeeService/"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IEmployeeService"
        contract="InfiniumWS.IEmployeeService" name="WSHttpBinding_IEmployeeService">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
      <endpoint address="http://localhost:8732/Design_Time_Addresses/SQLIS/Service1/"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IHelper"
        contract="SQLIS.IHelper" name="WSHttpBinding_IHelper">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>

Ниже приведена модель сервиса для проекта с сервисом asmx (взята из app.config)

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="ServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00"
                receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
                bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                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>
            <binding name="ServiceSoap1" closeTimeout="00:01:00" openTimeout="00:01:00"
                receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
                bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
        <customBinding>
            <binding name="ServiceSoap12">
                <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
                    messageVersion="Soap12" writeEncoding="utf-8">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                </textMessageEncoding>
                <httpsTransport manualAddressing="false" maxBufferPoolSize="524288"
                    maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
                    bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
                    keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
                    realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                    useDefaultWebProxy="true" requireClientCertificate="false" />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="https://is.security/WebAppSec_WS/service.asmx"
            binding="basicHttpBinding" bindingConfiguration="ServiceSoap"
            contract="apps.intranet.ws.ServiceSoap" name="ServiceSoap" />
        <endpoint address="https://is.security/WebAppSec_WS/service.asmx"
            binding="customBinding" bindingConfiguration="ServiceSoap12"
            contract="apps.intranet.ws.ServiceSoap" name="ServiceSoap12" />
    </client>
</system.serviceModel>

Я просто слил разделы, то есть скопировал все, что во 2-м конфиге, под узлом привязки, и добавил его к 1-му. Я сделал аналогичный процесс для копирования конечных точек.

PS: я понятия не имею, почему второй конфиг (asmx) показывает мне две конечные точки?

1 ответ

Решение

В окончаниях ASMX используются две разные привязки. Первая привязка - HTTP, а вторая - HTTPS. Предполагая, что служба ASMX поддерживает как HTTP, так и HTTPS, вы сможете удалить одну из конечных точек из конфигурации клиента.

Другие вопросы по тегам