Я использую 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 расходятся.