Приложение печати .Net Crystal Report, работающее при ошибках подключения к службе termianal при отключении сеанса - PullRequest
4 голосов
/ 02 марта 2009

Я создал приложение .Net для запуска на сервере приложений, который получает запросы на отчет и распечатывает запрошенный отчет.

Приложение C # использует Crystal Reports для загрузки отчета и последующей его распечатки.

Приложение запускается на сервере, который подключен через подключение к удаленному рабочему столу под определенной учетной записью пользователя (требуется для старых приложений). Когда я отключаюсь от удаленного сеанса, приложение начинает вызывать исключения, такие как:

Сообщение: CrystalDecisions.Shared.CrystalReportsException: ошибка загрузки отчета

Этот тип ошибки никогда не возникает, когда удаленный сеанс активен. Сервер, на котором запущено приложение, работает под управлением Windows Server 2003, мой ящик, который создает соединение, - Windows XP.

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

Кто-нибудь знает, что может быть причиной этой проблемы?

РЕДАКТИРОВАТЬ: я укусил пулю и создал приложение в качестве службы Windows, очевидно, это не займет много времени, я просто не был уверен, что это решит проблему. Во всяком случае, это не так!

Я также попытался удалить многопоточный код, который вызывал функцию печати асинхронно. Я сделал это для того, чтобы просто приложение и сузить причину, по которой оно может выйти из строя. В любом случае, это тоже не улучшило ситуацию!

РЕДАКТИРОВАТЬ: две ошибки, которые я получаю:

System.Runtime.InteropServices.COMException (0x80000201): недопустимый принтер указано. в CrystalDecisions.ReportAppServer.Controllers.PrintOutputControllerClass.ModifyPrinterName (String newVal) в CrystalDecisions.CrystalReports.Engine.PrintOptions.set_PrinterName (String значение) в Dsa.PrintServer.Service.Service.PrintCrystalReport (Отчет отчет)

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

И

