经典ASP IIS 6响应缓冲区超出限制 [英] Classic ASP IIS 6 Response buffer limit exceeded

查看:400
本文介绍了经典ASP IIS 6响应缓冲区超出限制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个经典的ASP应用程序,允许用户下载由第三方供应商提供的Excel文档。下面是样本code。如果文件大小超过4MB时,我得到一个错误超出响应缓冲区限制。

我做了一些研究和尝试不同的东西。只有增加在IIS中的缓冲区限制解决了我的问题。但我的系统团队不愿意让生产这种变化。

是否有一个替代的解决方案?有没有在ASP.Net提供一个解决方案?

 设置objDoc =的Server.CreateObject(Some.Object)
    objDoc.DocId DOC_ID
    bin_obj = objDoc.Binary
    设置objDoc =什么    将Response.Buffer = TRUE
    Response.ContentType =应用程序/ msexcel的
    Response.AddHeader缓存控制,公共
    Response.AddHeader语法,公共
    Response.AddHeader内容处置,附件;文件名= TEST.XLS
    Response.BinaryWrite bin_obj
    Response.Flush
    到Response.End


解决方案

您需要通过部分,前推送内容的一部分。每块1MB。如果你的COM对象(Some.Object)不到风度允许块读,你使用它可以让的ADODB.Stream 与方法对象 stream.Read(计数)

更新:

 显式的选项暗淡的溪流,streamB组流=的Server.CreateObject(的ADODB.Stream)
streamS.Type = 1二进制流
streamS.Open
streamS.LoadFromFile使用Server.Mappath(/ Nissan_Qashqai_IDTR.rar)设置streamB =的Server.CreateObject(的ADODB.Stream)
streamB.Type = 1
streamB.Open昏暗的BLOCKSIZE
BLOCKSIZE = 1024'块大小为1 KBResponse.AddHeader内容处置,附件;文件名= MyTestBinryFile.bin
Response.AddHeader内容长度,streamS.Size
Response.ContentType =应用程序/八位字节流我朦胧
对于i = 0到streamS.Size - 1块大小步
    streamB.Position = 0
    streamS.CopyTo streamB,BLOCKSIZE
    streamB.Position = 0
    Response.BinaryWrite(streamB.Read)
    Response.Flush
下一个streamS.Close
组流=无streamB.Close
设置streamB =什么Response.Flush

I have a Classic ASP application which allows users to download excel documents provided by a 3rd party vendor. Below is sample code. If the document size is greater than 4mb, I get an error "Response buffer limit exceeded".

I did some research and tried different things. Only increasing the buffer limit in IIS resolved my issue. But my systems team is reluctant to make this change on production.

Is there an alternate solution? Is there a solution available in ASP.Net?

    set objDoc = Server.createobject("Some.Object")
    objDoc.DocId doc_id
    bin_obj = objDoc.Binary
    set objDoc = Nothing

    Response.buffer = TRUE
    Response.ContentType = "application/msexcel"
    Response.AddHeader "Cache-Control", "public"
    Response.AddHeader "Pragma", "public"   
    Response.AddHeader "Content-Disposition", "attachment;filename=test.xls"
    Response.BinaryWrite bin_obj
    Response.Flush
    Response.End

解决方案

You need push content part by part, ex. by 1Mb per block. If your COM object ("Some.Object") dosn't allow read by block, you can make it using ADODB.Stream object with method stream.Read(count).

UPDATE:

Option Explicit

Dim streamS, streamB

Set streamS = Server.CreateObject("ADODB.Stream")
streamS.Type = 1 'Binary stream
streamS.Open
streamS.LoadFromFile Server.MapPath("/Nissan_Qashqai_IDTR.rar")

Set streamB = Server.CreateObject("ADODB.Stream")
streamB.Type = 1
streamB.Open

Dim blockSize
blockSize = 1024 ' block size is 1 KB

Response.AddHeader "Content-Disposition", "attachment;filename=MyTestBinryFile.bin"
Response.AddHeader "Content-Length", streamS.Size
Response.ContentType = "application/octet-stream"

Dim i
For i = 0 To streamS.Size - 1 Step blockSize
    streamB.Position = 0
    streamS.CopyTo streamB, blockSize
    streamB.Position = 0
    Response.BinaryWrite(streamB.Read)
    Response.Flush
Next

streamS.Close
Set streamS = Nothing

streamB.Close
Set streamB = Nothing

Response.Flush

这篇关于经典ASP IIS 6响应缓冲区超出限制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