У меня есть функция, которую я использую для сохранения слова doc в виде файла html, как часть веб-документа просмотра документов. Он возвращает путь к вновь созданному html-файлу, который затем отображается в iframe. Я применил его содержимое ниже для справки.Страница Asp.net зависает при преобразовании слова doc в html
Все это прекрасно работает, когда я запускаю веб-приложение из визуальной студии, но когда он установлен на IIS, он просто зависает. Файл html не создается.
В этой ситуации функция только дошла до экземпляра класса Application; Я получаю сообщение об ошибке по линии:
«Получение COM фабрики классов для компонента {Guid-вещь} не удалось из-за следующей ошибки ...»
Это была решена путем идти to Услуги для компонентов -> Компьютеры -> Мой компьютер -> DCOM Config. Я перешел к свойствам безопасности Microsoft Word 97 - 2003 Docment и дал разрешения Локальный запуск и Локальная активация пользователю/сетевому сервису IIS. Позже я также дал Удаленный запуск и Удаленная активация разрешений.
Когда я пытаюсь просмотреть документ, я вижу в диспетчере задач под процессами, что WINWORD.exe был открыт Network Service. Так оно и дальше, чем раньше. Но теперь мне кажется, что он либо висит на wordApp.Documents.Open или doc.SaveAs строк. Я оставил его в течение десяти минут в точках, но ни один тайм-аут никогда не попадал, или ошибка отображается.
установлено веб-приложение в IIS 6 на Windows Server 2003 с пакетом обновления 2
private string WordToHTML(string filePath)
{
string returnPath = String.Empty;
Microsoft.Office.Interop.Word.Document doc = null;
object missing = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Word.Application wordApp = null;
try
{
// Initialise
string serverFolderPath = Path.GetDirectoryName(filePath);
string fileToOpen = filePath;
string FileToSave = Path.GetFileNameWithoutExtension(fileToOpen) + ".html";
// Open Word
wordApp = new Microsoft.Office.Interop.Word.Application();
// Get Doc
doc = wordApp.Documents.Open(fileToOpen, ref missing, true, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, false, ref missing, ref missing,
ref missing, ref missing);
// If html file already exists, delete it
returnPath = String.Format("{0}\\{1}", serverFolderPath, FileToSave);
if (File.Exists(returnPath))
File.Delete(returnPath);
// Save as HTML document
doc.SaveAs(returnPath, 10, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing);
}
catch (Exception ex)
{
throw ex;
}
finally
{
doc.Close(ref missing, ref missing, ref missing);
wordApp.Quit(ref missing, ref missing, ref missing);
}
return returnPath;
}
Я активировал проводник процессов и имел gander. Когда запрос проходит через состояние winword, он отображается как «Wait: WrUserRequest», который выглядит так, возможно, дает подсказку, как вы говорите. Но я не могу понять, что когда я запускаю его в своей среде dev, а winword запускается под учетной записью локального пользователя, все работает отлично. В любом случае, мне кажется, мне нужно найти другой вариант, возможно, просто предложите документ для загрузки или что-то еще. Благодарю. – dbr
Офис был разработан для использования в качестве текущего контекста пользователя. Это не было предназначено для выполнения без этого контекста. –