Подтвердить что ты не робот

Добавление ссылки службы WCF с конечной точкой https

Приложение моего WCF работает через http и https, однако, когда я добавляю ссылку на службу (с https url) на нее в моем клиенте, Visual Studio 2010 устанавливает конечную точку в конфигурационном файле на http. Это не так просто, как изменение этой конечной точки конфигурации на https, так как есть несколько файлов за кулисами, которые делают вещи с xsd и ссылаются на конечную точку http. Как настроить мой сервис/клиент для принудительной настройки https так, чтобы он правильно устанавливал конечную точку?

Когда я пытаюсь вручную изменить конечную точку в файле конфигурации и установить режим безопасности на "Транспорт", я получаю эту ошибку:

Сообщение об исключении: прослушивание конечных точек не было https://myservice/AvailabilityService.svc, который может принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. См. InnerException, если присутствует, для более подробной информации.

Я могу, однако, увидеть эту конечную точку в IE и отлаживать локально. После того, как я добавлю ссылку на службу с помощью https и найду решение для своего http-эквивалента, он найдет файл wsdl, ссылающийся на http, config.svcinfo и конфигурацию91.svcinfo, которая использует http-url вместо https

Здесь моя конфигурация на стороне сервера:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

.. И конфигурация клиентской стороны:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IAvailabilityService" 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>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://myservice/AvailabilityService.svc"
          binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IAvailabilityService"
          contract="PaymentAvailabilityService.IAvailabilityService"
          name="BasicHttpBinding_IAvailabilityService" />
    </client>
  </system.serviceModel>

Возможно, мне лучше вручную использовать сервисы в коде?

4b9b3361

Ответ 1

Вам нужно изменить привязку для использования безопасности транспорта для использования HTTPS

Транспортная безопасность

Связывание на стороне сервера должно быть настроено для https, а также для клиента:

<bindings>
  <basicHttpBinding>
    <binding name="httpsBinding" allowCookies="true" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      <security mode="Transport">
        <transport clientCredentialType="None" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<services>
  <service name="yourNamespace.YourService" behaviorConfiguration="yourBehaviors">
    <endpoint contract="yourNamespace.YourService" binding="basicHttpBinding" bindingConfiguration="httpsBinding" />
  </service>
</services>