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

StackOverflow https://stackoverflow.com/questions/602295

Вопрос

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

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

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

Сообщение:CrystalDecisions.Общий доступ.Исключение CrystalReportsException:Ошибка загрузки отчета

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

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

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

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

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

Редактировать:Две ошибки, которые я получаю, следующие:

Система.Среда выполнения.Службы взаимодействия.COMException (0x80000201):Указан недопустимый принтер .в CrystalDecisions.ReportAppServer.Контроллеры.Класс printoutputcontroller.Измените имя файла (строка Новое значение) в CrystalDecisions.CrystalReports.Движок.PrintOptions.set_printtername(строка значение) в Dsa.PrintServer.Обслуживание.Обслуживание.PrintCrystalReport (Отчет отчет)

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

И

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

Редактировать:

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

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

Это было полезно?

Решение

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

Этот принтер больше не существует, из-за чего отчет начал выходить из строя.По сути, нам пришлось открыть конструктор отчетов и удалить любую связь с принтерами в отчете.

Другие советы

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

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

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

Недавно мы столкнулись с множеством ошибок "Запрос не удалось отправить для фоновой обработки" и "Недопустимый принтер".На сервере одного клиента было несколько сетевых принтеров, определенных по IP-адресу.Какое-то время печать работала бы просто отлично, а затем внезапно, бам, клиент получил сообщение об ошибке "Недопустимый принтер" и позвонил в нашу службу поддержки.

Коллега-разработчик исправил проблему с "Недействительным принтером", выполнив все следующие действия:

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

"Page " + Left (CStr (PageNumber), Length (CStr (PageNumber)) - 3) +
" of " + Left (CStr (TotalPageCount), Length (CStr (TotalPageCount)) - 3)

к этому:

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

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

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

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

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

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

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

Как работает ваш операционный сервер?

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top