0

cfhttphttps Web サービスに接続するための呼び出しを行っています。次のエラーが表示されます。

Connection Failure: Status code unavailable

Google で検索しましたが、解決策が見つかりませんでした。

運用サーバーから 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 の時点で、通常の Web サービス Java オブジェクト プロキシ スタブを使用できない場合、HTTP 経由でこのようなことを行うために cfscript を使用しています。

これは、http() を介した動作中の SOAP 呼び出しです (.net から cf への通常の SOAP を介して複雑なオブジェクト ハッシュ マップを通信できないため、特にこれに頼りました)。

これは .net サービス呼び出しへの cf であるため、組み込みツールのみを使用して SOAP サービスを生成しているため、関連性があるかもしれません。特に、追加の設定とヘッダーをいじって、ヘッダーに 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 を使用して、最終的な SOAP 本文の投稿が有効であることを確認することと組み合わされました。それで、それもできるなら、このベクトルを使えるはずです。

遠くまで来たら教えてください。

于 2013-06-05T23:43:14.040 に答える