c# – 下载非常大的文件(8GB) – 结合WCF和WebClient?

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

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

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

从我的研究中我发现似乎我将不得不使用WebClient.DownloadFile.
只有具有所需权限的用户才能下载文件.使用WCF,我的下载方法可以采用服务器可以检查的令牌参数,并且仅当用户有权下载所请求的文件时才返回流.使用WebClient方法似乎并不简单.如果有人有关于如何做到这一点的指导(通过WebClient),我将非常感激.

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

提前感谢任何线索.

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

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

The strategy to deal with large payloads is streaming. While messages,
especially those expressed in XML, are commonly thought of as being
relatively compact data packages, a message might be multiple
gigabytes in size and resemble a continuous data stream more than a
data package. When data is transferred in streaming mode instead of
buffered mode, the sender makes the contents of the message body
available to the recipient in the form of a stream and the message
infrastructure continuously forwards the data from sender to receiver
as it becomes available.

点赞