WCF prend-il en charge SNI (indication du nom du serveur)
-
13-12-2019 - |
Question
Je voudrais consommer un service de WCF tiers à l'aide de l'authentification de base, mais j'ai également besoin d'utiliser SNI.J'ai piraté ensemble l'exemple suivant (moins de choses de fin d'extrémité réelle) pour montrer ce que j'ai configuré et l'erreur que je reçois.
Toute aide beaucoup appréciée car je connais peu de WCF et de rien sur 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>
Code:
var service = new SyncFrameworkClient();
service.ClientCredentials.UserName.UserName = "username";
service.ClientCredentials.UserName.Password = "thepassword";
service.method() // fails!
L'appel à méthode échoue avec:
Le service demandé, 'https://their.server.com/theirservice.svc' n'a pas pu être activé.Voir les journaux de trace de diagnostic du serveur pour plus d'informations.
la trace du serveur
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)
La solution
Cette erreur est généralement une question de service de service et non un problème côté client.SNI est une technologie de serveur pour améliorer la prise de main SSL et dans la pile Microsoft est uniquement pris en charge dans la version non sélectionnée IIS 8 .À moins que la tierce partie ait roulé sa propre pile SNI / SSL, il semble peu probable que leur service de WCF l'exigeait.
sur l'exception réelle que vous obtenez, il semble que quelque chose sur les lignes de Ce blog post serait probablement la cause du problème.Vos extraits de configuration et de code sont à droite pour BasichttpLinding à l'aide de SSL et de l'authentification HTTP de base.