Запрос не может быть отправлен для фоновая обработка. в CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.GetLastPageNumber (RequestContext pRequestContext) в CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber (ReportPageRequestContext reqContext) --- конец внутреннего трассировка стека исключений --- в CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException (Exception есть CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber (ReportPageRequestContext reqContext) в CrystalDecisions.CrystalReports.Engine.FormatEngine.PrintToPrinter (Int32 nCopies, Boolean collated, Int32 startPageN, Int32 endPageN) в CrystalDecisions.CrystalReports.Engine.ReportDocument.PrintToPrinter (Int32 nCopies, Boolean collated, Int32 startPageN, Int32 endPageN) в Dsa.PrintServer.Service.Service.PrintCrystalReport (Отчет отчет)

EDIT:

Я запустил filemon, чтобы проверить, нет ли проблем с доступом. В момент возникновения ошибки файл mon сообщает

Запрос: ОТКРЫТЬ | Путь: C: \ windows \ assembly \ gac_msil \ system \ 2.0.0.0__b77a5c561934e089 \ ws2_32.dll | Результат: НЕ НАЙДЕН | Другое: Атрибуты Ошибка

Ответы [ 8 ]

2 голосов
/ 21 августа 2009

Наша конкретная проблема была решена. В основном, когда отчеты создавались, они сохранялись с информацией о принтерах. Обычно для отчета был установлен и сохранен определенный принтер.

Этот принтер больше не существует, поэтому отчет начал сбоить. По сути, нам пришлось открыть конструктор отчетов и удалить в отчете любые ассоциации с принтерами.

1 голос
/ 01 апреля 2009

Мы встречались с этими ошибками несколько раз за последние несколько лет. Много раз я хотел получить более конкретное сообщение об ошибке.

Во-первых, я хотел бы убедиться, что не установлено несколько версий Crystal Reports. В нашем опыте мы обнаружили, что Crystal Reports 9.0, похоже, не очень хорошо работает с 10. Удаление версии 9, похоже, помогло некоторым нашим клиентам. Если оба установлены, я настоятельно рекомендую удалить оба , а затем переустановить Crystal Reports 10.

Одной из самых ранних ошибок Crystal Reports была страшная «Запрос не может быть отправлен для фоновой обработки». Некоторое время отчеты работали бы нормально, а потом внезапно останавливались. Посмотрев код, я нашел место, где мы не избавились от ReportDocument. Правильная утилизация этого документа устранила проблему.

В последнее время мы получили сообщение "Не удалось отправить запрос на фоновую обработку". и «Недопустимый принтер» ошибки. На сервере одного клиента было несколько сетевых принтеров, определенных по IP-адресу. Некоторое время печать работала бы нормально, затем внезапно, bam , клиент получил ошибку "Invalid Printer" и вызвал нашу службу поддержки.

Один из разработчиков исправил проблему «Недопустимый принтер», выполнив все следующие действия:

  1. Отредактируйте и сохраните файл .rpt в Visual Studio 2005. Мы поддерживали формат отчета совместимым с Crystal Reports 9, поскольку хотели, чтобы наши изменения распространялись среди наших клиентов, все еще использующих более старые версии.
  2. Сохранение файлов Crystal Reports с параметром «Нет принтера». В меню Visual Studio 2005 выберите Crystal Reports / Design / Printer Setup, затем установите флажок «Нет принтера».
  3. Мы изменили формулу, которая отображала «Страница N из M», из чего-то странного:

</p> <pre><code>"Page " + Left (CStr (PageNumber), Length (CStr (PageNumber)) - 3) + " of " + Left (CStr (TotalPageCount), Length (CStr (TotalPageCount)) - 3)

на это:

"Page " + CStr(PageNumber,0) + " of " + CStr(TotalPageCount,0)

К сожалению, я понятия не имею, какое (любое или все) из вышеуказанных действий может исправить ошибку. Я говорю «может», потому что, насколько я знаю, ошибка волшебным образом исчезла из-за некоторых изменений в ИТ-сети.

Наконец, вы прочитали эту белую книгу? Хотя это не обязательно решало наши проблемы, это было очень интересно.

0 голосов
/ 18 июля 2009

Если вы смотрите подробно, как

добавить флажки в отчеты Crystal для логического поля и, если логическое поле равно false

снимите флажок, отметьте флажок посмотреть эту статью

http://checkboxcrystalreport.blogspot.com/2009/07/printing-checkbox-in-crystal-report-for.html

0 голосов
/ 14 июля 2009

У меня была неясная проблема, которая была похожа на эту, за исключением того, что это была (шок-ужас) проблема автоматизации с Excel. Я обнаружил, что приложение работало нормально, когда у меня был подключен сеанс удаленного рабочего стола, но после отключения оно приводило к ошибкам автоматизации, связанным с принтером по умолчанию.

Я полагаю, что проблема связана с настройкой принтера по умолчанию при подключении к удаленному рабочему столу. Предполагая, что у вас есть файл .rdp для инициации сеанса удаленного рабочего стола, если вы отредактируете его, а затем перейдите на вкладку «Локальные ресурсы», вы увидите, используете ли вы локальный принтер в удаленном сеансе.

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

Вы должны быть в состоянии решить эту проблему, не предоставляя общий доступ к локальному принтеру, сняв флажок «Принтер» на вкладке «Локальные ресурсы».

Более простым решением было бы отключить «перенаправление принтера» на сервере. См. https://serverfault.com/questions/5646/how-do-i-disable-remote-printers-using-group-policy для получения дополнительной информации.

0 голосов
/ 19 июня 2009

После долгого поиска в Интернете я нашел эту ссылку, но не пытался, потому что нет другого бесплатного сервера.

http://www.microsoft.com/technet/security/bulletin/ms04-017.mspx

0 голосов
/ 01 апреля 2009

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

Я получил Сообщение: CrystalDecisions.Shared.CrystalReportsException: загрузка отчета не удалась несколько раз, и это связано с тем, что вы не можете получить доступ к отчету. Либо он не существует, либо в вашей ситуации вы не подключены к машине. Ошибка не связана с печатью.

0 голосов
/ 06 марта 2009

Вы уверены, что «отключаете» свой удаленный сеанс, а не «выходите из системы». Я постоянно отключаю свои сеансы от nt server 2003, и все, чтобы все продолжало работать просто отлично. Выход из системы с другой стороны будет убить приложения, запущенные в этом сеансе.

На каком сервере вы работаете?

0 голосов
/ 02 марта 2009

Если вы создаете оболочку службы окна для своего приложения, это означает, что оно будет продолжать работать независимо от того, вошли ли пользователи в систему. Также можно настроить автоматический запуск. Я думаю, что поскольку вы используете реальное приложение, а не службу Windows, оно фактически не запускается после выхода из сеанса на сервере.

Вот пример проекта кода:

http://www.codeproject.com/KB/system/WindowsService.aspx

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