Crystal Reports в asp.net - страница продолжает загружаться

Я новичок в кристальных отчетах. У меня была эта проблема в течение достаточно долгого времени, и я не могу решить ее. Что я делаю, так это запускаю отчет и отправляю обратно сгенерированный PDF в ответе.

Проблема в том, что когда я запускаю страницу asp.net (которая запускает отчет) из браузера, она работает нормально первый или второй раз, но затем браузер просто продолжает ждать, и я не получаю никакого ответа от сервер, даже не ошибка! Просто долго грузится. Я даже сделал чистую переустановку сервера, но все еще имею ту же проблему. У меня не было этой проблемы во время первоначального тестирования этой страницы.

Отчеты Crystal непредсказуемы, и я не уверен, что это связано с тем, что отчеты не закрываются должным образом или соединение не является правильным.

Windows Server 2003 - IIS Вот страница vb.net -

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim connectionInfo As New ConnectionInfo




        connectionInfo.ServerName = "UID=abc;PWD=abc;Driver= {SQL Server};Server=" & Page.Request.QueryString("server") & ";Database=" & Page.Request.QueryString("database")


    Using report As New ReportDocument
            report.Load(Server.MapPath("/report/Crystal/test.rpt"))
            report.FileName = Server.MapPath("/report/Crystal/test.rpt")

            SetDBLogonForReport(connectionInfo, report)

            report.SetParameterValue("param1",  Page.Request.QueryString("param1"))     



            Dim oStream As New MemoryStream()
            oStream = report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat)

            Response.Clear()
            Response.Buffer = True
            Response.ContentType = "application/pdf"
            Response.BinaryWrite(oStream.ToArray())
            report.Close()
    End Using


        Response.Flush()
        Response.End()

    End Sub

    Private Sub SetDBLogonForReport(ByVal connectionInfo As ConnectionInfo, ByVal reportDocument As ReportDocument)

        Dim tables As Tables
        tables = reportDocument.Database.Tables

        For Each table As CrystalDecisions.CrystalReports.Engine.Table In tables

            Dim tableLogonInfo As New TableLogOnInfo

            tableLogonInfo = table.LogOnInfo
            tableLogonInfo.ConnectionInfo = connectionInfo
            table.ApplyLogOnInfo(tableLogonInfo)

        Next


    End Sub

</div>

</form>

1 ответ

Решение

Во-первых, поместите вызов в отчет о соединении в событие Page_Init(), а не в Page_Load(). До.NET 2005 было нормально поместить его в Page_Load(). Но теперь они изменили способ управления памятью, и это может привести к случайным ошибкам в зависимости от состояния памяти CrystalReportViewer. Помещать его в Page_Init() всегда безопасно.

Во-вторых, я бы сделал, это удалить код: CrystalReportViewer1.DataBind();

Я бы также удалил вызов RefreshReport(), так как он обновляется автоматически, когда вы назначаете ему объект отчета. Но не больно иметь его. В любом случае, обязательно избавьтесь от вызова.DataBind ().

Надеемся, что эти изменения вернут ваше приложение к работе.

Для более подробной информации, пожалуйста, проверьте ссылку ниже, я столкнулся с той же проблемой год назад. Надеюсь, это полезно

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