2014-02-01 1 views
1

У меня есть функция, которую я использую для сохранения слова 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; 
} 

ответ

1

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

Скорее всего, вы страдаете от «молчаливого приглашения ui». На экран должно появиться приглашение пользовательского интерфейса на экран, но из-за контекста выполнения/и того факта, что вы не вошли в систему, о котором идет речь, он никогда не появляется.

Другие области поиска при работе с материалами MS Office в этой форме включают, когда вы располагаете объектами. Если вы не получите этот 100% совершенный, тогда у вас будет огромная утечка памяти в вашем приложении, которая будет постоянно снижать ее с течением времени. Я обнаружил, что, если вы пишете свой код, никогда не связывайте цепочку вызовов и всегда назначайте каждый объект переменной перед тем, как работать с ним, что это может быть немного легче достичь (поскольку вы можете распоряжаться каждым объектом конкретно

Вы также должны посмотрите, как обновить формат документа с 97/2003 до xml-форматов Office 2007 и далее. Размер файла значительно лучше, и он более совместим с последними продуктами, которые могут просматривать его в Интернете.

Вы должны спросить, будут ли затраты на выполнение этой части работы (правильно и надежно) дешевле, чем просто использовать собственные «Office Web Apps» от Microsoft, к которым вы можете получить доступ через SharePoint на предприятии или через Office 365, который конкурентно стоит и дает вам чертовски много, что «просто идеальный просмотр в Интернете».

+0

Я активировал проводник процессов и имел gander. Когда запрос проходит через состояние winword, он отображается как «Wait: WrUserRequest», который выглядит так, возможно, дает подсказку, как вы говорите. Но я не могу понять, что когда я запускаю его в своей среде dev, а winword запускается под учетной записью локального пользователя, все работает отлично. В любом случае, мне кажется, мне нужно найти другой вариант, возможно, просто предложите документ для загрузки или что-то еще. Благодарю. – dbr

+0

Офис был разработан для использования в качестве текущего контекста пользователя. Это не было предназначено для выполнения без этого контекста. –

Смежные вопросы