Excel зависает при первой печати из веб-службы ASP.NET - PullRequest
1 голос
/ 31 мая 2009

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

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

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

Я подозреваю, что в Excel отображается invisible dialog - симптомы те же, что и у нас, в то время, когда Excel, казалось, зависал в диалоге "невозможно использовать связывание и встраивание объектов", который появился при открытии Excel. 1009 *

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

Кто-нибудь сталкивался с подобным поведением?

Ответы [ 4 ]

1 голос
/ 08 сентября 2009

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

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

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

1 голос
/ 10 июня 2009

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

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

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

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

0 голосов
/ 05 августа 2009

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

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


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

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

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

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

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

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

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

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

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

...