Вопрос или проблема
У меня есть веб-API на ASP.NET Core, я хочу печатать отчет сразу на локальном принтере в Stimulsoft Report (без предварительного просмотра), когда вызываю мой API. Мой код:
StiReport rpt = new StiReport() { UseProgressInThread = false };
rpt.Load(PrintTemplatePath);
rpt.RegBusinessObject("MyData", newData);
rpt.Print(false, new System.Drawing.Printing.PrinterSettings() { Copies = printCount, PrinterName = myPrinterName })
Все в порядке, когда я отлаживаю в Visual Studio IIS Express, но когда я публикую его на локальном хосте IIS, ниже возникает ошибка на строке rpt.Print(…..)
Показ модального диалогового окна или формы, когда приложение не работает в режиме UserInteractive, является недопустимой операцией. Укажите стиль ServiceNotification или DefaultDesktopOnly, чтобы отобразить уведомление из службы приложения. Показ модального диалогового окна или формы, когда приложение не работает в режиме UserInteractive, является недопустимой операцией. Укажите стиль ServiceNotification или DefaultDesktopOnly, чтобы отобразить уведомление из службы приложения.
Ответ или решение
Когда вы работаете с ASP.NET Core и используете Stimulsoft Reports для прямой печати отчетов на локальном принтере, важно учитывать несколько ключевых аспектов. Ваша проблема связана с режимом работы приложения на локальном IIS, когда код, который прекрасно работает в среде разработки (IIS Express), вызывает ошибку при развертывании.
Проблема
Ошибка, с которой вы столкнулись, связана с попыткой вызова модального диалога в неинтерактивной среде. Когда ваше приложение работает под управлением локального IIS, это означает, что оно может выполняться как служба, не имеющая доступа к пользовательскому интерфейсу. Таким образом, попытка использовать rpt.Print
для непосредственной печати приводит к следующему сообщению об ошибке:
Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation.
Почему это происходит
Когда вы запускаете приложение в Visual Studio с IIS Express, оно работает в контексте вашего пользователя. Однако, после публикации на локальном IIS, приложение может запускаться от имени другого пользователя или даже системы, что лишает его доступа к интерактивным элементам пользовательского интерфейса, включая диалоги печати.
Решение проблемы
Для решения проблемы с прямой печатью в Stimulsoft Reports при использовании локального IIS, вы можете предпринять следующие шаги:
-
Виртуальная принтерская служба: Вместо того чтобы печатать непосредственно на локальный принтер, рассмотрите возможность использования виртуальной принтерской службы или сервиса, который будет обрабатывать запросы на печать и взаимодействовать с физическими принтерами.
-
Конфигурация прав доступа: Убедитесь, что служба IIS имеет необходимые права доступа для работы с принтером. Вы можете рассмотреть возможность изменения пользователя, под которым запускается служба IIS, на пользователя, имеющего доступ к вашему принтеру.
-
Использование API для печати: Используйте более низкоуровневый API, например
System.Drawing.Printing
, который может предоставлять более гибкие методы для печати без необходимости использования диалоговых окон. -
Асинхронная печать: Реализуйте асинхронный подход к печати, при котором запросы на печать обрабатываются отдельно, не блокируя основной поток, что может помочь избежать ошибок, связанных с диалогами.
-
Отдельный сервис для печати: Вы можете создать отдельный сервис или демона, который будет отвечать за отправку запросов на печать. Это может быть простое консольное приложение, которое будет запущено с соответствующими правами доступа.
-
Использование Web API: Если это возможно, создайте Web API, который будет принимать запросы на печать и обрабатывать их в среде, имеющей доступ к необходимым ресурсам.
Заключение
Проблема с прямой печатью отчетов на локальном IIS является распространенной среди разработчиков, использующих Stimulsoft Reports в среде ASP.NET Core. Понимание различий в контексте выполнения ваших приложений поможет вам выбрать правильную стратегию для решения проблемы. Применяя предложенные решения, вы сможете успешно обойти ограничения и обеспечить эффективную печать отчетов без взаимодействия с пользовательским интерфейсом.