【问题标题】:Returning multiple files in a stream in WCF在 WCF 中的流中返回多个文件
【发布时间】:2012-01-08 22:42:49
【问题描述】:

我有一个计划,我需要在 WCF 应用程序中获取文档并将它们转换为图像。当通过流传递诸如word文档之类的文件时,我将获得该文档的多个图像,即文档中的每一页都有一个图像。

当我想将这些多张图片返回给客户端时。通过流返回所有这些文件的好方法是什么?我还需要告诉客户文件的名称是什么以及我要返回多少个文件,有什么好的方法吗?

这是我第一次使用 WCF/Web 服务。

我还需要考虑转换需要多长时间,如果转换时间过长或创建的图像过多,我需要返回错误。使用 SOAP 错误是告诉客户的好方法吗?

我是否只是制作一个 byes 数组并将该数组返回给客户端?还是我将所有图像合并到一个流中并返回它?如果流的大小太大(即超过 2 MB),传输文件不会有问题(慢)吗?

【问题讨论】:

  • 如果您担心使用 WCF 传输的数据量,请查看这篇有趣的文章:msdn.microsoft.com/en-us/library/ms733742.aspx
  • 另外,让这个服务通用的好方法是什么? Java和其他语言客户端可以调用这个Web方法并接收相同的文件流吗?

标签: c# .net wcf web-services stream


【解决方案1】:

您可以传输任何大小的流,并且您应该直接编写流。要将多个文件合并到一个流中,我认为最简单的方法是创建一个包含所有内容的 zip 文件并将其发送。

您的方法签名应该简单地返回一个 WCF 将直接发送到底层绑定的 Stream。您可以使用哪些绑定有一些限制,但 WebHttpBinding 支持它。

【讨论】:

  • 客户端如何将文件从那个流中分离出来?没有拉链可以做到吗?我还需要让客户知道交易 ID 和文件的名称。
  • 那么你可能应该自己编写某种控制结构。您可以创建一个标头,包括流中的文件数以及每个流的名称和大小。为了避免纯二进制格式,您还可以选择返回 XML(仍在流中)并让文件内容为 base64 编码。对于大文件,虽然这很无聊,但您可以选择拆分为两种方法,一种方法返回控制数据,另一种方法返回每个单独文件的内容。
  • 拆分成两种方法是什么意思?那么客户端需要调用两个方法吗?一种用于获取流,一种用于获取 XML 信息?但是客户端如何从流中分离出所有图像?
  • 我认为合并流将不可避免地导致难以解释的二进制格式或一些难以构造的 XML。因此,我会创建一个方法,以 json 或 XML 格式返回一组文件标识符,并创建另一种方法,在给定标识符的情况下返回一个文件的内容。然后,客户端负责从方法 A 获取标识符,并为每个文件调用方法 B。发出多个请求会导致一些开销,但为了避免本地复杂的文件格式,这可能是可以接受的。
  • 抱歉延迟回复,所以我正在设计它,以便我将以一种方法返回一个 XML 文件,其中包含流中的文件数和每个文件的大小。将调用另一种方法来从服务中获取流。那是你说的吗?谢谢您的反馈!所以你知道如果我的应用程序在 WCF 中并且客户端在 EJB/Java 中,这将如何工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 2017-08-06
  • 1970-01-01
相关资源
最近更新 更多