Le process de génération de file excel sera-t-il exécuté sur les verrous de files de risque du server web?

Je me request si je dois faire quelque chose (enracinant, etc.) pour éviter que ma génération de file ne soit due à plus d'un user essayant d'exécuter simultanément le process de génération.

S'il y a un problème potentiel, je souhaite connaître toutes les idées pour éviter cela.

Aperçu de ma procédure.

  1. button des clics user pour lancer le process.
  2. Les données sont collectées à partir de la source de données / supprimées pour les tests.
  3. Template.xls est ouvert
  4. datatables sont insérées dans le model ouvert.
  5. SaveAs est appelé pour le file Excel ouvert.
  6. le process est répété jusqu'à ce que tous les files nécessaires soient créés.
  7. Tous les files ont été comprimés set
  8. l'user est informé si le process est terminé avec succès et vous invite à download le zip des files.

note: les valeurs du nom de file codé sont présentes car il s'agit d'une preuve de concept en ce moment.

Voir le code de génération ci-dessous

private Boolean GenerateExcelFile(int filenum, int totalfiles, int Year) { Ssortingng TemplateFilename = "C:\\exceldocs\\Templates\\OSHA300_Template.xls"; try { Excel._Application oXL; Excel._Workbook oWB; Excel._Worksheet oSheet; //Start Excel and get Application object. oXL = new Excel.Application(); oXL.Visible = false; //Open the workbook template. //oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value)); oWB = (Excel._Workbook)(oXL.Workbooks.Open(TemplateFilename)); oSheet = (Excel._Worksheet)oWB.ActiveSheet; oSheet.Cells[3, 11] = Year; oSheet.Cells[PAGEOFROW, PAGEOFCOL] = filenum + " of " + totalfiles; int currentexcelrow = STARTROW; foreach (OSHArow row in this) { FillOutRow(oSheet, row, currentexcelrow++); if (currentexcelrow == 38) { //break; } } FillOutSummaryRow(oSheet); File.Delete("C:\\exceldocs\\OshaOutput\\OSHA300_TestResult" + filenum + ".xls"); oWB.SaveAs("C:\\exceldocs\\OshaOutput\\OSHA300_TestResult" + filenum + ".xls"); oWB.Close(true); } catch (Exception e) { //TODO: configure an exception log. throw e; return false; } return true; } 

Vous préférez utiliser quelque chose comme la bibliothèque OpenXml. Vous pouvez écrire des feuilles Excel sur le vol vers les stream (puis returnner les stream en tant que FileResults pour l'user à download sur un file XLSX).

http://openxmldeveloper.org/