我们正在进行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>
答案 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)
从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链接。