2009-03-05 17 views
0

Crystal Reportsを使用してExcelスプレッドシートを吐き出すASP.NET 1.1アプリケーションがあります。このコードはIIS6で動作しますが、IIS7に移行しようとすると、ExcelファイルではなくコンテンツなしでHTMLが吐き出されます。IIS7 Response.WriteBuffer not working

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() 

答えて

0

が、これは私がこれまでに得たものであるここに仕事でいくつかの開発者に尋ねた:。

は「前に、私も前に、結晶中のオプションをストリーミングするために、エクスポートを使ったことがないことを見たことがないが、あれば私は推測するには、サーバーのアクセス許可を潜在的な障害とみなし、ユーザーがストリームにアクセスする特別な権限を必要とする状況を見てきました。