【问题标题】:Uploading files in WCF services approaches在 WCF 服务方法中上传文件
【发布时间】:2009-08-19 20:23:01
【问题描述】:

我有可以上传文件的 WCF 服务。

XElement upload = service.UploadFiles(id, File.ReadAllBytes(filePath));

这可行,但我只是想知道当您有许多(大约一千个)小文件(15~20K)时,这是否是逐个上传它们的最佳方式。如何我们可以比较“Chunky”和“Chatty”的方法吗?

1) 最好将它们分别发送,还是将它们全部压缩到一个文件中以节省确认每个文件的延迟时间。

2) 话虽如此,我需要增加数组的最大大小或其他设置,因为我想将它们全部压缩在一起。这是推荐的吗?因为我读到,与发送一个大文件和最后一个确认相比,每个人的确认可能更昂贵

谢谢,

【问题讨论】:

    标签: c# xml wcf performance


    【解决方案1】:

    您似乎知道,您通常会希望您的服务“笨拙”而不是“健谈”。您的具体情况的答案将取决于:

    • 所有文件的总和有多大。
    • 您是否以及如何使用您当前获得的确认。如果您需要在上传每个文件时更新用户界面,如果一次性发送所有文件,您会发现很难保持详细程度。
    • 您需要哪种类型的可靠性/可重试性。现在,如果您的服务或连接中断,您可以简单地重新发送未发送的文件。如果将所有文件批处理在一起,则必须重新开始,这可能是也可能不是大问题。

    如果可以,您可能希望查看对使用 WCF 发送 Streams 的支持:

    通过发送 Stream,您可以获得压缩整批文件的大小优势,同时仍保留了解上传进度的能力。

    我不确定关于增加最大消息大小的任何具体问题,除了它对内存使用的影响。最后,我想说的是,无论您是否将它们全部一起发送,您都应该压缩这些文件。

    【讨论】:

    • @Akmad,感谢您的完整回复。通过查看您在 msdn 中提供的链接,它提到跨流传输发生的操作最多可以与一个输入或输出参数签订合同。这是否意味着我必须将它们全部设置在一个对象中并将其流式传输到服务器?
    • 总大小约为 12MB 的文件需要上传到服务器中,无需任何处理,我们不需要在 UI 中更新任何内容。
    • 您在传递流时只能使用单个参数是正确的,但是您可以通过在消息类型字段上使用 [MessageHeader(MustUnderstand = true)] 属性来解决这个问题。有关示例,请参见 kjellsj.blogspot.com/2007/02/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2020-12-14
    • 2012-02-05
    • 2011-11-12
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多