2013-11-28 60 views
0

我有一個託管在IIS中的網站。 我的應用程序是關於寫入和從Excel文檔讀取數據的。在IIS中託管asp.net網站時清潔Com組件

當我從VS運行應用程序時,我總是看到只有一個EXCEL.exe 但是當我在IIS中託管相同的應用程序時,爲其創建一個Excel對象並在任務管理器中顯示,因此,有時我的網站停止響應。

下面是我的代碼

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

這是從ASP.NET或其他服務器技術使用Office互操作一個可怕的想法後創建新EXCEL.EXE 。這些API被編寫用於桌面應用程序,用於自動化Office(一套桌面應用程序)。服務器應用程序在許多方面有所不同,因此在其中使用Office Interop是非常非常糟糕的主意。它也不受Microsoft的支持,並可能違反您的Office許可證。請參閱[服務器端自動化Office的注意事項](http://support.microsoft.com/kb/257757) –

+0

是的,我轉移到打開XML,感謝您的建議。 – Ram

回答

-1

保存好excel後應關閉工作簿。因爲每次你創建NEA app.application將節省Excel中使用下面的代碼

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

首先'ex.Message'沒有足夠的信息進行故障排除。使用'ex.ToString()'。更重要的是,你的代碼在顯示消息後要做什麼? -1用於忽略異常。 –

+0

好的,先生。我只是試圖幫助關閉excel對象。他已經放置了try catch塊,所以我認爲他不需要使用我的try catch。對不起,下次我會照顧 –

+0

謝謝你的回答,但是當多個用戶試圖在excel上執行寫/讀操作時,excel進程將被終止,它將無法工作。 – Ram