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
В моем случае это решило проблему
- Перейдите в Свойства проекта, нажав F4 в названии проекта
- Установите SSLEnabled = true
Изображение свойств проекта