Documents.Add завершается ошибкой в ​​ASP.NET (VB.NET) - PullRequest
3 голосов
/ 24 марта 2011

У меня проблема с открытием документа с помощью Microsoft Word из ASP.NET MVC .

. Это прекрасно работает на моем компьютере разработчика, но не при развертывании на IIS..

Dim word = New Microsoft.Office.Interop.Word.Application

'This line is failing to return a document object
Dim letter = word.Documents.Add(letter_doc_path)

'This line then fails due to [letter] being null
letter.MailMerge.OpenDataSource(csvPath)

Я добавил разрешения в «Службы компонентов» (dcomcnfg) для пользователя NETWORK SERVICE, который в первую очередь разрешает создание объекта Word, но я совершенно застрял какчтобы сделать с этим.

Я также пытался подавить диалоги Word со следующей строкой на всякий случай

word.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone

Проблема не устраняется из-за отсутствия ошибки (кромессылка на нулевой объект, очевидно) - может быть, есть способ запросить Word для конкретного сообщения об ошибке?

Ответы [ 3 ]

4 голосов
/ 25 марта 2011

Word требует файл шаблона normal.dot при открытии любого документа, проблема возникла из-за того, что у пользователя IIS не было места для создания файла normal.dot, поэтому он не работал в фоновом режиме.

Это было исправлено путем установки пути UserTemplate для вновь созданного экземпляра слова (сразу после его создания).

Путь должен быть доступен для записи пользователем IIS (в моем случае - NETWORK SERVICE).

word.Options.DefaultFilePath(Microsoft.Office.Interop.Word.WdDefaultFilePath.wdUserTemplatesPath) = working_folder

Так что для полноты приведем оригинальный пример с включенной выигрышной линией:

Dim word = New Microsoft.Office.Interop.Word.Application

'this line fixed it
word.Options.DefaultFilePath(Microsoft.Office.Interop.Word.WdDefaultFilePath.wdUserTemplatesPath) = working_folder

Dim letter = word.Documents.Add(letter_doc_path)
0 голосов
/ 28 марта 2011

У меня возникла та же проблема, и настроек, предложенных wheelibin, было недостаточно для создания документов с использованием учетной записи NETWORK SERVICE.

В итоге я сделал:

  • Создайте учетную запись пользователя для запуска этого процесса.

  • Войдите в систему как пользователь и запустите Word (это выполняет различные задачи настройки в Word, поэтому приложение не пытается поставитьмодальные диалоговые окна при запуске в качестве службы).

  • Создайте новый пул приложений и настройте пул для запуска в качестве учетной записи пользователя.

Если вы используете проверку подлинности Windows, а ваш сервер - Windows 2003 (или, предположительно, 2000), то эта проблема применима, и вам нужно либо изменить имя участника-службы сервера, что нарушит проверку подлинности Windows длялюбое приложение, работающее под другой учетной записью пользователя, или вам нужно переключить провайдера аутентификации на NTLM вместо Kerberos.

IIS 7 может использовать аутентификацию в режиме ядра, чтобы избежатьЭлектронный выпуск.

0 голосов
/ 24 марта 2011
...