Я создал приложение .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 | Результат: НЕ НАЙДЕН | Другое: Атрибуты Ошибка