【问题标题】:How do I upload a file, process it and return a result file in a single request to a REST WCF service?如何上传文件、处理文件并在单个请求中将结果文件返回给 REST WCF 服务?
【发布时间】:2011-01-17 09:49:17
【问题描述】:

我需要在 WCF 中实现的 REST 服务中实现以下场景:

  • 用户提交一个二进制文件和一组参数
  • 服务器使用文件,做一些巧妙的工作并生成二进制输出文件
  • 用户检索该二进制结果文件

从客户端的角度来看,所有这些都在一个操作中完成。

It's pretty easy in a non-REST service。我如何在 REST 服务中做到这一点?我从哪里开始?

【问题讨论】:

  • 您有什么类型的客户端应用程序?您如何使用服务?
  • @Ladislav Mrnka:我目前一无所有,我需要能够为尽可能多的平台编写客户端程序,因此解决方案必须尽可能具有互操作性。
  • 我在家里用发布和返回 byte[] 以及 Stream 进行了测试,它没有问题。
  • 您确定要寻找答案吗?我已经在 StackOverflow 上多次看到过这个问题。唯一棘手的部分是您需要启用 TransferMode Streamed 才能发送文件。
  • @Darrel Miller:问题是我目前处于对这个主题知之甚少并且不太了解什么是好的 REST 服务实现的阶段,所以我害怕选择致命的错误。所以我搜索了 SO,我认为我找不到 REST 服务的等效问题。

标签: .net wcf web-services rest


【解决方案1】:

棘手的部分是XMLHttpRequest 对象不支持文件上传。 所以常见的解决方法是使用 Flash 或其他插件来上传文件。或使用IFrame 上传文件。

有很多插件可以自动化这个过程,例如 http://jquery.malsup.com/form/#file-upload

服务器部分并不难。

您的Request 将有一个包含上传文件的Files 属性。保存文件,然后在响应中返回您想要的任何内容。

查看上述插件中处理客户端响应的示例。

【讨论】:

    【解决方案2】:

    由于您的链接问题不直接与通过 HTTP 进行流式传输有关,您当然可以在 REST 服务中发送字节数组。以下是服务合同示例:

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

    数据将作为 base64 编码字符串发送。发送消息示例:

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

    【讨论】:

      猜你喜欢
      • 2018-04-01
      • 2013-12-13
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 2018-03-12
      • 2010-09-08
      • 1970-01-01
      相关资源
      最近更新 更多