2013-11-28 2 views
0

У меня есть веб-сайт, размещенный в IIS. Мое приложение относится к написанию и чтению данных в/из документа Excel.Компоненты Clean Com при размещении сайта asp.net в IIS

Когда я запускаю приложение из VS, я все время вижу только один EXCEL.exe Но когда я размещаю одно и то же приложение в IIS, для каждого написания его создания одного объекта excel и отображения в Task-manager, Поэтому иногда мой сайт перестает отвечать.

Ниже мой код

try 
      { 
       xlApp = new app.Application(); 
       xlWorkBooks = xlApp.Workbooks;   
       xlWorkBook = xlWorkBooks.Open(FilePath, missing, false, missing, missing, missing, true, missing, missing, true, missing, missing, missing, missing, missing); 
       xlWorkSheet = xlWorkBook.Worksheets.get_Item(index); 
//code ……………………………. 
       xlApp.DisplayAlerts = false; 
       xlWorkBook.Save(); 
       boolWriteSuccess = true; 
       xlApp.DisplayAlerts = true; 
      } 
Catch() 
{ 
}    
      finally 
      { 
       GC.Collect(); 
       GC.WaitForPendingFinalizers(); 
       Marshal.FinalReleaseComObject(xlWorkSheet); 
       Marshal.FinalReleaseComObject(xlWorkSheets); 
       xlWorkBook.Close(Type.Missing, Type.Missing, Type.Missing); 
       Marshal.FinalReleaseComObject(xlWorkBook); 
       xlWorkBooks.Close(); 
       Marshal.FinalReleaseComObject(xlWorkBooks); 
       if (xlApp != null) 
        xlApp.Quit(); 
       Marshal.FinalReleaseComObject(xlApp); 
      } 

Вот снимок экрана диспетчера задач, когда веб-сайт размещен в IIS enter image description here

Я хочу, чтобы очистить Excel.exe от диспетчера задач всегда, но некоторые, как я Невозможно очистить. Пожалуйста, помогите мне в этом.

+0

Это ужасная идея использовать Office, Interop из ASP.NET или другой серверной технологии. Эти API были написаны для использования в настольном приложении для автоматизации Office (набор настольных приложений). Серверные приложения во многом отличаются друг от друга, что делает очень и очень плохой вариант использования Office Interop. Он также не поддерживается Microsoft и может нарушить вашу лицензию Office. См. [Соображения для автоматизации на стороне сервера Office] (http://support.microsoft.com/kb/257757) –

+0

Да, я перешел на открытие XML, спасибо за предложение ur. – Ram

ответ

-1

После сохранения отличия вы должны закрыть книгу. так как каждый раз, когда вы создаете Неа app.application это создаст новый Excel.exe после сохранения первенствует использовать ниже код

try { 
foreach (Process proc in Process.GetProcessesByName("Excel")) 
     { 
      proc.Kill(); 
     }}catch(Exception ex){ 
MessageBox.Show(ex.Message);} 
+0

Прежде всего «ex.Message» недостаточно информации для устранения неполадок. Используйте 'ex.ToString()'. Что еще более важно, что будет делать ваш код после отображения сообщения? -1 для игнорирования исключения. –

+0

ok сэр. я просто пытаюсь помочь закрыть объекты excel. и он уже разместил блок catch try, поэтому я думал, что ему не нужно использовать мой try catch. извините, я позабочусь в следующий раз –

+0

Спасибо за ответ, но он не будет работать, если несколько пользователей попытаются выполнить операцию записи/чтения на excel, поскольку процессы excel будут убиты. – Ram

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