Нещодавно я зробив онлайн-проєкт з групування робіт. Основні функції займаються набором тексту, попереднім переглядом і створенням тестових робіт. Коли мова йде про операції зі словами на початку, на думку спадає компонент офісного COM для роботи з Word. Написання коду для всієї системи зайняло близько двох тижнів. Потім я почав тестувати знову і знову, почувався добре локально, зміг плавно створити тестову роботу для Word, і продуктивність була нормальною. Тож я не міг дочекатися, щоб випустити його на сервер.
Перша полягає в тому, що компонент із CLSID {000209FF-0000-0000-C000-000000046} у фабриці COM виходить з ладу через таку помилку: 8000401a Система не може запустити серверний процес через неправильний ідентифікатор конфігурації. Будь ласка, перевірте ім'я користувача та пароль. (Виняток із HRESULT:0x8000401A).
По-перше, усі ці проблеми спричинені дозволами, і рішенням є просто налаштування дозволів. Корисний не лише для Excel і Word, а й для всіх продуктів Office.
Щоб перейти до суті, спочатку введіть dcomcnfg під час запуску, відкрийте component service manager->component service->my computer->DCOM-> знайдіть відповідний документ Microsoft Excel/Microsoft Word 97-2003, а потім клацнути правою кнопкою миші по атрибуту, щоб активувати дозвіл на завантаження, достатньо, щоб отримати OK. -------- немає проблем — ця проблема вирішена.
Давайте поговоримо про другу ситуацію — «Проблема продуктивності»: оскільки наша система є наступною підсистемою нашого сайту. Отже, існує певна база користувачів. Система була доступна великою кількістю користувачів одразу після її запуску. Спочатку щодня групувалося чотири-п'ятсот газет, і поступово обсяг статей ставав дедалі більшим, що стало початком проблем із системою. Перша полягає в тому, що в процесі є багато winWord.exe процесів. Це не може закінчитися. Хоча системний код містить процес виходу і переробляє ресурси, проблема так і не вирішується. Наслідком великої кількості winword.exe процесів є уповільнення сервера. Для цього компонента це має бути особливо багато пам'яті.
Вирішити цю проблему неможливо. Останнім шахраєм було написання таймінг-сервісу, який знищив процес winword, що не працював. Це лікує симптоми, але не корінь причини. 、
Тут я хочу сказати, що Microsoft Office — це настільне офісне додаткне програмне забезпечення, розроблене переважно для звичайних користувачів, воно має багаті елементи інтерфейсу користувача і є набором чисто локального або клієнтського програмного забезпечення. Інтерфейс автоматизації Word насамперед розроблений для полегшення викликів віконних додатків. Наприклад, нативні додатки, розроблені Delphi, VB, C#, Winform тощо. Хоча можна змусити Visible бути хибним, а Word може працювати у серверному коді, це все одно створює багато складних проблем.
1. ASP.NET базується на архітектурі B/S. У архітектурі B/S доступ користувача здійснюється одночасно, що означає, що N користувачів часто одночасно роблять запити на сторінку сервера. У цьому випадку автоматизація Word виклик часто час від часу перестає працювати.
2. Через роботу прихованого інтерфейсу деякі інтерфейси, які можна успішно викликати у віконній програмі, не можуть викликати на стороні сервера або навіть збуватимуть, що часто призводить до несправності процесів.
3. Оскільки Word — це складна настільна програма, яка не відповідає стандартам загальних веб-сервісів за простотою та ефективністю, вона повільно працює на серверній стороні і споживає багато ресурсів (CPU, пам'ять), особливо не може одночасно підтримувати велику кількість користувачів, і ресурси швидко вичерпаються.
4. Більшість розробників відносно мало знайомі з технологією COM, і часто трапляються помилки коду під час програмування та виклику інтерфейсу Word, і важко перевірити цю проблему, що часто є фактором, що спричиняє мертві процеси. Мертві процеси Word не лише споживають ресурси сервера, а й часто призводять до того, що сторінки серверів не створюють нові об'єкти автоматизації Word і продовжують працювати. Деякі користувачі запропонували рішення мертвого процесу: програмування для знищення мертвого процесу Word, що є практикою лікування симптомів, але не корінної причини, мертвий процес Word зник, але аномальне закриття Word призведе до того, що багато ресурсів не зможуть бути звільнені вчасно. Як довго такий вебсервер прослужить — важко сказати.
Для вирішення цих проблем після ретельного дослідження та порівняння автор виявив, що в Інтернеті є компонент aspose.words, який повністю усуває вищезазначені проблеми і рекомендує поділитися з вами.
Нижче я поділюся з вами деяким кодом роботи компонента aspose.words у надії, що це буде корисно тим, хто цього потребує
Оригінальне посилання: http://blog.csdn.net/fraing/article/details/8989736
|