【问题标题】:How do I return a struct containing binary data from a WCF REST service?如何从 WCF REST 服务返回包含二进制数据的结构?
【发布时间】:2011-01-20 05:49:05
【问题描述】:

我必须实现以下场景:

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

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

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

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

如何在 WCF REST 服务中设计类似的东西?

【问题讨论】:

  • 你为什么转发你的问题:stackoverflow.com/questions/4711811/…而不是修改原来的问题?
  • @Ladislav Mrnka:这是另一个问题。我需要适当地设计数据类型,而不是大致了解如何实现该请求。

标签: .net wcf web-services rest


【解决方案1】:

您可以在 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>

【讨论】:

  • 这很好用,谢谢。 WCF 服务是否也会公开 xml 架构?
  • @sharptooth:WCF 服务仅公开 SOAP 服务的描述(WSDL + 架构)。在 WCF 4.0 中,您可以使用新的帮助页面功能来显示带有消息示例的 REST 服务的一些描述(我在答案中发布的示例来自帮助页面)。
猜你喜欢
  • 2015-07-24
  • 2013-04-09
  • 2014-01-03
  • 2013-04-08
  • 1970-01-01
  • 2016-06-17
  • 2011-03-12
  • 2010-11-13
  • 1970-01-01
相关资源
最近更新 更多