2012-04-04 68 views
0

我的應用程序使用Microsoft.Office.Interop.Excel服務來生成Excel報告並以PDF形式下載。如果多個用戶請求相同的頁面,我:e;同樣的服務,那麼第一個用戶可以得到結果,但後面的用戶會生成一些異常。我們可以通過爲每個用戶提供單獨的線程i:e來避免這種情況嗎?如果有人在跑步,那麼其他人必須等待幾秒鐘。使用每個用戶的線程訪問公共服務

這裏是我的代碼:

protected void btn2games_Click(object sender, ImageClickEventArgs e) 
    { 
     myfilepath = "acd.xlsx"; 

     try 
     { 
      string sr = Server.MapPath(myfilepath.ToString()); 


      if (File.Exists(myfilepath)) 
      { 
       File.Delete(myfilepath); 
      } 
     } 
     catch 
     { 
     }  

     ExceltoPdf(); 
    } 

protected void ExceltoPdf() 
{ 

//here the code goes : to fetch data from DB and write to Excel using Office.Interop.Excel 

} 
+0

嘗試獲得一些第三方組件,它們將創建您的Excel表格和PDF文件......在您的生產環境中安裝Excel並使其運行得非常正常(根據同事的帳戶)是一種痛苦... 對於pdfs,我一直在使用DynamicPdf,它一直運行良好。 – mortb 2012-04-04 08:30:25

+0

請與我們分享例外。這是一個Web應用程序或客戶端應用程序? – Slugart 2012-04-04 08:30:29

回答

1

辦公室庫未授權服務器使用(最後我選中),和COM互操作接口不是線程安全的。嘗試在Web應用程序中使用它們是不明智的。

許可問題放在一邊,你可以創造一次處理請求任何一個,或者是旋轉了多個子進程的排隊系統,使請求被提交給系統(可能是Windows服務) (不是線程......進程)同時處理多個請求。

雖然這可能不值得工程的努力。如果您使用Google「Excel to PDF」,您會發現不少第三方組件可用於服務器環境。由於缺乏直接經驗,我不能推薦任何具體的。

+0

客戶不想購買任何第三方工具。因此我必須走這條路。 我的應用程序工作完美高效。唯一的情況是,我必須爲罕見情況下的多個併發用戶運行它(最大用戶數<4,因爲這些用戶是管理員)。我認爲可以通過爲每個用戶使用單獨的線程來完成(我不確定這是什麼)。任何幫助非常感謝....... 在此先感謝 – Jyoti 2012-04-04 13:06:29