IIS7响应。写入缓冲区不工作
我们有一个ASP.NET 1.1应用程序,它使用Crystal Reports生成excel电子表格。这些代码在IIS6下工作,但当我们尝试将其迁移到IIS7时,它会输出没有内容的html,而不是Excel文件 MIME类型已存在。下面是我们正在使用的代码。我没有写这段代码,因为我现在主要在3.5框架中工作。我的假设是我在IIS7配置中缺少了一些东西,而不是代码,因为它在IIS6上工作。ASP.NET 1.1应用程序的其余部分在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
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中使用“导出到流”选项。但是,如果我猜测,我会将服务器权限视为可能的错误。我见过用户必须具有访问流的特权的情况。”