0

我们有一个 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()
4

1 回答 1

0

在工作中问了一些开发人员,这是我到目前为止得到的:

“以前从未见过,我什至从未在水晶中使用导出到流选项。但是,如果我猜测,我会将服务器权限视为可能的错误。我见过用户必须这样做的情况拥有访问流的特权。”

于 2009-03-06T15:49:45.633 回答