2

ファイル名を含む JSON メッセージと base64 でエンコードされたイメージを WCF サービスに送信しています。それを画像に変換する方法、より具体的には戻りストリームを逆シリアル化する方法についてはよくわかりません。

WCF インターフェイス

 [OperationContract]
        [WebInvoke(
            Method = "POST",
            UriTemplate = "/UploadImage", ResponseFormat =  WebMessageFormat.Json,
            RequestFormat =  WebMessageFormat.Json)]
        string UploadImage(Stream image);

メッセージの一部 (ファイルに保存して、表示して理解しようとすることができます)

--hr56lXG6Q_hKg5opmTx4xejr28dU17AC
Content-Disposition: form-data; name="entity"

{"filename":"mypicture.jpg","thebigfile":"\/9j\/4Re6RXhpZgAATU0AKgAAAAgACwEPAAIAAAAOAAAAkgEQAAIAAAAGAAAAoAESAAMAAAABAAYAAAEaAAUAAAABAAAApgEbAAUAAAABAAAArgEoAAMAAAABAAIAAAExAAIAAAATAAAAtgEyAAIAAAAUAAAAygITAAMAAAABAAEAAIdpAAQAAAABAAAA3oglAAQAAAABAAACegAAAoBTb255IEVyaWNzc29uAExUMjZpAAAAAEgAAAABAAAASAAAAAE2LjEuQS4yLjQ1XzUzX2YxMDAApDIwMTI6MTA6MDYgMDk6MzI6MTcAABiCmgAF
        and lots more of the base64 encoded image....
        --hr56lXG6Q_hKg5opmTx4xejr28dU17AC--

これを逆シリアル化するにはどうすればよいですか? ストリームは行くべき道ですか?一番上の行を削除してから JSON 配列の逆シリアル化を開始するだけではなく、なぜこのように見えるのかを知りたいです。

4

1 に答える 1

3

与えられたメッセージを処理するには、OperationContract を次のようにする必要があります。

[WebInvoke(Method="POST", UriTemplate="/UploadImage", BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat=WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json)] [OperationContract] 文字列 UploadImage(文字列ファイル名, 文字列 thebigfile);

詳細については、 http://msdn.microsoft.com/en-us/library/bb885100.aspxを参照してください。

次に、.NET Framework によって提供されるデコーダーを使用して、"thebigfile" パラメーターを手動で Base64 デコードする必要があります。私の知る限り、JSON 内に Base64 の組み込みサポートはありません。さまざまなデータ型のサポート方法の詳細については、 http://msdn.microsoft.com/en-us/library/bb412170.aspxを参照してください。

于 2012-10-06T18:30:03.123 に答える