Подтвердить что ты не робот

Https с ошибкой WCF: "Не удалось найти базовый адрес, соответствующий схеме https"

Я перехожу к https://mywebsite/MyApp/Myservice.svc и получаю следующую ошибку:

(ссылка работает, если я использую http://)

"Служба" /MyApp/MyService.svc "не может быть активирована из-за исключения во время компиляции. Сообщение об исключении: Не удалось найти базовый адрес, который соответствует схеме https для конечной точки со связыванием BasicHttpBinding. [http].."

EDIT: Итак, если я изменю address="" на address="https:// ...", тогда я получу эту ошибку:

"Ошибка: протокол https не поддерживается..... ChannelDispatcher в ' https://.../Annotation.svc' с контрактом (s )" Аннотации" не может открыть свой 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>
4b9b3361

Ответ 1

Оказалось, что моя проблема заключалась в том, что я использовал балансировщик нагрузки для обработки SSL, который затем отправил его через http на фактический сервер, который затем пожаловался.

Описание исправления находится здесь: http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/

Изменить: я исправил свою проблему, которая была немного иной, после разговора с поддержкой Microsoft.

У моего приложения silverlight был свой адрес конечной точки в коде, переходящем https в балансировщик нагрузки. Затем балансировщик нагрузки изменил адрес конечной точки на http и указал на фактический сервер, на который он собирался. Поэтому в каждой конфигурации веб-сервера я добавил listenUri для конечной точки, которая была http, а не https

<endpoint address="" listenUri="http://[LOAD_BALANCER_ADDRESS]" ... />

Ответ 2

У меня была такая же проблема. Кроме моего решения было добавить "s" к значению привязки.

Старый: связывание = "mexHttpBinding"

New: связывание = "mexHttpsBinding"

фрагмент web.config:

<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>

Ответ 3

Убедитесь, что для вашего сервера включен SSL.

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

Оказалось, что я получал эту ошибку, потому что У меня не было SSL-поддержки на моем локальном IIS, хотя я и не собирался его использовать.

В конфигурации HTTPS есть что-то. Создание самоподписанного сертификата в IIS7 позволило HTTP затем работать: -)

Ответ 4

Я думаю, вы пытаетесь настроить свою службу аналогично следующей конфигурации. Здесь есть дополнительная информация: Укажите службу с двумя конечными точками, используя разные значения привязки. Кроме того, кроме разработки, вероятно, неплохо было бы иметь как конечные точки 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>

Ответ 5

В моем случае я устанавливаю режим безопасности на "TransportCredentialOnly" вместо "Transport" в привязке. Изменение этого параметра разрешило проблему

<bindings>
  <webHttpBinding>
    <binding name="webHttpSecure">
      <security mode="Transport">
        <transport clientCredentialType="Windows" ></transport>
      </security>
      </binding>
  </webHttpBinding>
</bindings>

Ответ 6

Посмотрите на свой базовый адрес и адрес конечной точки (не можете увидеть его в своем примере кода). скорее всего, вы пропустили столбец или другую опечатку, например. https//вместо https://

Ответ 7

Я использовал webHttpBinding и забыл прописать режим безопасности "Транспорт" в конфигурации привязки, которая вызвала ошибку:

  <webHttpBinding>
    <binding name="MyWCFServiceEndpoint">
      <security mode="Transport" />
    </binding>
  </webHttpBinding>

Добавление этого в конфигурацию устраняет проблему.