WCF - SOAP 和 REST 上的 Http 和 https
WCF - Http and https on SOAP and REST
我有一个站点需要能够创建 http 和 https 连接。我有 IIS 设置,因此它在 SOAP 和 REST 请求上都接受 https,这有效。
我的问题是没有 https 的客户可以使用我的网站。如果他们没有,我会删除 https 的站点绑定:
执行此操作后,访问该站点时出现以下异常:'Could not find a base address that matches scheme http for the endpoint with binding'
我的 web.config 看起来像这样:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicHttpBinding" messageEncoding="Text">
</binding>
<binding name="basicHttpsBinding" messageEncoding="Text">
<security mode="Transport" />
</binding>
</basicHttpBinding>
<webHttpBinding>
<binding name="webHttpBinding">
</binding>
<binding name="webHttpsBinding">
<security mode="Transport" />
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="XXX.XXX">
<endpoint address="rest" behaviorConfiguration="RestBehavior" binding="webHttpBinding"
bindingConfiguration="webHttpBinding" contract="XXX.IXXX">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="rest" behaviorConfiguration="RestBehavior" binding="webHttpBinding"
bindingConfiguration="webHttpsBinding" contract="XXX.IXXX">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="" behaviorConfiguration="XXXBehavior" binding="basicHttpBinding"
bindingConfiguration="basicHttpBinding" contract="XXX.IXXX">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="" behaviorConfiguration="XXXBehavior" binding="basicHttpBinding"
bindingConfiguration="basicHttpsBinding" contract="XXX.IXXX">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" name="Mex" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="XXXBehavior">
<webHttp/>
</behavior>
<behavior name="RestBehavior">
<webHttp helpEnabled="true" defaultBodyStyle="Bare" defaultOutgoingResponseFormat="Json"
automaticFormatSelectionEnabled="false" faultExceptionEnabled="true" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
我做错了什么?
您正在使用具有传输安全性的绑定配置 (security mode="Transport"
),但是您将 IIS 配置为不支持它。
如果您从 IIS 中删除 HTTPS,则必须从 web.config 中删除您的 HTTPS 端点。
我有一个站点需要能够创建 http 和 https 连接。我有 IIS 设置,因此它在 SOAP 和 REST 请求上都接受 https,这有效。
我的问题是没有 https 的客户可以使用我的网站。如果他们没有,我会删除 https 的站点绑定:
我的 web.config 看起来像这样:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicHttpBinding" messageEncoding="Text">
</binding>
<binding name="basicHttpsBinding" messageEncoding="Text">
<security mode="Transport" />
</binding>
</basicHttpBinding>
<webHttpBinding>
<binding name="webHttpBinding">
</binding>
<binding name="webHttpsBinding">
<security mode="Transport" />
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="XXX.XXX">
<endpoint address="rest" behaviorConfiguration="RestBehavior" binding="webHttpBinding"
bindingConfiguration="webHttpBinding" contract="XXX.IXXX">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="rest" behaviorConfiguration="RestBehavior" binding="webHttpBinding"
bindingConfiguration="webHttpsBinding" contract="XXX.IXXX">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="" behaviorConfiguration="XXXBehavior" binding="basicHttpBinding"
bindingConfiguration="basicHttpBinding" contract="XXX.IXXX">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="" behaviorConfiguration="XXXBehavior" binding="basicHttpBinding"
bindingConfiguration="basicHttpsBinding" contract="XXX.IXXX">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" name="Mex" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="XXXBehavior">
<webHttp/>
</behavior>
<behavior name="RestBehavior">
<webHttp helpEnabled="true" defaultBodyStyle="Bare" defaultOutgoingResponseFormat="Json"
automaticFormatSelectionEnabled="false" faultExceptionEnabled="true" />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
我做错了什么?
您正在使用具有传输安全性的绑定配置 (security mode="Transport"
),但是您将 IIS 配置为不支持它。
如果您从 IIS 中删除 HTTPS,则必须从 web.config 中删除您的 HTTPS 端点。