Поддерживает ли WCF SNI (индикация имени сервера) - PullRequest
3 голосов
/ 13 марта 2012

Я хотел бы использовать стороннюю службу 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)

1 Ответ

1 голос
/ 13 марта 2012

Эта ошибка обычно является проблемой на стороне службы, а не на стороне клиента. SNI - это серверная технология для улучшения SSL-квитирования, и в стеке Microsoft поддерживается только в неизданной версии IIS 8 . Если только сторонние разработчики не развернули свой собственный стек SNI / SSL, маловероятно, что их службе WCF потребуется это.

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

...