【问题标题】:Coldfusion REST API returning 'connection failure. status code unavailable.' when called remotelyColdfusion REST API 返回“连接失败”。状态码不可用。远程调用时
【发布时间】:2010-10-13 10:04:15
【问题描述】:

现在我想在前面加上我不确定这是应该在这里还是服务器故障,所以我先在这里发布。

我们正在 Coldfusion 9 中开发一个 REST API,该 API 托管在 IIS 7 上,用于在某些调用中必须调用另一个内部 Web 服务的客户端。从托管 API 的服务器进行这些调用时,没有错误,但是当我们从远程计算机进行调用时,将返回以下消息:

'连接失败。状态码不可用。'

我已经用谷歌搜索了以下建议作为修复的问题http://www.talkingtree.com/blog/index.cfm/2004/7/28/20040729,但它对我不起作用。以下是我自己测试的笔记:

  • 导致问题的调用混合了 get、put、post 和 delete。
  • 每个调用的唯一共同部分是与同一个 Web 服务进行通信。
  • 我可以直接从远程调用 API 的地方调用 Web 服务。
  • 虽然所有调用都调用同一个 Web 服务,但它们并不都调用同一个 Web 服务。

【问题讨论】:

    标签: web-services rest coldfusion coldfusion-9


    【解决方案1】:

    想法:

    使用解析为内部 ColdFusion 服务器的 URL(例如 http://[servername]:8300)远程调用 Web 服务。您可能需要进行一些配置才能使其正常工作。这样做的原因是要确定 IIS 或 ColdFusion 是否是根本原因。如果您可以远程访问内部服务器,那么 IIS 可能就是问题所在。

    Web 服务调用是否通过 SSL?如果是这样,远程调用者也是 ColdFusion 吗?如果您的回答都是“是”,请检查远程调用者的 JVM 是否信任 SSL 证书。如果没有,您需要将其注册为 JVM 密钥库的一部分。

    你能从调用者 ping 主机服务器吗?如果没有,调用者是否需要“主机”条目?

    如果在您的主机上启用,请查看 .NET 过滤器以及它如何与 HTTP 调用交互。我遇到过一种情况,因为 .NET 过滤器拦截了请求,所以我无法访问名为“/bin”的文件夹。

    【讨论】:

    • Web 服务可以从托管 API 的机器上 ping 通。呼叫未通过 SSL,并且未启用 .Net 过滤器。尚未使用内部 CF 服务器进行检查。
    • 在重新阅读了您所写的内容后,据我了解,您已经让一个 REST API 触发另一个 HTTP 请求以访问同一服务器上的不同 REST API。虽然我知道您想解决为什么第二个 HTTP 请求不起作用,但我建议更好的解决方案是弄清楚如何调用进程中的某些内容(例如对象上的方法),而不是触发另一个 HTTP 请求。这将执行得更好,并且不会消耗专用于处理 HTTP 请求的线程。在过程中进行会显着更好地扩展。
    • 不幸的是,第二个 API 在不同的服务器上,所以我们必须通过 http 调用它。
    • 你能发布代码吗?此外,算法是否依赖于 CGI 范围变量,这取决于请求的来源而有所不同?这或许可以解释为什么它可以在本地工作,但不能在远程工作。
    • 感谢@orangepips 的帮助,检查 IIS 或 CF 是否是根本原因的建议有助于诊断问题。
    【解决方案2】:

    问题原来是每个调用都需要调用本身正在处理的基本身份验证,但是在 IIS 中已打开基本身份验证,这导致 IIS 拦截任何带有授权标头的请求。

    这会导致一个问题,因为 IIS 假定如果通过了身份验证,那么它适用于该计算机/域上的用户,并且会拒绝任何其他凭据(对系统有效)。当我们登录机器时它正在工作,因为它来自本地它不需要对用户进行身份验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多