具有 http 和 https 绑定的 WCF Rest 服务

WCF Rest Service with both http and https bindings

我正在尝试创建一个可以同时接受 http 和 https 流量的休息服务。这样做的原因是我的公司为我们的客户提供托管和非托管解决方案。在托管解决方案中,所有流量都通过 F5,该 F5 去除 SSL 并以常规 http 将其转发到我们的服务器。

非托管解决方案让其 Web 服务器处理 SSL(因此,服务器需要 https 安全性)。

绑定最初是这样定义的:

<webHttpBinding>
    <binding closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="64" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      <security mode="None">
      </security>
    </binding>
  </webHttpBinding>

但是,这对我们的非托管客户不起作用。然后我把它改成了这个

   <webHttpBinding>
    <binding closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="64" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      <security mode="Transport">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
      </security>
    </binding>
  </webHttpBinding>

但是,您可以猜到,这对我们的托管客户不起作用。

是否可以让使用 .NET 4.0 框架的 WCF 休息服务同时接受 http 和 https 流量?

我试过这个:

      <webHttpBinding>
    <binding name="normalRestBinding" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="64" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
      </security>
    </binding>
    <binding name="secureRestBinding" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="64" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      <security mode="Transport">
        <transport clientCredentialType="None" proxyCredentialType="None"
          realm="" />
      </security>
    </binding>
  </webHttpBinding>

使用此服务定义:

 <service name="theService" behaviorConfiguration="RestServiceBehavior">
    <endpoint name="normalRestEndpoint" address="" behaviorConfiguration="RestEndpoint" binding="webHttpBinding" bindingConfiguration="normalRestBinding" contract="theContract">
      <identity>
        <dns />
      </identity>
    </endpoint>
    <endpoint name="secureRestEndpoint" address="" behaviorConfiguration="RestEndpoint" binding="webHttpBinding" bindingConfiguration="secureRestBinding" contract="theContract">
      <identity>
        <dns />
      </identity>
    </endpoint>
  </service>

使用这些,我现在在尝试通过常规 http:

访问端点时遇到此错误

找不到与具有绑定 WebHttpBinding 的端点的方案 https 相匹配的基地址。注册基址方案为 [http].

如有任何帮助,我们将不胜感激。

谢谢!

能够解决这个问题。

我放在问题底部的代码很好。

为了解决该错误消息,我必须确保我尝试使用此 Web 配置的服务器上的 IIS 中存在 https 绑定。

很抱歉自行回答,但我不想让这个开放,有人浪费他们的时间试图为我回答!

谢谢!