如何从WCF REST服务返回包含二进制数据的结构?

时间:2011-01-19 06:08:50

标签: .net wcf web-services rest

我必须实现以下场景:

  • 客户端向WCF REST服务发送请求,提供一组参数和一个要处理的二进制文件
  • 服务获取文件,处理文件并生成结果二进制文件
  • 服务必须返回一些包含“成功/失败”处理状态的结构,如果有错误消息,如果没有错误 - 结果文件

在SOAP服务中,我只返回如下内容:

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

并且中间件可以通过线路正确地序列化,然后客户端代理(通过解析WSDL生成)将反序列化它,客户端会很高兴。

如何在WCF REST服务中设计类似内容?

1 个答案:

答案 0 :(得分: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>