Итак, у меня есть служба 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>