Вопрос

Мы используем Excel для преобразования SpreatSheetML в XLS в веб-сервисе ASP.NET.Более того, если пользователь устанавливает правильные флажки, мы создаем поток, который использует Excel для печати электронной таблицы.

Недавно мы развернули приложение в новой среде, и тут у нас начались проблемы:при первой попытке печати Excel зависает на сервере, т.е.звонок в PrintOut метод в книге никогда не возвращается.

Но если мы войдем на сервер под учетной записью пула приложений, откроем Excel, отправим что-нибудь на принтер и снова закроем его, с этого момента печать будет работать!

Я подозреваю, что Excel показывает invisible dialog - симптомы такие же, как и раньше, когда Excel, казалось, зависал в диалоговом окне «невозможно использовать связывание и внедрение объектов», которое появлялось при открытии Excel.

Я знаю, что использовать автоматизацию Office на стороне сервера — это плохо, но это устаревшее приложение, которое очень сложно изменить, поэтому, пожалуйста, не советуйте мне перепроектировать наше решение.

Был ли у кого-нибудь опыт подобного поведения?

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

Решение

Ну, похоже, ни у кого не было такой проблемы.

Самое странное, что мои ночные задания (обычные .NET .exe) вполне способны печатать — такая проблема возникает только у моих веб-сервисов.

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

Гораздо приятнее во всех отношениях!

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

У меня не было бесконечных проблем (низкая производительность, зависание процессов, сбой процессов и т. д.) при использовании Microsoft Excel, Word и PowerPoint посредством взаимодействия с веб-службой для печати документов Office в формате PDF.Я тоже сталкивался с проблемами, которые, как я подозреваю, связаны с невидимыми диалоговыми окнами (возможно, файл поврежден, установлен режим «только для чтения», файл защищен паролем или что-то еще).

Я знаю, что существуют инструменты, не использующие Office, но они очень дороги.Моим решением было перейти на автоматизацию OpenOffice.OpenOffice кажется гораздо более стабильным, и я оставил зависающие процессы и тому подобное.

Итак, хотя я и говорю «не автоматизируйте Microsoft Office», я не предлагаю вам вообще отказаться от автоматизации;просто у меня было много больший успех в автоматизации OpenOffice, чем в Microsoft Office.

Электронная таблицаGear для .NET может читать книги xls или xlsx и печатать на принтере по умолчанию без отображения каких-либо диалоговых окон (см. метод WorkbookView.Print()).

Вы можете скачать оценку здесь.

Отказ от ответственности:Я владею ООО SpreadsheetGear.

Как и многие люди, я иметь видел такое поведение.Это вызвано использованием API-интерфейсов Office на сервере, особенно в многопоточном приложении ASP.NET.

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


ОК, останови меня, если ты слышал этот один:

Мужчина задает вопрос на StackOverflow.Он говорит: «Итак, плохие вещи случаются, когда я автоматизирую приложение Office изнутри службы».Итак, Джон Сондерс говорит: «Итак, не автоматизируйте приложение Office изнутри службы.Автоматизируйте это из настольного приложения, как и намеревалась сделать Microsoft».

Когда поступает запрос на что-то, требующее Excel, вам следует создать процесс, запускающий приложение Windows Forms.Возможно, приложению придется запуститься без окна, или вам может потребоваться запустить его в контексте Удаленного рабочего стола связь.В любом случае выполняемая задача может быть передана как параметр командной строки, или программа может разместить службу WCF для отправки ей команд.

Эта программа может вызывать Excel так, как ожидает вызов Excel.Вероятно, он даже может обрабатывать более одной команды Excel (по одной за раз).Однако, если он зависнет, процесс можно завершить и запустить другой.

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

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