Миграция с Flex 3 на Flex 4.5: проблема с сетевым форматом - PullRequest
3 голосов
/ 03 июня 2011

В настоящее время я перевожу большой проект с Flex 3 на Flex 4.5.Проблема, на которой я застрял, заключается в сетевом взаимодействии: мы используем собственный протокол, который мы встраиваем в AMF3, но кажется, что сообщения, отправленные flash.net.NetConnection, не читаются.

Наша Java назад-end использует некоторые классы BlazeDS для десериализации сообщения, а именно flex.messaging.io.amf.AmfMessageDeserializer.AmfMessageDeserializer, и я могу отслеживать сетевой трафик с помощью Charles Web Proxy, который декодирует AMF3.Очень простой код ниже отправляет сообщение, которое может быть декодировано Чарльзом при компиляции во Flex 3.5, но не во Flex 4.5 (я получаю сообщение «Не удалось проанализировать данные (com.xk72.amf.AMFException: Неподдерживаемый тип пакета AMF3 17 при 26»).).

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");
}

Я настроил сервер apache на localhost: 80, чтобы проверить это.

Кто-нибудь использовал NetConnection в Flex 4.5 и сталкивался с проблемами десериализации? Как вы их решали??

Спасибо,

Даниил

Ответы [ 2 ]

3 голосов
/ 03 июня 2011

AMF3 имеет несколько разных типов ядер, которые он может сериализовать. Один из этих основных типов является новым для AMF3 в прошлом году или два, Словарь, и у него есть «тип пакета» 17, таким образом, сообщение об ошибке. Я не уверен, почему Flex 3 сериализует его как что-то отличное от словаря, а Flex 4.5 сериализует его как новый тип словаря, но вы получаете ошибку, потому что ваш бэкэнд BlazeDS не поддерживает новый тип словаря.

Решение состоит в том, чтобы либо выяснить, что он отправлял, как в Flex 3, и переключиться на него, либо обновить BlazeDS (кажется, в прошлом году был добавлен патч для BlazeDS для словаря http://forums.adobe.com/thread/684487).

edit: Не понял, что ошибка была с Чарльзом. Чарльз, вероятно, не добавил поддержку словаря, так как он не является частью задокументированных спецификаций AMF3. Вы пробовали бета-версию Чарльза?

0 голосов
/ 03 июня 2011

Поскольку вы работаете с устаревшим кодом, вам может потребоваться установить свойство NetConnection objectEncoding вручную, прежде чем устанавливать соединение.Вы можете установить objectEncoding для соединения с помощью класса ObjectEncoding .

Какую версию Flash Player вы используете?

...