2011-09-05 9 views
1

私は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では自分の値が分岐するだけです。

+0

私は、getBinaryData()のコードを見て、具体的にはURLRequestを実行するのに役立つと思います。 URLLoader.dataFormat = URLLoaderDataFormat.BINARYを指定していますか? – Cay

+0

どこにもURLRequestはありません.getBinaryDataは、イベントハンドラ内の非同期トークンからresultstringを返します。そして、データは正しいデータです。ちょうどその半分の文字列は、全く別のデータになります。 – KnowsLittle

+0

私は、あなたがサービスコールを呼び出す方法と、サーバ側で何が起こるか、特にサービスがどのように結果を形成しているかについて、より多くの情報を与えるべきだと思います。 ByteArrayにデータをキャストできないという事実は、非常に良い手がかりです。 –

答えて

0

オブジェクトをByteArrayに変換する場合は、convertObject()メソッドを呼び出す必要があります。 試してみてください:

var data:ByteArray = new ByteArray(); 
data.convertObject(getBinaryData()); 
関連する問題