Office Interop с 64-битной Windows в ASP.NET - PullRequest
0 голосов
/ 23 июня 2009

Я пытаюсь выполнить взаимодействие с Office 2003 с использованием C # ASP.NET на сервере под управлением Windows 2003 64-битной (хотя я использую IIS в 32-битном режиме) и получаю сообщения об ошибках, такие как:

Настройки разрешений по умолчанию для компьютера не предоставляют разрешения локальной активации для приложения COM-сервера с CLSID {00024500-0000-0000-C000-000000000046} в домен пользователя \ SID имени пользователя (S-X-X-XX-XXX-XXXX-XXX-XXXXX). Это разрешение безопасности можно изменить с помощью инструмента администрирования служб компонентов.

Кто-нибудь знает, что мне нужно изменить, чтобы это работало? Спасибо, если вы можете помочь.

РЕДАКТИРОВАТЬ - Это работало нормально на 32-битном сервере.

РЕДАКТИРОВАТЬ 2 - Кажется, никому это не нравится, но я не уверен, что есть другие способы, учитывая наши требования. Если вы можете подумать об одном, я открыл еще один вопрос альтернатива-офис-взаимодействия для генерации документов

Ответы [ 5 ]

2 голосов
/ 23 июня 2009

Ни одно из приложений Office не работает должным образом при вызове из серверной среды. Их COM-интерфейсы предназначены для автоматизации рабочего стола, а не автоматизации из серверного приложения. Все, что вы делаете, чтобы заставить их работать, будет включать взломы, построенные на взломах, и обречено на провал.

Это оставляет в стороне тот факт, что у вас нет лицензии на запуск их из серверного приложения.


Исправление: Статья базы знаний Соображения по поводу автоматизации Office на стороне сервера действительно говорят о том, что вы имеете лицензию на автоматизацию продуктов Office на стороне сервера для использования, только если клиенты все лицензировано:

Помимо технических проблем, вы также должны рассмотреть вопросы лицензирования. Действующие руководящие принципы лицензирования запрещают использование приложений Office на сервере для обслуживания клиентских запросов, если только эти клиенты не имеют лицензированных копий Office. Использование автоматизации на стороне сервера для предоставления функциональных возможностей Office нелицензированным рабочим станциям не предусмотрено Лицензионным соглашением с конечным пользователем (EULA).

С другой стороны, в этой статье базы знаний перечислены многочисленные причины, по которым мы никогда этого не делаем. Они включают в себя:

  • Идентификация пользователя
  • Интерактивность с рабочим столом
  • Повторяемость и масштабируемость
  • Устойчивость и стабильность
  • Безопасность на стороне сервера

Я рекомендую эту статью базы знаний всем, кто рассматривает вопросы автоматизации продуктов Office на стороне сервера.

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

Как говорит Джон Сондерс, если не считать проблем с лицензированием, автоматизация Office не будет работать должным образом на стороне сервера.

Ознакомьтесь с OpenXML SDK, который вы можете использовать для достижения того же конечного результата. В частности, DocumentReflector поможет вам в этом.

http://blogs.msdn.com/alspeirs/archive/2008/12/09/generating-documents-with-c-open-xml-and-the-document-reflector.aspx

http://www.microsoft.com/downloads/details.aspx?FamilyID=c6e744e5-36e9-45f5-8d8c-331df206e0d0&DisplayLang=en

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

Как уже упоминалось, использование COM Interop в серверной среде не поддерживается Microsoft.

Сказав это, вы не указали, говорите ли вы о ASP.NET, WinForms, консольном приложении или ???. Вы можете обнаружить, что это будет работать, если вы создадите консольное приложение и установите целевой процессор в диспетчере конфигурации Visual Studio на x86 вместо любого процессора. Это заставит ваше приложение работать в 32-битном режиме на 64-битном сервере. Конечно, есть еще ряд других проблем, с которыми вы можете столкнуться, например, проблемы с разрешениями.

SpreadsheetGear для .NET протестировано и поддерживается в 64-битных средах W2K3 и 64-битных W2K8.

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

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

Я нашел ответ. Ищите справочник проблемы в regedit. Затем вы встретите ключ, который содержит два значения - имя компонента и его guid в службах компонентов.

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

Попробуйте запустить AppPool с более привилегированной идентификацией (щелкните правой кнопкой мыши AppPool и выберите вкладку Identity).

...