2009-05-31 2 views
1

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

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

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

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

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

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

ответ

1

Ну, никто, кажется, имел эту проблему.

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

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

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

0

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

Загрузить Оценка here.

Отказ от ответственности: У меня есть SpreadsheetGear ООО

-2

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

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


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

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

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

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

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

+0

Я ЗНАЮ, что мы застрелились в ноге, я просто спрашиваю, как лучше всего восстановить :) Я имел в виду, что я просто не могу использовать ответ вроде «просто не используйте автоматизацию Office» - т.е. я был спрашивая КОНСТРУКТИВНЫЕ ответы. – mookid8000

+0

Вы слышали анекдот старого Генни Юнга: «Человек идет к доктору, он говорит:« Доктор, мне больно, когда я это делаю », доктор говорит:« Тогда не делай этого! ». Вы говорите, что стреляете в ногу, вы спрашиваете, как избежать порошковых ожогов и пулевых отверстий, но вы не станете пистолетом. –

1

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

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

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

+0

Возможно, что OpenOffice был разработан для автоматизации в серверной среде. Скорее всего, Microsoft Office не был. –