Flashbuilder 4.5, Actionscript 3, WSDL: странный результат при кодировании полученного байта / строки - PullRequest
1 голос
/ 05 сентября 2011

Я использую C # Soap Webservice и пытаюсь отправить изображение в Actionscript (я использую Adobe Air). Я могу вернуть эти двоичные данные двумя способами, вернуть строку на стороне C # или байт []. Оба дают одинаковый результат (за исключением того, что строка имеет «» вокруг него). Когда я тестирую операцию в Flash Builder, я также получаю ту же самую строку.

Тем не менее, когда я пытаюсь закодировать эту строку в Binary64Data, что официально указано в описании xml, я получаю странный результат. Обе строки должны быть одинаковыми, но вторая половина закодированной строки отличается. В конце концов я хочу получить из него ByteArray, который я могу использовать для создания своего изображения. Это прекрасно работает с версией String, но другая версия возвращает полуразрушенное (но узнаваемое) изображение.

В чем может быть моя проблема? Вот мой код, когда используется строка:

// This works:
var data:String = getBinaryString(); // Returns the result from webservice call token.lastResult

// Remove the two quotes
data = data.substr(1);
data = data.substr(0, data.length-1); 

// Decode the base64 string
var dec : Base64Decoder  = new Base64Decoder();
dec.decode(data); 
imgByteArray = dec.toByteArray();

// Load the image:
loader = new Loader();
loader.loadBytes(bytes);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loaderCompleteHandler);

// in the event handler:
var bmp:Bitmap = Bitmap(loader.content);
// Some misc stuff, but eventually an image shows, the correct image

Но когда я пытаюсь метод веб-сервиса, который должен возвращать ByteArray:

var data = getBinaryData(); // returns the result from webservice again

var enc : Base64Encoder   = new Base64Encoder ();
enc.insertNewLines = false;
enc.encode(data);

var dataString:String = enc.flush(); // also tried toString(), same result

// This dataString should be eactly the same as the above datastring, 
// but for some reason, the second half of the string is entirely different, 
// while the first half is exactly the same

Есть ли что-то, что я делаю не так? Желательно, чтобы я пропустил всю кодировку / декодирование и просто использовал ByteArray, который должен возвращать вызов веб-службы, но когда я пытаюсь привести его так:

var data:ByteArray = getBinaryData() as ByteArray;

Данные становятся нулевыми. Эти же данные можно преобразовать с помощью вышеуказанной последовательности, поэтому данные не являются пустыми.

Как я могу решить мою проблему? Опять же, обратите внимание, что в Flash Builder с использованием средств тестовой операции обе строки, как и вызовы веб-службы ByteArray, возвращают одно и то же значение, только мои значения в ActionScript 3 расходятся.

1 Ответ

0 голосов
/ 08 сентября 2011

Если вы хотите преобразовать объект в ByteArray, вам нужно вызвать метод ByteArray convertObject ().Попробуйте это:

var data:ByteArray = new ByteArray();
data.convertObject(getBinaryData());
...