Asp.net 尝试发送大型zip文件时连接关闭

Asp.net 尝试发送大型zip文件时连接关闭,asp.net,ashx,dotnetzip,Asp.net,Ashx,Dotnetzip,我试图实现的是允许用户从silverlight应用程序下载多个文件。为此,我决定使用DotNetZip库和ASP.NET处理程序来处理从数据库获取所有文件并将它们发送到客户端。这似乎是个好主意,而且易于实施。我已经创建了一个简单的处理程序,编写了所有需要的代码,并且一切正常 然而,由于某些原因,当我用许多文件创建zip文件时,出现了一个问题远程主机已关闭连接。错误代码为0x800704CD。当我尝试将数据写入响应时引发异常 Private Sub MultipleFileDownload_Loa

我试图实现的是允许用户从silverlight应用程序下载多个文件。为此,我决定使用
DotNetZip
库和
ASP.NET
处理程序来处理从数据库获取所有文件并将它们发送到客户端。这似乎是个好主意,而且易于实施。我已经创建了一个简单的处理程序,编写了所有需要的代码,并且一切正常

然而,由于某些原因,当我用许多文件创建zip文件时,出现了一个问题<代码>远程主机已关闭连接。错误代码为0x800704CD。当我尝试将数据写入
响应时引发异常

Private Sub MultipleFileDownload_Loaded(sender As Object, e As EventArgs) Handles Me.Load
    // initialize data and stuff

    _context.Response.Clear()
    _context.Response.BufferOutput = False
    Me.ZipElementsIntoOutputStream(elementsToDownload)
    _context.Response.End()
End Sub

Private Sub ZipElementsIntoOutputStream(elements As List(Of ElementImageFile))
    _context.Response.ContentType = "application/zip"
    Dim archiveName As String = String.Format("archive-{0}.zip", DateTime.Now.ToString("yyyy-MM-dd-HHmmss"))
    _context.Response.AddHeader("content-disposition", "attachment; filename=" + archiveName)

    Using zip As New ZipFile()
        For Each elementToDownload In elements.Where(Function(e) e IsNot Nothing AndAlso e.File IsNot Nothing)
            Dim fileName = Me.GetUniqueFileName(elementToDownload, zip)
            zip.AddEntry(fileName, elementToDownload.File)
        Next

        Using s As IO.MemoryStream = New IO.MemoryStream()
            zip.Save(s)
            s.Seek(0, IO.SeekOrigin.Begin)
            Dim buffer(10000) As Byte
            Dim length As Integer
            Dim dataToRead As Long
            dataToRead = s.Length

            While dataToRead > 0
                If (Me._context.Response.IsClientConnected) Then
                    length = s.Read(buffer, 0, 10000)
                    Me._context.Response.OutputStream.Write(buffer, 0, length)
                    Me._context.Response.Flush()

                    ReDim buffer(10000)
                    dataToRead = dataToRead - length
                Else
                    dataToRead = -1
                End If
            End While

            'zip.Save(_context.Response.OutputStream)
        End Using
    End Using
End Sub
如您所见,我正在创建
MemoryStream
并将小块数据发送到
Response
,正如我所看到的,它是类似问题的解决方案,但这没有帮助。将
Zip
文件直接保存到
Response
会给我带来完全相同的错误

BufferOutput
属性设置为
False
,因此它将立即开始下载,但将其更改为
True
不会改变任何内容

我试图发送的
zip
文件大约是248兆字节,这给了我一个错误。当我删除一些元素并且
zip
文件大约是220兆字节时,一切似乎都正常工作


有人知道,这种行为的原因是什么吗?如何修复此问题,以便发送zip文件不会出现此错误?

事实证明,问题不在
DotNetZip
ASHX
处理程序中。问题出在传递给此处理程序的很长查询字符串中<代码>Internet Explorer
最多可以处理查询字符串中的2048个字符。不幸的是,我传递了更长的字符串

IE
没有给我某种错误来指示问题,而是创建了到服务器的连接,没有等待我的响应,而是立即关闭了连接,这是我出现问题的原因

修复了查询字符串长度问题,也修复了此行为,现在下载更大的文件可以正常工作