3

現在、大規模なプロジェクトをFlex3からFlex4.5に移行しています。私が立ち往生している問題はネットワーク通信です。AMF3に埋め込んだカスタムプロトコルを使用していますが、flash.net.NetConnectionによって送信されたメッセージを読み取ることができないようです。

JavaバックエンドはいくつかのBlazeDSクラスを使用してメッセージを逆シリアル化します。つまり、flex.messaging.io.amf.AmfMessageDeserializer.AmfMessageDeserializerであり、AMF3をデコードするCharlesWebProxyを使用してネットワークトラフィックを監視できます。以下の非常に単純なコードは、Flex 3.5でコンパイルするとCharlesがデコードできるが、Flex 4.5ではデコードできないメッセージを送信します(「データの解析に失敗しました(com.xk72.amf.AMFException:サポートされていないAMF3パケットタイプ17 at26」) )。

import mx.controls.Alert;

private function init():void
{
    var pdl : Dictionary = new Dictionary();

    var connection : NetConnection = new NetConnection();
    connection.connect("http://localhost");

    var responder : Responder = new Responder(result);
    connection.call("net", responder, pdl);
}

private function result(pdl : Object) : void {
    Alert.show("coucou", "hello");
}

これをテストするために、localhost:80にApacheサーバーをセットアップしました。

Flex 4.5でNetConnectionを使用していて、逆シリアル化の問題が発生した人はいますか?どのようにそれらを解決しましたか?

ありがとう、

ダニエル

4

2 に答える 2

3

AMF3には、シリアル化できるさまざまなコアタイプがあります。これらのコアタイプの1つであるDictionaryは、過去1〜2年でAMF3に新しく追加されたものであり、「パケットタイプ」は17であるため、エラーメッセージが表示されます。Flex 3がディクショナリ以外のものとしてシリアル化し、Flex 4.5が新しいディクショナリタイプとしてシリアル化する理由はわかりませんが、BlazeDSバックエンドが新しいディクショナリタイプをサポートしていないため、エラーが発生します。

解決策は、Flex 3のように送信されたものを把握してそれに切り替えるか、BlazeDSをアップグレードすることです(昨年、辞書http://forums.adobe.com/thread用にBlazeDSにパッチが追加されたようです)。 / 684487)。

編集:エラーがチャールズにあったことに気づいていませんでした。文書化されたAMF3仕様の一部ではないため、CharlesはおそらくDictionaryのサポートを追加していません。チャールズのベータ版を試しましたか?

于 2011-06-03T15:54:06.583 に答える
0

レガシーコードを使用しているため、接続を確立する前に、NetConnectionのobjectEncodingプロパティを手動で設定する必要がある場合があります。ObjectEncodingクラスを使用して、接続のobjectEncodingを設定できます。

どのバージョンのFlashPlayerを使用していますか?

于 2011-06-03T15:01:08.860 に答える