У нас есть веб-сервис WCF, который, к сожалению, должен использовать SOAP 1.1 + SSL, поэтому я использую basicHttpBinding, а не wsHttpBinding. Я считаю, что мой web.config в порядке, поскольку я сравнил его с бесчисленным количеством других в статьях stackoverflow и MSDN. Мне не повезло с другими решениями проблем, потому что все, кажется, используют wsHttpBinding для всех примеров связывания SSL.
Многие предложения по StackOverflow приводят к ошибкам конфигурации сервера, таким как Заголовки SSL , но я подтвердил людям, которые управляют нашим IIS, что привязки портов SSL и заголовки хостов SSL настроены правильно (как насколько мы можем судить). Однако мы используем подстановочный сертификат, , который я прочитал, может усложнить этот процесс, как в этом (удален из-за нового ограничения на количество ссылок на пользователя), хотя мой SSL работает и сеанс зашифрован.
Я надеюсь, что это что-то простое в конфиге, которое мне не хватает, потому что я смотрю на него слишком много часов / дней подряд.
Когда я пытаюсь вызвать службу из WcfTestService.exe или из базового приложения .net, я получаю следующую ошибку.
Конечная точка не прослушивала
https: // subdomain.domain.us:8091/SalesService/SalesService.svc
что может принять сообщение. Это
часто вызвано неправильным адресом
или действие SOAP. Смотрите InnerException, если
настоящее время, для более подробной информации.
Трассировка стека серверов:
в System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException (WebException
webException, запрос HttpWebRequest,
HttpAbortReason abortReason) в
System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan
тайм-аут) в
System.ServiceModel.Channels.RequestChannel.Request (сообщение-сообщение, время ожидания TimeSpan) в
System.ServiceModel.Dispatcher.RequestChannelBinder.Request (сообщение-сообщение, время ожидания TimeSpan) в
System.ServiceModel.Channels.ServiceChannel.Call (Строковое действие, односторонний логический тип,
Операция ProxyOperationRuntime,
Object [] ins, Object [] outs, TimeSpan
тайм-аут) в
System.ServiceModel.Channels.ServiceChannelProxy.InvokeService (IMethodCallMessage
methodCall, ProxyOperationRuntime
операция) в
System.ServiceModel.Channels.ServiceChannelProxy.Invoke (Шеззаде
сообщение)
Исключение переброшено в [0]:
в
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (Шеззаде
reqMsg, IMessage retMsg) в
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData &
msgData, тип Int32) в
IServiceRC.RestrictedProduct (String
line1) в
ServiceRCClient.RestrictedProduct (String
line1)
Внутреннее исключение: пульт
сервер вернул ошибку: (404) не
Найденный. в
System.Net.HttpWebRequest.GetResponse ()
в
System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan
Тайм-аут)
А вот мой web.config
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="SalesService.ServiceRCbehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="ServiceRCbind" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address=""
binding="basicHttpBinding" bindingConfiguration="ServiceRCbind"
contract="SalesService.IServiceRC"/>
</client>
<services>
<service behaviorConfiguration="SalesService.ServiceRCbehavior" name="SalesService.ServiceRC">
<endpoint address="" listenUri="SalesService.svc" binding="basicHttpBinding" contract="SalesService.IServiceRC" bindingConfiguration="ServiceRCbind"/>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="https://subdomain.domain.us:8091/SalesService/"/>
</baseAddresses>
</host>
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
<baseAddressPrefixFilters>
<!--<add prefix="https://subdomain.domain.us:8091/SalesService/"/>-->
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
</system.serviceModel>
Еще одна вещь, которую я рассмотрел, - это создание пользовательских конечных точек, как в ранее связанном решении, но я не думаю, что моя ситуация конкретно требует этого и только усложнит ситуацию.
Любой вклад / ссылки будут очень признательны.
Редактировать: Здесь - это ссылка на текст wsdl, сгенерированный IIS (только имя домена отредактировано для анонимности)