Советы по отладке вероятных Crystal Reports зависают в ASP.NET - PullRequest
1 голос
/ 03 февраля 2010

Попытка сохранить это вкратце: наши отгрузочные сотрудники используют сканер штрих-кода с поддержкой Windows Mobile для сканирования серийных номеров товаров, поставляемых по заказам клиентов. Эти данные отправляются через веб-службу asmx, и на сетевой принтер автоматически распечатывается отчет с информацией о клиенте и деталями отправленных товаров. Все это происходит в среде интрасети.

До недавнего времени я использовал механизм отчетов Microsoft, встроенный в Visual Studio (файлы .rdlc), для генерации отчетов и кода здесь для печати без вмешательства пользователя. Так работало несколько лет.

Недавно я столкнулся с некоторыми ограничениями форматирования отчетов в MS Reports и вместо этого внедрил отчеты в Crystal Reports (10.5.3700). Код работает нормально, но после запуска в производственном режиме от нескольких часов до суток рабочий процесс asp.net зависает (не уверен, что это подходящий термин). Процесс генерации / печати отчета выполняется вечно без исключения. Утилизация AppPool заставляет все работать некоторое время снова.

В отчетах используется режим «push», когда отчет получает типизированный набор данных, а не получает доступ к самой базе данных. Чтобы исключить метод CR ReportDocument.PrintToPrinter () из уравнения, я подумал об экспорте сгенерированных отчетов в формат PDF или аналогичный и последующей независимой печати полученного файла. Но я еще не нашел отличный способ сделать это.

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

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.ReportAppServer
Imports CrystalDecisions.Shared

Public Class CrystalReport

Private _report As ReportDocument

Public Sub New(ByVal Path As String)
    _report = New ReportDocument()
    _report.Load(Path)
End Sub

Public Sub SetDatasource(ByVal DataSet As DataSet)
    _report.SetDataSource(DataSet)
End Sub

Public Sub AddParameter(ByVal Name As String, ByVal Value As Object)

    Dim crParameterFieldDefinitions As ParameterFieldDefinitions = _report.DataDefinition.ParameterFields
    Dim crParameter1 As ParameterFieldDefinition = crParameterFieldDefinitions.Item(Name)
    Dim parameterValue As CrystalDecisions.Shared.ParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue()

    parameterValue.Value = Value
    crParameter1.CurrentValues.Add(parameterValue)
    crParameter1.ApplyCurrentValues(crParameter1.CurrentValues)

End Sub

Public Sub Print(ByVal PrinterPath As String)
    _report.PrintOptions.PrinterName = PrinterPath
    _report.PrintToPrinter(1, True, 0, 0)
    Close()
End Sub

Private Sub Close()
    _report.Close()
    _report.Dispose()
    _report = Nothing
End Sub

End Class

Есть идеи для дальнейшей отладки? Мне никогда не приходилось прибегать к реальной отладке Windows (WinDbg, Process Explorer и т. Д.), Поэтому любая рекомендация относительно того, какой инструмент отладки попробовать в первую очередь, была бы полезной.

Спасибо.

1 Ответ

0 голосов
/ 03 февраля 2010

Похоже, что отчет на самом деле не выпускается, хотя, взглянув на свой код, можно подумать, что вы делаете именно это.

Вы можете попробовать Close() ing и Dispose() ваш объект отчета в событии Page_Unload вашей страницы ASP.NET. В этом сообщении на форумах Microsoft ASP.NET рассказывается о проблеме, при которой достигается максимальное количество заданий на обработку отчетов, но я полагаю, что проблема может быть связана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...