https с ошибкой WCF: «Не удалось найти базовый адрес, соответствующий схеме https» - PullRequest
41 голосов
/ 12 декабря 2008

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

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

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

РЕДАКТИРОВАТЬ: Так что, если я изменю address="" на address="https:// ...", я получу эту ошибку вместо:

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

Ответы [ 7 ]

27 голосов
/ 26 мая 2011

У меня была точно такая же проблема. За исключением того, что я решил добавить «s» к значению привязки.

Old: связывание = "mexHttpBinding"

Новое: связывание = "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>
20 голосов
/ 19 января 2009

Оказалось, что моя проблема была в том, что я использовал балансировщик нагрузки для обработки 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]" ... />
8 голосов
/ 17 сентября 2010

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

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

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

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

3 голосов
/ 13 декабря 2008

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

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

<bindings>
  <webHttpBinding>
    <binding name="webHttpSecure">
      <security mode="Transport">
        <transport clientCredentialType="Windows" ></transport>
      </security>
      </binding>
  </webHttpBinding>
</bindings>
0 голосов
/ 02 февраля 2012

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

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

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

0 голосов
/ 28 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...