webBG - програмисти, машинно обучение, javascript, python, php, питам, говорим, публикации

Страницата на Asp.net увисва при конвертиране на word doc в html

Имам функция, която използвам, за да запазя word doc като html файл като част от уеб базиран преглед на документи. Той връща път към новосъздадения html файл, който след това се показва във вградена рамка. Поставих съдържанието му по-долу за справка.

Всичко това работи добре, когато стартирам уеб приложението от Visual Studio, но когато е инсталирано на IIS, то просто увисва. html файлът не е създаден.

Преди тази ситуация функцията би стигнала само до инстанциране на думата Application class; Получавах грешка по следния начин:

„Извличането на фабриката за COM клас за компонент {Guid-thing} не бе успешно поради следната грешка...“

Това беше разрешено, като отидете на Component Services --> Computers --> My Computer --> DCOM Config. Отидох до свойствата за защита на Документа на Microsoft Word 97 - 2003 и дадох разрешенията Локално стартиране и Локално активиране на потребителя/мрежата на IIS Обслужване. По-късно дадох и разрешения за Отдалечено стартиране и Отдалечено активиране.

Когато се опитам да прегледам документ, виждам в диспечера на задачите, под процеси, че WINWORD.exe е отворен от мрежовата услуга. Така че става по-далеч от преди. Но сега ми се струва, че или виси на редовете wordApp.Documents.Open или doc.SaveAs. Оставих го да работи до десет минути в точки, но никога не се достига време за изчакване или се показва грешка.

Уеб приложението е инсталирано в IIS 6, на Windows Server 2003 SP2

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 от рамките на кода е изключително предразположено към такъв проблем и (колкото и труден да изглежда съветът) наистина трябва да избягвате да правите това, което правите тук, на всяка цена.

Най-вероятно страдате от „безшумен потребителски интерфейс“. Трябва да има подкана на потребителския интерфейс на екрана, на която да отговорите, но поради контекста на изпълнение/и факта, че не сте влезли във въпросната машина, тя никога не се появява.

Други области, в които се сблъсквате, когато работите с неща на MS Office в тази форма, включват, когато изхвърляте обекти. Ако не получите това 100% перфектно, тогава ще имате огромно изтичане на памет във вашето приложение, което непрекъснато ще го сваля с времето. Открих, че ако пишете кода си, никога не свързвайте обаждания заедно и винаги присвоявайте всеки обект на променлива, преди да работите с него, това може да бъде малко по-лесно за постигане (тъй като можете да се разпореждате с всеки обект конкретно

Трябва също така да разгледате надграждането на формата на документа от 97/2003 до xml форматите на Office 2007 нататък. Размерът на файла е значително по-добър и е по-съвместим с последните продукти, които може да го преглеждат в мрежата вместо вас.

Трябва да попитате дали разходите за извършване на тази част от работата (правилно и надеждно) ще бъдат по-евтини от простото използване на собствените „Office Web Apps“ на Microsoft, до които имате достъп чрез SharePoint в рамките на предприятието, или чрез Office 365, който е на конкурентна цена и ви дава адски много повече от „просто перфектно гледане в мрежата“.

01.02.2014
  • Пуснах process explorer и имах гусък. Когато дадена заявка премине през състоянието на winword, се показва като Wait:WrUserRequest, което изглежда, че може би дава подкана, както казвате. Но това, което не мога да разбера е, че когато го стартирам в моята среда за разработка и winword се изпълнява под локалния потребителски акаунт, всичко работи добре. И в двата случая изглежда ще трябва да намеря друга опция, може би просто да предложа документа за изтегляне или нещо подобно. Благодаря. 01.02.2014
  • Office е проектиран да се изпълнява като текущия потребителски контекст. Наистина не е проектиран да се изпълнява без този контекст. 03.02.2014
  • Нови материали

    Как да предотвратите влизането на някой от вашата кодова база
    // TLDR TypeScript добавя статично въвеждане към JavaScript, улавяйки грешки като препращане към променливи извън обхвата или извикване на функции с грешни аргументи. Той е несъвършен и има..

    Анализ на настроението с помощта на логистична регресия и наивен Бейс
    Нека сравним кой алгоритъм е по-добър за класифициране на туитовете въз основа на техните чувства. Наблюдаван ML При контролираното машинно обучение обикновено имате вход X, който влиза във..

    Нови тенденции в AI и спорта
    Изкуственият интелект е авангардна технология, която дава възможност на машините да изпълняват задачи, които обикновено изискват човешки интелект, като вземане на решения, разпознаване на реч и..

    Графични теоретични алгоритми
    Автори:- Yash Gaherwar , Tanishq Deshpande , Devanshu Dalal , Avinash Dhakne В тази статия ще обсъдим една от най-важните теми на „ Анализ на дизайна на алгоритми“ , т.е. Графика . Ще..

    Samsung и услугата Polyfill
    Като разработчик харесвам услугата polyfill. Използвайки го, поправих стари проблеми със съвместимостта на IE, като добавих един маркер за скрипт. Полифилът е скрипт, внедряващ функция от..

    Оцветяване на графика Sudoku с Neo4j
    Бях щастлив да видя, че скорошна версия на графичните алгоритми Neo4j съдържа алгоритъма за оцветяване K-1 . Този алгоритъм се опитва да присвои цветове на възлите на графика по такъв начин, че..

    Как преподавате физика на модели за машинно обучение?
    Хибридни анализи: Комбиниране на най-доброто от два свята В другите си публикации съм обхванал теми като: Машинно обучение за откриване на аномалии и мониторинг на състоянието , как..