私はC#SOAP Webserviceを使用していますが、これを使用して画像をActionscript(私はAdobe Airを使用しています)に送信しようとしています。私はこのバイナリデータを2つの方法で返すことができます。つまり、C#側のStringまたはbyte []を返します。両方とも同じ結果を返します(文字列の周りには ""があります)。 Flash Builderで操作をテストすると、まったく同じStringが取得されます。Flashbuilder 4.5、Actionscript 3、WSDL:受信した文字列/文字列をエンコードする際の奇妙な結果
しかし、この文字列をBinary64Dataにエンコードしようとすると、これは正式にxmlの記述にありますが、私は奇妙な結果を得ます。どちらの文字列も同じである必要がありますが、コード化されたStringの後半は異なります。最終的に、私は自分のイメージを作成するために使用できるByteArrayを取得したいと思います。これはStringバージョンでは完全に機能しますが、もう片方のバージョンでは半分に破損した(しかし認識可能な)イメージが返されます。
私の問題は何ですか?私はByteArrayのを返さなければならないWebサービスメソッドをしようとすると
// 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
:しかしここでは、文字列を使用しているとき、私のコードは、ある
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
私が間違っているの何かがあるのでしょうか?好ましくは、私は、全体のエンコード/デコードをスキップし、単にWebサービスの呼び出しが最初の場所に戻ることになっているのByteArrayを使用したいだろうが、私はそのようにキャストしようとすると:
var data:ByteArray = getBinaryData() as ByteArray;
データがゼロになります。この同じデータは上記のシーケンスで変換することができるので、データは空ではありません。
問題を解決するにはどうすればよいですか?繰り返しますが、Flash Builderでは、テスト操作機能を使用して、ByteArray Webサービス呼び出しとしてのStringは両方とも同じ値を返しますが、Actionscript 3では自分の値が分岐するだけです。
私は、getBinaryData()のコードを見て、具体的にはURLRequestを実行するのに役立つと思います。 URLLoader.dataFormat = URLLoaderDataFormat.BINARYを指定していますか? – Cay
どこにもURLRequestはありません.getBinaryDataは、イベントハンドラ内の非同期トークンからresultstringを返します。そして、データは正しいデータです。ちょうどその半分の文字列は、全く別のデータになります。 – KnowsLittle
私は、あなたがサービスコールを呼び出す方法と、サーバ側で何が起こるか、特にサービスがどのように結果を形成しているかについて、より多くの情報を与えるべきだと思います。 ByteArrayにデータをキャストできないという事実は、非常に良い手がかりです。 –