2013-04-11 65 views
0

我们正在从IIS6转换到IIS7,除了我们的下载部分外,所有内容都进行得非常顺利。会发生什么是启动下载,但它似乎正在发生重定向,并且我们的default.aspx页面被下载,而不是由用户请求的文件。以下是我们用于IIS6的代码。MemoryStream下载从IIS6下载失败到IIS7

Private Sub GetFile(ByVal ReportQueueId As System.Int32, _ 
        ByVal FileName As System.String _ 
        ) 
    Dim stream As System.IO.MemoryStream = Nothing 
    Dim lngRecordCount As System.Int32 = 0 
    Dim objWebClient As New System.Net.WebClient 
    Dim strServerName As System.String 

    Try 
     strServerName = Page.Request.Item("SERVER_NAME").ToString() 

     Dim fURI As New System.Uri("http://" & strServerName & "/reportmonitor/" & FileName) 
     ' Open the file into a stream. 
     stream = New System.IO.MemoryStream(objWebClient.DownloadData(fURI), False) 

     ' Total bytes to read: 
     Dim bytesToRead As Long = stream.Length 

     Page.Response.Clear() 
     Page.Response.ContentType = "application/octet-stream" 
     Page.Response.AddHeader("Content-Disposition", "attachment; filename=" & FileName.ToString()) 
     Page.Response.AddHeader("Content-Length", bytesToRead.ToString()) 


     ' Read the bytes from the stream in small portions. 
     While bytesToRead > 0 
      ' Make sure the client is still connected. 
      If Response.IsClientConnected Then 
       ' Read the data into the buffer and write into the output stream. 
       Dim buffer As Byte() = New Byte(9999) {} 
       Dim length As Integer = stream.Read(buffer, 0, 10000) 
       Response.OutputStream.Write(buffer, 0, length) 
       Response.Flush() 

       ' We have already read some bytes.. need to read 
       ' only the remaining. 
       bytesToRead = bytesToRead - length 
      Else 
       ' Get out of the loop, if user is not connected anymore.. 
       bytesToRead = -1 
      End If 
     End While 

     'Update status 
     lngRecordCount = UpdateStatus(ReportQueueId, _ 
             listcounts_common.ListCountsCommon_CL.ReportQueueStatus.rqsDownloaded _ 
            ) 
    Catch SystemException As System.Exception 
     'Update status 
     lngRecordCount = UpdateStatus(ReportQueueId, _ 
             listcounts_common.ListCountsCommon_CL.ReportQueueStatus.rqsOnHold _ 
            ) 

     'most likely a 404 file not found error 
     Me.lblErrorMessage.Text = CLASS_NAME & ":GetFile: " & SystemException.Message.ToString 
     Me.lblErrorMessage.Visible = True 
    Finally 
     objWebClient = Nothing 
     stream = Nothing 
    End Try 
End Sub 

后运行这些代码我看过这可能是唯一的另一件事是在调用的GetFile(),我们有以下代码父功能:

' stops page html output. If this is not done, un-desired html code will be added to csv files 
Page.Response.End() 

上的任何想法IIS6和7之间的区别以及这个过程?我所尝试过的一切都没有奏效。新网站在Itegrated模式下运行,.NET 4

谢谢...

UPDATE

我修改了福日是一个外部文件:

fURI = New System.Uri("http://manuals.info.apple.com/en_US/ipad_user_guide.pdf") 

此文件完美下载,所以我假设它是IIS7中的权限问题...有关我可能错过的任何想法?

回答

0

由于该站点正在使用表单身份验证,因此在虚拟web.config中添加允许的位置路径可解决转换为IIS7时的问题。

<location path="reportmonitor"> 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    </authorization> 
</system.web> 
</location>