it-roy-ru.com

Исключение WCF: не удалось найти базовый адрес, который соответствует схеме http для конечной точки

Я пытаюсь разместить веб-сервис WCF на отдельном веб-сайте в IIS с https на 443 в качестве единственной привязки. 

Следующие конфигурации хорошо работают, когда я использую его на веб-сайте, который использует обе привязки (http (80)/https (443)). Если я удаляю привязку http, она начинает выдавать следующую ошибку.

Не удалось найти базовый адрес, который соответствует схеме http для конечной точки с привязкой BasicHttpBinding. Схемы зарегистрированных базовых адресов: [https].

Как мне заставить его работать на веб-сайте IIS только с привязкой https?

  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="defaultBasicHttpBinding">
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
            <message clientCredentialType="Certificate" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost/ERPService/retailPayment.svc"
                binding="basicHttpBinding" bindingConfiguration="defaultBasicHttpBinding"
                contract="RetailPaymentService.RetailPayment.SVRetailPaymentService" name="EnterpriseRetailPayment" />
    </client>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior>
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="MyEndPointBehavior">
          <!--<SchemaValidator enabled="true"/>-->
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service name="SettlementSalesCollection.SaleItemService" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint behaviorConfiguration="MyEndPointBehavior" binding="basicHttpBinding"
                  name="SettlementSalesCollection"
                  contract="SettlementSalesCollection.CITransactionSettlementListenerService" />
        <endpoint name="mexEndpoint" contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
      </service>
    </services>
    <extensions>
      <behaviorExtensions>
        <add name="SchemaValidator"
             type="SettlementSalesCollection.SchemaValidation.SchemaValidationBehavior+CustomBehaviorSection, SettlementSalesCollectionService, Version=1.0.0.0, Culture=neutral" />
      </behaviorExtensions>
    </extensions>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
18
KManohar

Ваша конфигурация должна выглядеть примерно так. Возможно, вам придется изменить <transport clientCredentialType="None" proxyCredentialType="None" /> в зависимости от ваших потребностей в аутентификации. Конфигурация ниже не требует никакой аутентификации.

<bindings>
    <basicHttpBinding>
        <binding name="basicHttpBindingConfiguration">
            <security mode="Transport">
                <transport clientCredentialType="None" proxyCredentialType="None" />
            </security>
        </binding>       
    </basicHttpBinding>
</bindings>

<services>
    <service name="XXX">
        <endpoint
            name="AAA"
            address=""
            binding="basicHttpBinding"
            bindingConfiguration="basicHttpBindingConfiguration"
            contract="YourContract" />
    </service>
<services>

Это позволит службе WCF с basicHttpBinding использовать HTTPS.

18
Szymon

Моя проблема была вызвана отсутствием привязок в IIS: Щелкните правой кнопкой мыши на сайте> изменить привязки> добавить> https

Выберите «Сертификат разработки IIS Express» и установите для порта значение 443 Затем я добавил еще одну привязку к веб-конфигурации:

<endpoint address="wsHttps" binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding" name="Your.bindingname" contract="Your.contract" />

Также добавлен в сервис Behaviours: <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />

И в конце концов это сработало, ни одно из решений, которые я проверял на stackoverflow для этой ошибки, не было применимо к моему конкретному сценарию, поэтому, в том числе здесь, на случай, если это поможет другим

8
JsonW

Вы можете получить это, только настроив https как привязку сайта внутри IIS. 

Вам нужно добавить http(80), а также https(443) - по крайней мере, я сделал :-)

6
Simon_Weaver

Я попробовал привязку в соответствии с ответом @Szymon, но у меня это не сработало. Я попытался basicHttpsBinding , который является новым в .net 4.5, и это решило проблему. Вот полная конфигурация, которая работает для меня. 

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpsBinding>
        <binding name="basicHttpsBindingForYourService">
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None"/>
          </security>
        </binding>
      </basicHttpsBinding>
    </bindings>
    <services>
      <service name="YourServiceName">
        <endpoint address="" binding="basicHttpsBinding" bindingName="basicHttpsBindingForYourService" contract="YourContract" />
      </service>
    </services>   
</system.serviceModel>

К вашему сведению: целевая структура моего приложения 4.5.1. На веб-сайте IIS, который я создал для развертывания этой службы wcf, включена только привязка https.

2
A P

Моя проблема также была вызвана отсутствием привязки https в IIS: Выбранный веб-сайт по умолчанию> В правой панели выберите Привязки> Добавить> https

Выберите «IIS Express Development Certificate» и установите порт на 443

1
Mandi

В моем случае имя привязки в соответствии с протоколом сопоставления не совпадает с именем привязки на конечной точке. Они соответствуют в примере ниже.

<endpoint address="" binding="basicHttpsBinding" contract="serviceName" />

а также

    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
0
housten

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

тип: https

IP-адрес: все неназначенные

порт № 443

Сертификат SSL: WMSVC

затем

Нажмите и перезапустите IIS

Готово

0
Prabaldeep Gupta