BasicHttpBinding через Load Balancer SSL клиентом конечной точки является http, а служба ожидает https - PullRequest
0 голосов
/ 04 июня 2018

Итак, у меня есть служба wcf, которую я не могу изменить, она использует basicHttpBinding для связи.Когда это используется внутренне, это работает как очарование.Проблема в том, что я пытаюсь открыть этот сервис для широкой публики, но сервис находится за балансировщиком нагрузки, который заставляет HTTPS / SSL.Этот basicHttpBinding не будет работать, и он из-за преобразования URL и установки транспорта на равный транспорт тоже не будет работать.

В настоящее время это мои привязки клиента:

var basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.None);

basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
basicHttpBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
basicHttpBinding.Security.Message.AlgorithmSuite = SecurityAlgorithmSuite.Default;

Не совсем уверенесли нужны последние части, похоже, выдает одну и ту же ошибку независимо.

И созданная мной прокси-служба выглядит так:

  <!-- DOWNLOAD HTTP -->
  <service name="ArchiveServiceValidation" behaviorConfiguration="metadataBehavior">
    <endpoint
      address=""
      contract="ArchiveService.IArchiveService"
      name="ArchiveServiceValidationHTTP"
      binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_IArchiveService_HTTP"/>

    <endpoint
      address="mex"
      binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_IArchiveService_HTTP"
      contract="IMetadataExchange"/>
  </service>

  <!-- DOWNLOAD HTTPS -->
  <service name="ArchiveServiceValidationHTTPS" behaviorConfiguration="metadataBehavior">
    <endpoint
      address=""
      contract="ArchiveService.IArchiveService"
      name="ArchiveServiceValidationHTTPS"
      binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_IArchiveService_HTTPS"/>

    <endpoint
      address="mex"
      binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_IArchiveService_HTTPS"
      contract="IMetadataExchange"/>
  </service>


 <client>
  <endpoint
    address="http://url-that-has-to-be-http-no-matter-what-i-do.com"
    binding="basicHttpBinding"
    bindingConfiguration="BasicHttpBinding_IArchiveService_HTTP"
    contract="ArchiveService.IArchiveService"
    name="DownloadDocumentEndpoint">
    <identity>
      <dns value="localhost" />
    </identity>
  </endpoint>
 </client>

Вот привязки, которые янастроить для работы как с HTTP, так и с HTTPS.

  <basicHttpBinding>
    <binding maxBufferPoolSize="5000000" maxReceivedMessageSize="5000000" name="BasicHttpBinding_IArchiveService_HTTPS">
      <security mode="Transport">
        <transport clientCredentialType="None"></transport>
        <message clientCredentialType="Certificate" algorithmSuite="Default"/>
      </security>
      <readerQuotas maxArrayLength="5000000" />
    </binding>
    <binding maxBufferPoolSize="5000000" maxReceivedMessageSize="5000000" name="BasicHttpBinding_IArchiveService_HTTP">
      <readerQuotas maxArrayLength="500000000" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"></transport>
        <message clientCredentialType="Certificate" algorithmSuite="Default"/>
      </security>
    </binding>
  </basicHttpBinding>

И мои настройки поведения метаданных:

    <behavior name="metadataBehavior">
      <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true" />
      <useRequestHeadersForMetadataAddress>
        <defaultPorts>
          <add port="80" scheme="http"/>
          <add port="443" scheme="https"/>
        </defaultPorts>
      </useRequestHeadersForMetadataAddress>
    </behavior>

1 Ответ

0 голосов
/ 05 июня 2018
var basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);

Исправлена ​​проблема для меня, оказалось, что 2 помещено в мой клиент, где я использовал BasicHttpBinding

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...