Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 下载超大文件(8GB+;)-结合WCF和WebClient?_C#_Wcf_File_Webclient - Fatal编程技术网

C# 下载超大文件(8GB+;)-结合WCF和WebClient?

C# 下载超大文件(8GB+;)-结合WCF和WebClient?,c#,wcf,file,webclient,C#,Wcf,File,Webclient,我在创建支持下载超大文件的WCF服务时遇到了一些麻烦。我已经阅读了很多关于如何将transferMode属性设置为Streamed、将所有messageSize和bufferSize属性增加为Int32.MaxValue的指南,但我仍然没有运气。(我还通过MessageBodyMember属性将流作为消息体返回,并使用MessageHeader属性通过头发送元数据) 如果我设置了所有这些属性,我可以很好地下载较小的文件,但是当我尝试下载1-2GB文件时,我只会得到一个400错误的请求错误,这使得

我在创建支持下载超大文件的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流媒体:

处理大型有效负载的策略是流式传输。当信息, 尤其是那些用XML表示的,通常被认为是 相对紧凑的数据包,一条消息可能有多条 大小为千兆字节,类似于一个比 数据包。以流模式传输数据而不是 在缓冲模式下,发送方生成消息正文的内容 以流和消息的形式提供给收件人 基础结构不断地将数据从发送方转发到接收方 当它变得可用时


您必须通过WCF进行此操作吗?浏览器/IIS可以很好地处理“普通的旧文件”。您可以返回一个URI并让浏览器获取它吗?是的,你可以通过WCF来做到这一点,但不重新发明轮子要容易得多。@CraigStuntz:嗯,是和否都有。作为学校项目的一部分,我需要建立一个WCF服务,客户端应用程序可以调用它。该服务是一个媒体提供商,用户可以从中“购买”和下载媒体文件(因此需要支持大型文件)。我只有通过流进行文件传输的经验,因此我不知道我是否能够以某种方式托管一个文件,该文件仅在用户使用IIS提供某种身份验证时可用?当然,只需要在查询字符串参数中使用唯一且不可猜测的令牌。您可以通过IIS/ASP.NET中的常用方法限制访问。