0

HTTP サービス オブジェクトを使用して、flex のメソッド内でサーブレット リクエストを作成しています。メソッドは、2 つのイベントによって並行して同時に呼び出されています。両方のリクエストがサーブレットに到達したことを確認できましたが、結果イベントに返されるのは 1 つだけです。また、この動作には一貫性がありません。httpservice を並行して呼び出すと、一部のリクエストが失われる可能性はありますか? 両方のリクエストがサーブレットに到達し、そこからデータが返されたことは確かです。特定の場合に結果イベントがトリガーされないというだけです。前もって感謝します。

問題をより適切に説明するコードを含めます。

以下の方法を見つけてください。以下のメソッド「callServlet」は、2 つの別々のイベントによって呼び出されています。

プライベート var httpObj:HTTPService=new HTTPService();

プライベート関数 callServlet(text:String):void{

        Alert.show(text);
        httpObj = new HTTPService();
        httpObj.url=<servlet URL>;
        httpObj.method="POST";
        httpObj.resultFormat="xml";
        httpObj.contentType="application/xml";
        var requestString:String=text;
        httpObj.request=requestString;
        httpObj.addEventListener(ResultEvent.RESULT,onResultMethods);
        httpObj.addEventListener(FaultEvent.FAULT,onFaultMethod);
        httpObj.send();

    }

メソッドを呼び出すたびに、異なる「テキスト」変数を渡します。アラートに送信された 2 つの異なるテキストが表示されていることがわかります。前述のように、両方の要求がサーブレットに到達し、応答がサーブレットから送信されます。ただし、結果イベント「onResultMethod」は一度だけ呼び出されます。「faultonFaultMethod」も呼び出されません。

4

2 に答える 2

0

助けてくれてありがとう。答えが正しいとは保証できませんが、問題があると思います。上記のメソッドは、2 つのイベントによって 2 回呼び出されます。httpOject 変数は、メソッド callServlet に対してグローバルなプライベート変数です。このメソッドで作成されたリスナーは、結果および障害ハンドラー メソッドで削除されています (これは上記のコードには示されていません)。したがって、複数のイベントがメソッドを同時に呼び出すと、グローバル変数 httpObj が両方のイベントによって変更される可能性があるため、両方のイベントが同じ httpservice オブジェクトを使用してサーブレット呼び出しになる可能性があると思います。最初の呼び出しがresulthandlerに戻ると、2番目の結果がresulthandlerメソッドに到達しないため、resulthandlerのリスナーを削除しています。

これは私の仮定であり、今のところこれ以上の解決策はありません。誰かがより良い説明を思いついたら教えてください。

于 2013-09-08T05:31:36.987 に答える
0

はい、以前にこの問題を見たことがあります。フレックスから複数のリクエストを行っている場合、そのうちのいくつかが失われます。これは 3.0 回に戻りました。ブラウザーには、http 呼び出しの数を停止する方法があり、一度に最大 2 つの呼び出しを許可できます (ブラウザーによって異なります)。要求を次々にチェーンするか、呼び出しを管理するシングルトンを使用することができます。

于 2013-09-04T20:55:17.467 に答える