Поддерживает ли WCF SNI (индикация имени сервера)
-
13-12-2019 - |
Вопрос
Я хотел бы потреблять 3-я стороннюю службу WCF, используя базовую аутентификацию, но мне также нужно использовать SNI.Я взломал следующий пример (минус реальные вещи конечных точек), чтобы показать, что я настроен, и ошибка, которую я получаю.
Любая помощь очень ценится, как я мало знаю о WCF и ничего о SNI.
config
<endpoint
address="https://their.server.com/theirservice.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ISyncFramework2"
contract="ISyncFramework" name="BasicHttpBinding_ISyncFramework2">
</endpoint>
<basicHttpBinding>
<binding name="BasicHttpBinding_ISyncFramework2" 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="Basic" proxyCredentialType="None"
realm="" />
</security>
</binding>
</basicHttpBinding>
.
Код:
var service = new SyncFrameworkClient();
service.ClientCredentials.UserName.UserName = "username";
service.ClientCredentials.UserName.Password = "thepassword";
service.method() // fails!
.
Вызов Метод не удается с:
Запрошенная служба, https://their.server.com/theirservice.svc 'не может быть активирован.Смотрите журналы диагностики сервера для получения дополнительной информации.
Трассировка сервера
Server stack trace:
at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory factory, WebException responseException, ChannelBinding channelBinding)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
. Решение
Эта ошибка обычно является проблемой на стороне обслуживания, а не проблема с клиентом.SNI - это серверная технология для улучшения рукопожатия SSL и в стеке Microsoft - поддерживается только в Relaned IIS 8 версии.Если сторонняя сторона не прокатала свой собственный стек SNI / SSL, кажется, что их служба WCF потребует этого.
На фактическом исключении вы получаете, кажется, что-то вдоль линий этот блог пост может быть причиной проблемы.Ваши фрагменты конфигурации и кода смотрят вправо для basichttpbinding с использованием SSL и базовой аутентификации HTTP.