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>

Ответы

Ответ 1

Ваша конфигурация должна выглядеть примерно так. Возможно, вам придется изменить <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.

Ответ 2

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

Выберите "Сертификат развития IIS Express" и установите порт в 443 Затем я добавил еще одну привязку к webconfig:

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

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

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

Ответ 3

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

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

Ответ 4

Я попробовал привязку в соответствии с ответом @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>

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

Ответ 5

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

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

Ответ 6

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

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

а также

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

Ответ 7

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

тип: https

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

порт № 443

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

затем

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

Готово

Ответ 8

В моем случае это решило проблему

  1. Перейдите в Свойства проекта, нажав F4 в названии проекта
  2. Установите SSLEnabled = true

Изображение свойств проекта