2012-04-04 5 views
0

Meine Anwendung verwendet Microsoft.Office.Interop.Excel-Dienst, um einen Excel-Bericht zu generieren und als PDF herunterladen. Wenn mehr als ein Benutzer dieselbe Seite anfordert, wird i: e; Derselbe Benutzer kann das Ergebnis erhalten, aber der spätere Benutzer generiert eine Ausnahme. Können wir dies vermeiden, indem wir jedem Benutzer einzelne Threads zur Verfügung stellen? I: e; Wenn jemand läuft, müssen andere einige Sekunden warten.Verwenden von Threads pro Benutzer für den Zugriff auf einen gemeinsamen Dienst

sind hier mein Code:

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

Versuchen Sie, einige Komponenten von Drittanbietern zu bekommen, die Ihre Excel-Tabellen und PDFs stattdessen erstellen ... Installieren von Excel in Ihrer Produktionsumgebung und es zu laufen, ist historisch (nach Angaben von Kollegen) ein Schmerz gewesen ... Für PDFs habe ich DynamicPdf verwendet, es funktioniert gut. – mortb

+0

Bitte teilen Sie die Ausnahme mit uns. Ist das eine Web App oder eine Client App? – Slugart

Antwort

1

Die Office-Bibliotheken sind nicht für die Server-Einsatz zugelassen (zuletzt geprüft I) und die COM-Interop-Schnittstelle nicht Thread-sicher ist. Es ist unklug zu versuchen, sie in einer Webanwendung zu verwenden.

Licensing Fragen beiseite Sie, könnte ein Warteschlangen-System erstellen, die Anforderungen ermöglicht das System vorgelegt werden (vielleicht ein Windows-Dienst), den die Anfragen entweder einen nach dem anderen verarbeitet, oder vielleicht dreht sie eine Reihe von untergeordneten Prozessen bis (nicht Threads ... Prozesse), um mehrere Anfragen gleichzeitig zu bearbeiten.

Es ist wahrscheinlich nicht, dass Engineering-Aufwand, obwohl. Wenn Sie "Excel to PDF" googlen, finden Sie einige Komponenten von Drittanbietern, die in einer Serverumgebung verwendet werden sollen. Ich kann keine spezifische Empfehlung für den Mangel an direkter Erfahrung empfehlen.

+0

Der Kunde ist nicht daran interessiert, Tools von Drittanbietern zu kaufen. Daher muss ich diesen Weg gehen. Meine Anwendung funktioniert perfekt und effizient. Die einzige Sache ist, dass ich es für mehr als einen gleichzeitigen Benutzer für seltene Fälle laufen lassen muss (maximale Benutzer sind <= 4, da diese Benutzer admins sind). Ich denke, es kann getan werden, indem einzelne Threads für jeden Benutzer verwendet werden (ich bin mir nicht sicher darüber). Jede Hilfe wird sehr geschätzt ... Vielen Dank im Voraus – Jyoti

Verwandte Themen