Я перехожу на сайт https://mywebsite/MyApp/Myservice.svc и получаю следующую ошибку:
(Ссылка работает, если я использую http:// )
" Служба '/MyApp/MyService.svc' не может быть активирована из-за исключения во время компиляции. Сообщение об исключении следующее: Could not find a base address that matches scheme https for the endpoint with binding BasicHttpBinding. Зарегистрированные схемы базовых адресов: [http]."
EDIT: Если я изменю address=""
на address="https:// ..."
, то вместо этого я получу эту ошибку:
"Ошибка: Протокол 'https' не поддерживается...... ChannelDispatcher по адресу 'https://.../Annotation.svc' с контрактом(ами) '"Annotation"' не может открыть свой IChannelListener."
Вот как выглядит мой Web.Config
:
<services>
<service behaviorConfiguration="AnnotationWCF.AnnotationBehavior"
name="AnnotationWCF.Annotation">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Annotation"
contract="AnnotationWCF.Annotation" />
<endpoint address=""
binding="basicHttpBinding" bindingConfiguration="SecureTransport"
contract="AnnotationWCF.Annotation" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_Annotation" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
<binding name="SecureTransport" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
У меня была точно такая же проблема. Кроме мое решение было добавить и"Ы" на привязку стоимости.
Стар: привязка="и mexHttpBinding и"
Новое: привязка="и mexHttpsBinding и"
веб -.фрагменте конфигурации:
<services>
<service behaviorConfiguration="ServiceBehavior" name="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService">
<endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="webBinding"
contract="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService" />
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
Оказалось, что моя проблема заключалась в том, что я использовал балансировщик нагрузки для обработки SSL, который затем отправлял его по http на реальный сервер, который затем жаловался.
Описание исправления здесь: http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/
Edit: Я исправил свою проблему, которая была немного другой, после разговора со службой поддержки microsoft.
В коде моего приложения silverlight адрес конечной точки передавался по https на балансировщик нагрузки. Затем балансировщик нагрузки изменил адрес конечной точки на http и указал на реальный сервер, к которому он обращался. Поэтому в веб-конфиге каждого сервера я добавил listenUri для конечной точки, которая была http вместо https.
<endpoint address="" listenUri="http://[LOAD_BALANCER_ADDRESS]" ... />
Убедитесь, что SSL включен для вашего сервера!
Я получил эту ошибку при попытке использовать конфигурационный файл HTTPS на моем локальном компьютере, который не имеет такого сертификата. Я пытался провести локальное тестирование - преобразовать некоторые привязки с HTTPS на HTTP. Я подумал, что это будет проще сделать, чем пытаться установить самоподписанный сертификат для локального тестирования.
Оказалось, что я получаю эту ошибку, потому что у меня не включен SSL на моем локальном IIS, хотя я не собирался его использовать.
Было что-то в конфигурации для HTTPS. Создание самоподписанного сертификата в IIS7 позволило HTTP работать :-)
Я думаю, что вы пытаетесь сконфигурировать свою службу примерно так, как показано ниже. Более подробная информация здесь: Specify a Service with Two Endpoints Using Different Binding Values. Также, кроме разработки, вероятно, не стоит иметь HTTP & HTTPS конечные точки для одной и той же службы. Это в некотором роде разрушает цель HTTPS. Надеюсь, это поможет!
<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="shortTimeout"
</endpoint>
<endpoint
address="http://computer:8080/Hello"
contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
binding="basicHttpBinding"
bindingConfiguration="Secure"
</endpoint>
</service>
<bindings>
<basicHttpBinding
name="shortTimeout"
timeout="00:00:00:01"
/>
<basicHttpBinding
name="Secure">
<Security mode="Transport" />
</basicHttpBinding>
</bindings>
В моем случае я устанавливаю режим безопасности, чтобы "TransportCredentialOnly на" вместо "на транспорте" в силу. Изменение это решенный вопрос
<bindings>
<webHttpBinding>
<binding name="webHttpSecure">
<security mode="Transport">
<transport clientCredentialType="Windows" ></transport>
</security>
</binding>
</webHttpBinding>
</bindings>
Посмотри на свой базовый адрес и адрес конечной точки (может'т вижу это в вашем примере кода). скорее всего вы пропустили колонну или другую описку например, HTTPS// вместо HTTPS://
Я был с помощью webhttpbinding и забыл dicate режим безопасности на "Транспорт" на конфигурацию привязки, который вызвал ошибку:
<webHttpBinding>
<binding name="MyWCFServiceEndpoint">
<security mode="Transport" />
</binding>
</webHttpBinding>
Добавление в конфигурацию Исправлена проблема.