我不寻找任何替代的流媒体文件内容从
我有一个处理程序,在那里我必须交付大文件给客户的请求.我面临着以下问题,
文件的平均大小为4到100 MB,所以让我们考虑80MB文件下载情况.
Buffering On, Slow Start
Response.BufferOutput = True;
这会导致文件启动非常缓慢,因为用户下载,甚至进度条直到几秒钟(通常为3到20秒)才会出现,原因是,IIS首先读取整个文件,确定内容长度,然后开始文件传输.文件在视频播放器中播放,运行速度非常慢,但iPad只会先下载部分文件,所以运行速度很快.
Buffering Off, No Content-Length, Fast Start, No Progress
Reponse.BufferOutput = False;
这会导致即时启动,但终端客户端(典型的浏览器,如Chrome)不知道内容长度,因为IIS也不知道,所以它不会显示进度,而是显示下载的X KB.
Buffering Off, Manual Content-Length, Fast Start, Progress and Protocol Violation
Response.BufferOutput = False;
Response.AddHeader("Content-Length", file.Length);
这会导致在Chrome等浏览器中立即正确下载文件,但在某些情况下,IIS处理程序会导致"远程客户端关闭连接"错误(这是非常常见的),而其他WebClient会导致协议冲突.This happens 5 to 10% of all requests, not every requests.
我猜发生的情况是,当我们不进行缓冲时,IIS不会发送任何名为100 Continue的内容,并且客户端可能会在不期望任何输出的情况下断开连接.然而,从源读取文件可能需要更长的时间,但在客户端,我增加了超时,但看起来像IIS超时,并且无法控制.
我是否可以强制回复发送100继续,不让任何人关闭连接?
UPDATE个
我在Firefox/Chrome中发现了以下标题,对于违反协议或错误的标题,这里似乎没有什么不寻常的.
Access-Control-Allow-Headers:*
Access-Control-Allow-Methods:POST, GET, OPTIONS
Access-Control-Allow-Origin:*
Access-Control-Max-Age:1728000
Cache-Control:private
Content-Disposition:attachment; filename="24.jpg"
Content-Length:22355
Content-Type:image/pjpeg
Date:Wed, 07 Mar 2012 13:40:26 GMT
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
UPDATE 2个
转向回收仍然没有提供太多,但是我已经将我的MaxWorkerProcess增加到8,并且我现在得到的错误数量比以前少了.
但平均而言,在一秒内的200个请求中,有2到10个请求失败.这种情况几乎每隔一秒就会发生一次.
UPDATE 3个
继续有5%的请求失败并显示"服务器违反了协议.节=ResponseStatusLine",我有另一个程序从使用WebClient的Web服务器下载内容,这给出了这个错误每秒4-5次,平均有5%的请求失败.是否有任何方法可以跟踪WebClient故障?
Problems Redefined个
Zero Byte File Received
IIS由于某种原因关闭了连接,在WebConfig的客户端,我收到的文件是0字节,不是0字节,我们做了SHA1散列判断,这告诉我们在IIS Web服务器中,没有记录错误.
这是我的错误,当我们使用实体框架时,它被解决了,因为读取不在事务范围内,所以它正在读取脏的(未提交的行),把它放在事务范围内解决了这个问题.
Protocol Violation Exception Raised
WebClient抛出WebException,说"服务器违反了协议.Section=ResponseStatusLine.
我知道我可以启用不安全的报头解析,但这不是重点,当是我的HTTP处理程序发送正确的报头时,我不知道为什么IIS会发送任何额外的东西(在Firefox和Chrome上判断,没有什么异常),这种情况只会发生2%的情况.
UPDATE 4
发现sc-Win32 64错误,我在某处读到MinBytesPerSecond的WebLimits必须从240更改为0,但一切仍然相同.但是,我注意到,每当IIS记录64个sc-win32错误时,IIS都会将HTTP状态记录为200,但是出现了一些错误.现在我不能打开200的失败跟踪日志(log)记录,因为它会导致大量文件.
以上两个问题都通过增加MinBytesPerSecond和禁用会话得到了解决,我添加了详细的答案,总结了每一点.