用于支持 HTTP 和 HTTPS 的 WebHttpBinding(Restful) 的 WCF 配置

Posted

技术标签:

【中文标题】用于支持 HTTP 和 HTTPS 的 WebHttpBinding(Restful) 的 WCF 配置【英文标题】:WCF configuration for WebHttpBinding(Restful) for supporting both HTTP and HTTPS 【发布时间】:2011-03-05 05:07:36 【问题描述】:

我们将 AJAX 级联下拉菜单和自动完成功能与提供数据的 Restful WebService 服务一起使用。使用一个端点(非安全)一切工作正常,直到我们使用 https 尝试相同的网页。我们的 Webappplication 需要同时支持这两者。在关于这个问题的极少数文章/博客中,我发现 2 篇适用于我的要求。

    http://blog.abstractlabs.net/2009/02/ajax-wcf-services-and-httphttps.html http://www.mydotnetworld.com/post/2008/10/18/Use-a-WCF-Service-with-HTTP-and-HTTPS-in-C.aspx

我遵循相同的模式,添加了 2 个端点,假设 WCF 将拾取适当的端点来查看 HTTP 或 HTTPS 协议。在我的开发机器 (XP-IIS5) 和 1 Server 2003R2(IIS6) 中工作就像一个魅力,但在生产服务器 2003-IIS6 中工作。 IIS 中的网站完全相同(包括权限等)。 它抛出的错误 - 错误 500(找不到与绑定 WebHttpBinding 的端点的方案 https 匹配的基地址。注册的基地址方案是 [http]..)

这是示例配置(忽略错别字)

<system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="SecureBinding">
          <security mode="Transport"/>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="SearchServiceAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <services>
      <service name="SearchService">
        <endpoint address="" behaviorConfiguration="SearchServiceAspNetAjaxBehavior"
            binding="webHttpBinding" contract="SearchServiceContract" />
       <endpoint address="" behaviorConfiguration="SearchServiceAspNetAjaxBehavior"
            binding="webHttpBinding" bindingConfiguration="SecureBinding" contract="SearchServiceContract" />
      </service>
    </services>
  </system.serviceModel>

非常感谢您对此的任何帮助?

谢谢 KSS

【问题讨论】:

您找到解决方案了吗? 【参考方案1】:

我在我的服务中使用了几乎相同的配置,尽管我的端点行为引用了&lt;webHttp /&gt; 而不是&lt;enableWebScript /&gt;。您提到您的服务器是相同的,但无论如何,您是否尝试过在受影响服务器上的其他地方测试 SSL 流量?

【讨论】:

感谢您的回复。我还没用过 ,你觉得它可以有所作为吗?无论如何,我今天都会尝试。受影响服务器的 SSL 流量看起来适合其他功能。否则,是否有人认为这种方法有任何问题?仅借助某些 WCF 配置,是否可以让您的 Rest Webservice(webhhtpbinding) 同时为 http 和 https 工作?或者我必须以编程方式进行(比如确定调用是 http 还是 https 并使用适当的绑定)?

以上是关于用于支持 HTTP 和 HTTPS 的 WebHttpBinding(Restful) 的 WCF 配置的主要内容,如果未能解决你的问题,请参考以下文章

如何向 Delphi WinSock HTTP 上传应用程序添加 HTTPS 支持?

Qt 之 使用 https发送 HTTP请求(使用OPENSSL库)

代理中的 https 和 http 隧道方法是啥?

用于支持默认链接和带数字符号 (#) 的链接的正则表达式 [重复]

HTTP 之 curl和elinks工具介绍

https和http的区别