我在创建支持下载非常大文件的 WCF 服务时遇到了一些麻烦。我已经阅读了很多关于如何将 transferMode 属性设置为 Streamed,将所有 messageSize 和 bufferSize 属性增加到 Int32.MaxValue 的指南,但我仍然没有运气。 (我还通过 MessageBodyMember 属性将流作为消息正文返回,并且元数据通过使用 MessageHeader 属性的 header 发送)。

如果我设置了所有这些属性,我可以很好地下载较小的文件,但是当我尝试下载 1-2GB 的文件时,我只会收到 400 个错误的请求错误,这使得调试变得相当困难......

我的服务理想情况下应该支持至少 8GB 的​​文件大小。这对 WCF 甚至可行吗? web.config 文件的各种 messageSize 属性似乎仅限于 Int32.MaxValue,它等于 2GB 的最大文件大小。

从我的研究中,我发现似乎我将不得不使用 WebClient.DownloadFile 来代替。
文件应仅可供具有所需权限的用户下载。使用 WCF,我的下载方法可以采用 token 参数,只有当用户有权下载请求的文件时,服务器才能检查并返回流。使用 WebClient 方法这似乎并不简单。如果有人对如何执行此操作有一些指导方针(通过 WebClient),我将不胜感激。

理想情况下,我的 WCF 服务应该管理和提供用户 token ,并以某种方式将当前合法的 token 绑定(bind)到每个单独的文件( token 应该只能使用一次)。然后应该通过 WebClient 进行下载。

提前感谢您提供任何线索。

最佳答案

您可以在 WCF 中执行此操作。许多个月前,我构建了一个服务来执行此操作(我们的配置中没有 Web 服务器)。我们使用了 WCF 流:

http://msdn.microsoft.com/en-us/library/ms733742.aspx

关于c# - 下载非常大的文件 (8GB+) - 结合 WCF 和 WebClient?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9669460/

10-11 02:32
查看更多