0

我们正在cfhttp调用以连接到 https 网络服务。我们收到此错误:

Connection Failure: Status code unavailable

我搜索了谷歌,但没有找到解决方案。

从生产服务器,我可以访问 Web 服务 URL。

我是 .Net 开发人员,我不确定这项技术。

任何指针都会有所帮助。

这是我们用来建立连接的代码行:

<cfhttp url="#arguments.TheIP#" method="post" throwonerror="true" timeout="45">
    <cfhttpparam type="header" name="SOAPACTION" value="#arguments.TheHeader#">
    <cfhttpparam type="XML" value="#arguments.TheXML#">
</cfhttp>
4

4 回答 4

2

我已经多次遇到/解决了这个问题,希望下面的代码片段对你有用。我强烈建议学习它而不是简单地尝试它。

我把它放在我的 Application.cfc 中,但你也可以在 cfhttp 调用之前把它放在你的脚本中。

<!--- fix for HTTPS connection failures --->
<cfif NOT isDefined("Application.sslfix")>
    <cfset objSecurity = createObject("java", "java.security.Security") />
    <cfset objSecurity.removeProvider("JsafeJCE") />
    <cfset Application.sslfix = true />
</cfif>enter code here
于 2013-06-07T13:29:23.110 回答
1

嗯...首先看起来很奇怪的是 barnyr 提到的您的 IP 论点。您得到的响应让我认为您根本没有得到响应(请求被完全忽略,而不仅仅是错误)。因此,某些设置导致他们忽略您的请求。

从 CF9 开始,当我无法使用常规的 webservice java 对象代理存根时,我使用 cfscript 通过 HTTP 执行此类操作。

这是通过 http() 进行的有效 SOAP 调用(因为 .net 到 cf 无法通过常规肥皂通信复杂的对象哈希映射,我求助于此等)。

这是一个 cf 到 .net 服务调用,因此它可能与您相关,因为他们仅使用内置工具来生成他们的 SOAP 服务,而 Axis 1 SOAP 并不完美。特别是,我不得不使用一些额外的设置和标题来获得它,并专门将肥皂动作添加到标题中(通常来自 SOAP 主体信封)。

此外,我正在使用 oasis 安全性,我必须将其塞入信封/体内。

这是您可以根据需要尝试更新的代码(在 cfc 中):

        //////////////////////////////////////////////////////////////////////////
        // BUILD HTTP REQUEST
        //////////////////////////////////////////////////////////////////////////
        Local['SoapAction'] = "XYZ.Commercial.Mapping.ServiceContracts/IService/#Arguments.szMethodName#"; // THIS IS CASE SENSITIVE
        var oH = new Http();
        oH.setMethod('post');
        oH.setCharset('utf-8');
        oH.setUserAgent('Axis/1.2.1');
        oH.setTimeout(30);
        oH.setURL(Arguments.szURL);
        // INCLUDING THE SOAPACTION AS A HEADER IS SPECIFIC TO XYZ - USUALLY THE OPERATION IS DECIPHERED FROM THE ENVELOPE BODY TAGS - XYS REQUIRES THIS PATHING TO MATCH FOR THE SOAP ACTION HEADER VALUE
        oH.addParam(type="HEADER", name="SOAPAction", value='#Local.SoapAction#'); 
        oH.addParam(type="HEADER", name="Content-Type", value='text/xml');
        oH.addParam(type="body", value=Arguments.szBody);
        ///////////////////////////////////////////////////////////////////////////

        /////////////////////////////////////////////////////////////////////////////
        // EXECUTE HTTP
        Local['rsHttpSend']= oH.send();
        // SET RESULTS
        Local.nStatusCode = val(Local.rsHttpSend.getPrefix().StatusCode);
        Local.szResponse = Local.rsHttpSend.getPrefix().FileContent;
        Local.szHeader = Local.rsHttpSend.getPrefix().Header;
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

这种方法结合使用 SoapUI 来验证最终的肥皂正文帖子是否有效。所以如果你也能做到这一点,你应该能够使用这个向量。

如果你走得更远,请告诉我。

于 2013-06-05T23:43:14.040 回答
0

以下是要检查的事项列表:

  • URL 的变量是 TheIP。确保这实际上是一个格式正确的 URL,而不仅仅是一个 URL。

  • 检查目标服务器的证书是否安装在 JVM 的信任库中。在 Windows 和我认为 .Net 中,使用了系统自己的证书存储,所以如果您的浏览器可以访问该 URL,您就可以了。在 Java 中有一个包含受信任证书列表的文件。有关导入这些证书的说明在CFHTTP 的 CF 文档中

  • 检查 ColdFusion 日志以获取失败的证据。c:\coldfusion9\logs\exception.log 可能是一个不错的起点。

于 2013-06-05T10:04:13.073 回答
0

确保您的 cfhttp 链接正确。我面临这个问题,它完全基于不正确的 cfhttp 链接。

于 2017-08-28T16:53:13.357 回答