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 端点。