Response对象错误 ''ASP0251:80004005'' 的解决办法
				
									
					
					
						 | 
						
							
							tercel 
							
							
								2011年3月17日 10:12
								本文热度 5896
							
							 
						 | 
					
					
				 
				使用Adodb.Stream下载文件(如下代码)。 
       Response.ContentType = "application/octet-stream"
       response.AddHeader "Content-Disposition","attachment;filename=" &  objRs("Attach_Name")& filetype
       Set Stream = Server.CreateObject("ADODB.Stream")
       Stream.type=1
       Stream.Open
       Stream.LoadFromFile server.mappath(objRs("Attach_path"))
       Response.BinaryWrite Stream.Read         
       Stream.Close
       Set Stream = Nothing
当下载文件小于4M时没问题,大于4M时出错,提示 :
Response对象错误 'ASP 0251 : 80004005'     
    
超过响应缓冲区限制 
问题出在IIS的配制中AspBufferingLimit只有4M,所以有如下几种解决办法:
1、修改IIS的配制
停止IIS服务,然后用记事本修改C:\WINDOWS\system32\inetsrv\MetaBase.xml   
  中的:   
   AspBufferingLimit="4194304"    //即默认4M   
  改为:   
   AspBufferingLimit="8388608"    //改为8M或更多,自己决定
2、如果不想修改IIS的默认配制就要修改代码了。
     Response.Buffer=False   ‘将Response.Buffer设为否
     Response.ContentType = "application/octet-stream"
       response.AddHeader "Content-Disposition","attachment;filename=" &  objRs("Attach_Name")& filetype
       Set Stream = Server.CreateObject("ADODB.Stream")
       Stream.type=1
       Stream.Open
       Stream.LoadFromFile server.mappath(objRs("Attach_path"))
     offset = 0
     ChunkSize = 2048*1024        ‘ChunkSize小于IIS配制文件中的AspBufferingLimit项所设置的大小
     TotalSize = Stream.Size
     while offset < TotalSize 
         if (TotalSize - offset < ChunkSize) then
             ChunkSize = TotalSize – offset
         end if
         strChunk = Stream.Read(ChunkSize)         
            Response.BinaryWrite strChunk       
          offset = offset + ChunkSize
     wend        
       Stream.Close
或者
Response.Buffer= true     ‘使用缓冲区
    Response.Clear                
   Response.ContentType = "application/octet-stream"
       response.AddHeader "Content-Disposition","attachment;filename=" &  objRs("Attach_Name")& filetype
       Set Stream = Server.CreateObject("ADODB.Stream")
       Stream.type=1
       Stream.Open
       Stream.LoadFromFile server.mappath(objRs("Attach_path"))
     offset = 0
     ChunkSize = 2048*1024
     TotalSize = Stream.Size
     while offset < TotalSize 
         if (TotalSize - offset < ChunkSize) then
             ChunkSize = TotalSize – offset
         end if
         strChunk = Stream.Read(ChunkSize)         
            Response.BinaryWrite strChunk       
            response.flush                ‘这句很重要,它把缓冲区的数据据推出去
          offset = offset + ChunkSize
     wend        
       Stream.Close
 
该文章在 2011/3/17 10:12:49 编辑过
 
 |  | 
全部评论1 | 
	 | 
	
		tercel 
		2011年3月17日 10:20 
		
			在自己的机子上网页浏览正常。突然换了一台机子,浏览却出现了错误?不用说,十有八九是机子的问题,先把错误详细内容贴出来让大家看看吧 Response 对象 错误 'ASP 0251 : 80004005' 超过响应缓冲区限制 /index.asp,行 0 此 ASP 页的执行造成响应缓冲区超过其配置限制。 其实这个主要是因为数据量过的造成的,只要加大Buffer的缓冲区就可以了,办法是: 
1、自动处理: 
下载这个程序: ,然后将允许上传大小调大即可。设置时注意这个程序中的大小是字节B,不是KB,1MB=1024KB、1KB=1024B 
2、手工设置也行,麻烦些: 
先在服务里关闭iisadminservice服务 (服务管理里边停止) 找到windows\system32\inetsrv\下的metabase.xml, (我的是2003系统) 打开,找到 AspBufferingLimit 把他修改为需要的值,默认为4194304,即4096KB 建议把它修改为41943040(40M)或适合的数值,取决于服务器内存是否足够大。 然后重启iisadminservice服务。 注意事项: 1、要注意服务器内存量是否足够。 2、还有因为数据量比较大,相应的还要修改ASP处理时间,即: 修改"AspScriptTimeout" 默认值90 (秒) 修改"AspSessionTimeout" 默认值20 (分钟)  该评论在 2014/2/24 17:16:29 编辑过 
		 
	 |