2009-08-19 86 views
2

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

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

这工作,但我只是想知道,如果它是一个上传他们每个人一个最好的方式当你有很多(约一千个)小文件(15〜20K)。我们如何才能比较“笨重”和“聊天”方法?

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

2)话虽如此,我需要增加数组的最大尺寸或其他设置,因为我想将它们压缩在一起。这是建议吗?因为我读了这个对每个人的确认可能比发送一个大文件和在末尾一个确认更昂贵?

感谢,

回答

2

你似乎知道,你通常需要你的服务是“矮胖”,而不是“健谈”。您的具体情况下的答案将取决于:

  • 所有文件的总量有多大。
  • 如何以及如何使用您当前正在收到的确认。如果您需要更新用户界面,每个文件都会上传,如果您一次发送所有文件,则会发现难以保持细节。
  • 您需要什么类型的可靠性/可重试性。现在,如果您的服务或连接中断,您可以简单地重新发送未发送的文件。如果您将所有文件批量整合在一起,则必须重新开始,这可能是也可能不是一个大问题。

如果可以的话,你可能想看看支持与WCF发送流:

通过发送你的大小好处流压缩整批文件,同时仍然保留在上传过程中了解进度的能力。

我不确定有关增加最大邮件大小的任何特定问题,超出其对内存使用的影响。最后,我会说你应该压缩这些文件,不管你是否一起发送它们。

+0

@Akmad,感谢您的完整回复。通过查看您在msdn中提供的链接,它会提到跨流式传输发生的操作可以与最多一个输入或输出参数签订合同。这是否意味着我必须将它们全部放在一个对象中并将其传送到服务器? – paradisonoir 2009-08-20 14:16:17

+0

总大小约为12MB,需要上传到服务器上的文件不需要任何处理,我们也不需要更新UI中的任何内容。 – paradisonoir 2009-08-20 14:41:06

+0

您在传递流时只能使用单个参数是正确的,但您可以通过在消息类型字段中使用[MessageHeader(MustUnderstand = true)]属性来解决此问题。例如,请参阅http://kjellsj.blogspot.com/2007/02/wcf-streaming-upload-files-over-http.html。 – akmad 2009-08-20 18:11:01