【问题标题】:WCF - Http and https on SOAP and RESTWCF - SOAP 和 REST 上的 Http 和 https
【发布时间】:2015-08-18 10:51:44
【问题描述】:

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

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

执行此操作后,访问该站点时出现以下异常:“找不到与具有绑定的端点的方案 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>

我做错了什么?

【问题讨论】:

  • “没有https的客户”是什么意思?
  • @GlenThomas 我正在开发的应用程序可以安装在不同的服务器上,有些客户没有 https 证书可以使用。
  • 我明白了。他们可以使用自签名证书。如果应用程序需要安全连接,那么总比没有好

标签: c# wcf rest soap


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。你知道是否有可能以某种方式配置我的 web.config,以便我可以保留当前设置但在 IIS 不允许 https 时禁用 basicHttpsBinding?
  • 您可以在代码中生成端点,而不是在 web.config 中指定它们。这可能是最好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
相关资源
最近更新 更多