下载非常大的文件(8GB +) - 结合WCF和WebClient?

时间:2012-03-12 14:59:07

标签: c# wcf file 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进行下载。

提前感谢任何线索。

1 个答案:

答案 0 :(得分:2)

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

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

  

处理大型有效载荷的策略是流式传输。虽然消息,   特别是那些用XML表示的,通常被认为是存在的   相对紧凑的数据包,消息可能是多个   大小为千兆字节,类似于连续数据流而不是a   数据包。数据以流模式传输而不是   缓冲模式,发送者制作邮件正文的内容   以流和消息的形式提供给收件人   基础设施不断将数据从发送方转发到接收方   因为它可用。