Методы Crystal Reports ExportToHttpResponse и ExportToStream зависают и никогда не возвращаются

Код, который я устраняю, экспортирует отчет Crystal Report ReportDocument чтобы преуспеть. Большую часть времени экспорт работает просто отлично. К сожалению, для некоторых наборов данных ExportToHttpResponse Метод никогда не возвращается и приводит к зависанию приложения. В конце концов, есть Поток, прерываемый исключение наряду с таймаутом запроса.

Вот строка, которая висит:

reportDocument.ExportToHttpResponse(ExportFormatType.Excel,Response,True, fileName);

Я также пытался использовать ExportToStream отсюда который также висит:

System.IO.Stream myStream;
byte[] byteArray;
myStream = boReportDocument.ExportToStream (ExportFormatType.PortableDocFormat);

Я пробовал разные форматы экспорта, перезапуск IIS и т. Д. Кажется, существует ограничение размера или, возможно, конкретные сценарии данных, которые приводят к зависанию этих методов. Есть обходные пути или объяснения этого поведения? Спасибо!

1 ответ

Попробуй это:

   Public Shared Sub ExportDataSetToExcel(ByVal ds As DataTable, ByVal filename As String)
        Dim response As HttpResponse = HttpContext.Current.Response
        response.Clear()
        response.Buffer = True
        response.Charset = ""
        'response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
        response.ContentType = "application/vnd.ms-excel"
        'response.AddHeader("Content-Disposition", "attachment;filename=""" & filename & ".xls")

        Using sw As New StringWriter()
            Using htw As New HtmlTextWriter(sw)
                Dim dg As New DataGrid()
                dg.DataSource = ds
                dg.DataBind()
                dg.RenderControl(htw)
                response.Charset = "UTF-8"
                response.ContentEncoding = System.Text.Encoding.UTF8
                response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble())
                response.Output.Write(sw.ToString())
                response.[End]()
            End Using
        End Using
    End Sub

и в вашем средстве просмотра добавьте:

DT = New DataTable
DT = (Your Method)
ExportDataSetToExcel(DT, "ExportedReport")

также добавьте:

 Protected Sub Page_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Unload
    ReportObject.Close()
    ReportObject.Dispose()
End Sub

Таким образом, отчет не будет добавлять ограничения на количество загруженных отчетов.

Другие вопросы по тегам