2011-01-19 19 views
0

私は次のシナリオを実装する必要があります。WCF RESTサービスからバイナリデータを含む構造体を返すにはどうすればよいですか?

  • をクライアントサービスは、ファイルを取得し、それを処理し、生成し
  • を処理するためにパラメータのセットを提供するWCF RESTサービスとバイナリファイルにリクエストを送信しますその結果、バイナリファイル
  • サービスは「成功/失敗」処理状況、エラーメッセージがあればが含まれているいくつかの構造体を返す必要があり、エラーがない場合 - SOAPで結果ファイル

は、サービス私はちょうど戻っていた骨壷、次のようなもの:

class ProcessingResult { 
public: 
    bool IsFailed; 
    string ErrorMessage; 
    byte[] ResultData; 
}; 

とミドルウェアが正しく、ワイヤ上でこれをシリアル化でしょう、その後(WSDLを解析することによって生成された)クライアントプロキシは、それをデシリアライズなり、クライアントが幸せになります。

どのようにWCF RESTサービスで何か似たようなことをしたいのですか?

+0

は、なぜあなたは、あなたの質問を再投稿でした:http://stackoverflow.com/questions/4711811/how-do-i-upload- a-file-process-it-and-return-result-file-in-a-a-request-tを使用して、元のファイルを変更するのではなく、 –

+0

@Ladislav Mrnka:もう一つの質問です。私は適切にデータ型を設計する必要がありますが、その要求をどのように実装できるかという一般的な考え方ではありません。 – sharptooth

答えて

2

RESTサービスでも同じことができます。

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST")] 
    ProcessingResult ProcessData(byte[] data); 
} 

public class ProcessingResult 
{ 
    public bool IsFailed { get; set; } 
    public string ErrorMessage { get; set; } 
    public byte[] ResultData { get; set; } 
} 

すべてのバイト配列は、base64でエンコードされた文字列として送信されます。リクエスト・メッセージの例:応答メッセージの

<base64Binary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">QmFzZSA2NCBTdHJlYW0=</base64Binary> 

例:

<ProcessingResult xmlns="http://schemas.datacontract.org/2004/07/RestService"> 
    <ErrorMessage>String content</ErrorMessage> 
    <IsFailed>true</IsFailed> 
    <ResultData>QmFzZSA2NCBTdHJlYW0=</ResultData> 
</ProcessingResult> 
+0

これは素晴らしい作品です。ありがとうございます。 WCFサービスもxmlスキーマを公開しますか? – sharptooth

+0

@sharptooth:WCFサービスは、SOAPサービスについてのみ説明(WSDL +スキーマ)を公開します。 WCF 4.0では、新しいヘルプページ機能を使用して、メッセージサンプル(回答で投稿したサンプルはヘルプページからのものです)を含むRESTサービスの説明を表示できます。 –

関連する問題