WCF - SOAP和REST上的Http和https

时间:2015-08-18 10:51:45

标签: c# wcf rest soap

我有一个网站需要能够创建http和https连接。我有IIS设置,因此它接受SOAP和REST请求的https,这是有效的。

我的问题是没有https的客户可以使用我的网站。如果他们没有,我删除了https:

的网站绑定

执行此操作后,我在访问站点时遇到以下异常:'无法找到与带有绑定的端点的scheme http匹配的基址'

我的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>

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您正在使用具有传输安全性(security mode="Transport")的绑定配置,但是您将IIS配置为不支持它。

如果从IIS中删除HTTPS,则必须从web.config中删除HTTPS端点。