连接到Web服务错误连接失败:状态代码不可用:

时间:2013-06-05 07:31:58

标签: coldfusion

我们正在进行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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

嗯......首先看来很奇怪的是你的IP论证,正如barnyr所提到的那样。你得到的回应让我觉得你得到 NO 响应(请求被完全忽略,而不仅仅是错误)。因此,某些设置会导致他们忽略您的请求。

从CF9开始,当我无法使用常规的webservice java对象代理存根时,我使用cfscript通过HTTP来做这种事情。

这是一个通过http()工作的SOAP调用(因为.net无法通过普通的肥皂来传递复杂的对象哈希映射,除此之外)。

这是一个cf.net服务调用,所以它可能与你相关,因为他们只使用内置工具来生成他们的SOAP服务,这不是完美的Axis 1 SOAP happy-go-lucky。 特别是我必须使用一些额外的设置和标题才能获得它,并且特别是将soap动作添加到标题中(通常从SOAP正文包络中派生)。

此外,我正在使用绿洲安全,我不得不填写信封/正文。

以下是您可能会根据需要尝试更新的代码(在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相结合来验证最终的肥皂体帖子是否有效。所以,如果你也可以这样做,你应该可以使用这个载体。

如果你再进一步,请告诉我。

答案 2 :(得分:0)

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

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

  • 检查目标服务器的证书是否已安装在JVM中 信托商店。在Windows中,我认为.Net是系统自己的.Net 使用证书存储区,因此如果您的浏览器可以访问该URL 你没事。在Java中,有一个包含Trusted列表的文件 证书。有关导入这些证书的说明,请参见CF docs for CFHTTP

  • 检查ColdFusion日志是否有失败的迹象。 c:\ coldfusion9 \ logs \ exception.log可能是一个很好的起点。

答案 3 :(得分:0)

确保您的cfhttp链接正确无误。我面对这个问题,它完全基于错误的cfhttp链接。