Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何从WCF REST服务返回包含二进制数据的结构?_.net_Wcf_Web Services_Rest - Fatal编程技术网

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

.net 如何从WCF REST服务返回包含二进制数据的结构?,.net,wcf,web-services,rest,.net,Wcf,Web Services,Rest,我必须实现以下场景: 客户端向WCF REST服务发送请求,该服务提供一组参数和一个要处理的二进制文件 该服务获取该文件,对其进行处理并生成一个结果二进制文件 服务必须返回一些结构,其中包含“成功/失败”处理状态、错误消息(如果有),如果没有错误,则返回结果文件 在SOAP服务中,我只返回如下内容: class ProcessingResult { public: bool IsFailed; string ErrorMessage; byte[] ResultDat

我必须实现以下场景:

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

class ProcessingResult {
public:
    bool IsFailed;
    string ErrorMessage;
    byte[] ResultData;
};
中间件将通过连接正确地序列化它,然后客户机代理(通过解析WSDL生成)将对其进行反序列化,客户机将很高兴


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

您可以在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>
QmFzZSA2NCBTdHJlYW0=
响应消息的示例:

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

字符串内容
真的
QmFzZSA2NCBTdHJlYW0=

你为什么重新发布你的问题:而不是修改原来的问题?@Ladislav Mrnka:那是另一个问题。我需要适当地设计数据类型,而不是如何实现该请求的一般性想法。这非常好,谢谢。WCF服务是否也会公开xml模式?@sharptooth:WCF服务仅为SOAP服务公开描述(WSDL+模式)。在WCF 4.0中,您可以使用新的帮助页面功能,通过消息示例显示REST服务的一些描述(我在回答中发布的示例来自帮助页面)。