无法通过 HTTPS 显示 WCF REST 帮助页面

Posted

技术标签:

【中文标题】无法通过 HTTPS 显示 WCF REST 帮助页面【英文标题】:Unable to display WCF REST Help Page over HTTPS 【发布时间】:2014-01-28 21:33:10 【问题描述】:

我正在编写一个支持 SOAP 和 REST 的 WCF Web 服务。我还启用了 WCF REST 帮助页面,这对 Web 服务的使用者非常有用。由于我在 IIS 和 web.config(见下文)中启用了 SSL,因此我无法再获得 WCF REST 帮助页面。如果我访问 https://myHost/myWebService/help,我会收到 HTTP 404 错误。在启用 SSL 之前,我可以访问该页面。

下面是我的 web.config。有人可以帮我了解如何通过 HTTPS/SSL 启用 WCF REST 帮助页面吗?

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

    <services>
      <service name="MyNs.MyServiceWebserviceImpl" behaviorConfiguration="DefaultBehavior">
        <endpoint name="MyServiceRestEndpoint" address="" binding="webHttpBinding" behaviorConfiguration="MyServiceRestBehavior" contract="MyNs.IMyServiceWebservice" />
        <endpoint name="MyServiceSoapEndpoint" address="soap" binding="basicHttpBinding" bindingConfiguration="MyServiceSoapBinding" behaviorConfiguration="MyServiceSoapBehavior" contract="MyNs.IMyServiceWebservice"  />
        <endpoint name="MyServiceMexEndpoint" address="mex" binding="mexHttpsBinding" bindingConfiguration="" contract="IMetadataExchange" />
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
        </behavior>
      </serviceBehaviors>

      <endpointBehaviors>
        <behavior name="MyServiceRestBehavior">
          <webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json" automaticFormatSelectionEnabled="true" />
        </behavior>

        <behavior name="MyServiceSoapBehavior" />
      </endpointBehaviors>
    </behaviors>

    <bindings>
      <webHttpBinding>
        <binding name="MyServiceRestBinding">
          <security mode="Transport" />
        </binding>
      </webHttpBinding>

      <basicHttpBinding>
        <binding name="MyServiceSoapBinding">
          <security mode="Transport" />
        </binding>
      </basicHttpBinding>
    </bindings>

  </system.serviceModel>

</configuration>

【问题讨论】:

【参考方案1】:

serviceMetadata 元素的httpGetEnabledhttpsGetEnabled 属性控制对服务WSDL 文档的访问。对于基于 webHttpBinding 的端点,提供 WSDL 文档不适用,因为 WCF 提供了一个自动生成的帮助“网站”来记录服务。

使用webHttp 端点行为启用shown on this MSDN page. 的帮助站点

更新:因为我忽略了问题中的配置都准备好了建议......

似乎要获得多个绑定和 SSL 正常工作可能需要比显而易见的更多配置。这个MSDN forum question and answer 提供了更多细节。它使用称为standardEndpoint 的WCF 4.0 配置功能。答案还包含一个带有示例代码的 ZIP 文件。

【讨论】:

我已经启用了 webHttp helpPage 属性。使用 HTTPS,页面不会呈现。结果是 404。 对不起,在急于回答时没有注意到它:) 太好了,你所拥有的应该可以工作。如果您尝试使用 HTTP 访问帮助(端点仍为 SSL 配置),您会得到什么吗? HTTP 版本被阻止,因为 IIS 设置为需要 SSL。如果我禁用它,页面会返回。问题是我不想禁用 SSL,我需要它。 这种行为意味着 WCF 帮助配置是正确的 (duuh)。因此,要么 IIS 未能将请求传递给 WCF 服务并返回 404,要么 WCF 正在接收请求,但未将请求 URL 识别为有效,因此它返回 404。我建议启用 WCF tracing 以跟踪所有活动。首先,启用跟踪并尝试使用 HTTP 以确保 WCF 将跟踪帮助页面请求,然后启用 HTTPS 并运行跟踪。这要么是 IIS 中的问题,要么是 WCF 中的“功能”。

以上是关于无法通过 HTTPS 显示 WCF REST 帮助页面的主要内容,如果未能解决你的问题,请参考以下文章

在 WCF REST Web 服务上启用 HTTPS

Wcf Rest Service GET 方法无法显示 JSON 数据

Jquery 无法从 WCF REST 服务获得响应

WCF REST tcp 错误

RestSharp - 授权标头未涉及 WCF REST 服务

WCF REST 服务返回 405:jQuery AJAX GET 不允许的方法