IIS7响应。写入缓冲区不工作

IIS7响应。写入缓冲区不工作,iis,iis-7,crystal-reports,asp.net-1.1,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 ReportCl

我们有一个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()
Dim cr As ReportClass
'根据传入的导出类型导出报表。
Dim ExpOptions作为新的导出选项
将ContentType设置为字符串
像弦一样的暗线
Trace.Write(“DisplayReport reportname=“+reportname+”SQL=“+SQL+”SQLSub1=“+Convert.ToString(会话(“SQLSub1”)))
'在报告中填入数据。
如果会话(“SQLSub1”)“”则
如果不是会话(“SubRptName”)则什么都不是
cr=PopulateReport(GetReportObject(ReportName)、SQL、会话(“SQLSub1”)、会话(“SubRptName”))
会话(“SQLSub1”)=“”
会话(“子名称”)=无
其他的
cr=PopulateReport(GetReportObject(ReportName)、SQL、会话(“SQLSub1”))
会话(“SQLSub1”)=“”
如果结束
其他的
cr=PopulateReport(GetReportObject(ReportName),SQL)
如果结束
如果DisplayType=ReportType.Excel,则
如果ReportName.ToUpper=“ACTION”或ReportName.ToUpper=“INVENTORY\u EXCEL”_
或ReportName.ToUpper=“表现不佳”或ReportName.ToUpper=“员工\ EXCEL”则
Dim ExcelFormat选择作为新的ExcelFormat选项
'设置excel格式选项。
excelFormatOpts.ExcelTabHasColumnHeadings=True
excelFormatOpts.ExcelUseConstantColumnWidth=False
ExpOptions.FormatOptions=excelFormatOpts
其他的
ExpOptions.FormatOptions=新的ExcelFormatOptions
如果结束
ExpOptions.ExportFormatType=ExportFormatType.Excel
ContentType=“应用程序/vnd.ms excel”
strExt=“.xls”
ElseIf DisplayType=ReportType.PDF然后
ExpOptions.ExportFormatType=ExportFormatType.PortableDocFormat
ExpOptions.FormatOptions=新的PdfRtfWordFormatOptions
ContentType=“应用程序/pdf”
strExt=“.pdf”
如果结束
'将报告流式传输到屏幕
Dim req作为新的ExportRequestContext
req.ExportInfo=导出
像溪水一样暗淡
尝试
s=cr.FormatEngine.ExportToStream(请求)
特例
Trace.Warn(“DisplayReport cr.FormatEngine.ExportToStream(req)失败:”+ex.Message)
尺寸x为String=String.Empty
结束尝试
答复:Clear()
'Response.ClearHeaders()
'Response.ClearContent()
Response.Buffer=True
Response.ContentType=ContentType
Response.AddHeader(“内容类型”,ContentType)
作为字节的Dim缓冲区(s.长度)
s、 读取(缓冲区,0,整数(s.Length))
响应.二进制写入(缓冲区)
将strContentDisposition设置为String=“inline;filename=“&ReportName.ToString.ToLower&strExt.ToString
Trace.Write(“DisplayReport strContentDisposition=“+strContentDisposition”)
Response.AddHeader(“内容处置”,strContentDisposition)
Response.Cache.SetMaxAge(新的时间跨度(0,0,10))
答复:End()

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

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