我正在尝试在IIS中的单独网站上托管WCF Web服务,并将444位的https作为唯一绑定。
以下配置在我同时使用绑定(http(80)/ https(443))的网站中使用时效果很好。如果我删除http绑定,它会开始抛出以下错误。
无法使用绑定BasicHttpBinding找到与端点的方案http匹配的基址。已注册的基地址方案为[https]。
如何在仅使用https绑定的IIS网站中使其工作?
<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>
答案 0 :(得分:18)
您的配置应该与此类似。您可能需要更改<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>
这将允许basicHttpBinding
的WCF服务使用HTTPS。
答案 1 :(得分:8)
我的问题是由IIS中缺少绑定引起的: 右键点击网站&gt;编辑绑定&gt;添加&gt; HTTPS
选择“IIS Express开发证书”#39;并将端口设置为443 然后我添加了另一个绑定到webconfig:
<endpoint address="wsHttps" binding="wsHttpBinding" bindingConfiguration="DefaultWsHttpBinding" name="Your.bindingname" contract="Your.contract" />
还添加到serviceBehaviours:
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
最终它起作用了,我在stackoverflow上检查此错误的解决方案都没有适用于我的特定场景,因此包括在这里以防万一
答案 2 :(得分:6)
如果仅将https
配置为IIS中的站点绑定,则可以获得此项。
您需要添加http(80)
以及https(443)
- 至少我做了: - )
答案 3 :(得分:2)
我根据@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。我为部署此wcf服务而创建的IIS网站仅启用了https绑定。
答案 4 :(得分:1)
我的问题也是由于IIS中缺少https绑定引起的: 选择的默认网站&gt;在最右边的窗格中选择Bindings&gt;添加&gt; HTTPS
选择“IIS Express开发证书”#39;并将端口设置为443
答案 5 :(得分:1)
答案 6 :(得分:0)
在我的情况下,协议映射下的绑定名称与端点上的绑定名称不匹配。它们在下面的示例中匹配。
<endpoint address="" binding="basicHttpsBinding" contract="serviceName" />
和
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
答案 7 :(得分:0)
打开IIS,然后右键单击“默认应用程序池”,然后单击“添加绑定”以使应用程序可以使用HTTPS协议。
类型:https
IP地址:全部未分配
端口号:443
SSL证书:WMSVC
然后
单击并重新启动IIS
完成