IIS7 Response.WriteBuffer无法正常工作

时间:2009-03-05 15:55:07

标签: iis iis-7 crystal-reports asp.net-1.1

我们有一个ASP.NET 1.1应用程序,它使用Crystal Reports来吐出excel电子表格。这些代码在IIS6下工作,但是当我们尝试将其迁移到IIS7时,它会抛出没有内容的html而不是Excel文件。

存在MIME类型。以下是我们使用的代码。我没有编写这段代码,因为我现在主要在3.5框架中工作。我的假设是我在IIS7配置中遗漏了一些东西而不是代码,因为它适用于IIS6。 ASP.NET 1.1应用程序的其余部分适用于IIS7。

        Dim cr As ReportClass
        'EXPORT the report based on the export type passed in.
        Dim ExpOptions As New ExportOptions
        Dim ContentType As String
        Dim strExt As String
        Trace.Write("DisplayReport reportname=" + ReportName + " SQL=" + SQL + " SQLSub1=" + Convert.ToString(Session("SQLSub1")))
        'Get the report filled with the data.
        If Session("SQLSub1") <> "" Then
            If Not Session("SubRptName") Is Nothing Then
                cr = PopulateReport(GetReportObject(ReportName), SQL, Session("SQLSub1"), Session("SubRptName"))
                Session("SQLSub1") = ""
                Session("SubRptName") = Nothing
            Else
                cr = PopulateReport(GetReportObject(ReportName), SQL, Session("SQLSub1"))
                Session("SQLSub1") = ""
            End If
        Else
            cr = PopulateReport(GetReportObject(ReportName), SQL)
        End If

        If DisplayType = ReportType.Excel Then
            If ReportName.ToUpper = "ACTION" Or ReportName.ToUpper = "INVENTORY_EXCEL" _
                Or ReportName.ToUpper = "UNDERPERFORM" Or ReportName.ToUpper = "EMPLOYEE_EXCEL" Then
                Dim excelFormatOpts As New ExcelFormatOptions
                ' Set the excel format options.
                excelFormatOpts.ExcelTabHasColumnHeadings = True
                excelFormatOpts.ExcelUseConstantColumnWidth = False
                ExpOptions.FormatOptions = excelFormatOpts
            Else
                ExpOptions.FormatOptions = New ExcelFormatOptions
            End If
            ExpOptions.ExportFormatType = ExportFormatType.Excel
            ContentType = "application/vnd.ms-excel"
            strExt = ".xls"
        ElseIf DisplayType = ReportType.PDF Then
            ExpOptions.ExportFormatType = ExportFormatType.PortableDocFormat
            ExpOptions.FormatOptions = New PdfRtfWordFormatOptions
            ContentType = "application/pdf"
            strExt = ".pdf"
        End If

        'Stream the report to the screen
        Dim req As New ExportRequestContext
        req.ExportInfo = ExpOptions

        Dim s As Stream
        Try
            s = cr.FormatEngine.ExportToStream(req)
        Catch ex As Exception
            Trace.Warn("DisplayReport cr.FormatEngine.ExportToStream(req) failed: " + ex.Message)
            Dim x As String = String.Empty
        End Try


        Response.Clear()
        'Response.ClearHeaders()
        'Response.ClearContent()
        Response.Buffer = True
        Response.ContentType = ContentType
        Response.AddHeader("Content-Type", ContentType)


        Dim buffer(s.Length) As Byte
        s.Read(buffer, 0, Int(s.Length))
        Response.BinaryWrite(buffer)

        Dim strContentDisposition As String = "inline;filename=" & ReportName.ToString.ToLower & strExt.ToString
        Trace.Write("DisplayReport strContentDisposition=" + strContentDisposition)
        Response.AddHeader("Content-Disposition", strContentDisposition)
        Response.Cache.SetMaxAge(New TimeSpan(0, 0, 10))
        Response.End()

1 个答案:

答案 0 :(得分:0)

在这里询问一些开发人员,这是我到目前为止所得到的:

“以前从未见过,我以前从未使用导出流水晶选项。但是,如果我猜测,我会将服务器权限视为可能的错误。我已经看到了用户必须具有访问流的特殊权限。“