Wir haben einen langen laufenden Bericht, der jetzt mit Reporting Services geplant wird. Dieser Bericht dauert etwa 40 Minuten und erzeugt einen CSV-Bericht von etwa 10 MB Daten. Wir bauen jetzt eine neue Asp.Net MVC-App auf und der Benutzer möchte, dass wir diesen lang laufenden Bericht in ASP.Net MVC bringen und die Reporting-Services beenden. Anfangs dachten wir daran, dies mit Task.Run/HostingEnvironment.QueueBackgroundWorkItem zu tun, aber wir sind aufgrund von Problemen mit der Wiederverwendung von App-Domains weggezogen, und wir möchten nicht, dass unser Worker-Prozess diese Last übernimmt.Langer Prozess in ASP.Net MVC
Derzeit planen wir, eine Befehlszeile C# exe zu erstellen, die die gespeicherte Prozedur ausführen und den CSV-Bericht in einem freigegebenen Ordner vorbereiten kann. Wir werden dann eine ASP.Net MVC-Ansicht haben, von wo aus Benutzer die Befehlszeilen-Exe durch die Methode system.diagnostics.process.start() initiieren kann. Der ASP.NET MVC zeigt den Bericht als herunterladbaren Link an, sobald der Prozess abgeschlossen ist. Wir werden eine Status-DB-Tabelle haben, die die EXE den Status aktualisieren kann, sobald der Prozess abgeschlossen ist, und die Asp.Net MVC-Ansicht kann dies verwenden, um den Status und den herunterladbaren Bericht anzuzeigen.
Gibt es eine bessere Möglichkeit, diese Anforderung zu erfüllen? Danke im Voraus!
Grüße, Bala
Warum entscheidet der Benutzer über technologische Entscheidungen? Aus technologischer Sicht klingt ein Reporting-Service zur Erstellung von Berichten mit langer Laufzeit ausgezeichnet. Warum in Rente gehen? – Maarten
Ein besserer Ansatz besteht darin, dass ein dedizierter Dienst (kein Webdienst) auf Berichtsanforderungen wartet. Verwenden Sie die Nachrichtenwarteschlange, damit die Nachricht beibehalten wird, und geben Sie sie an die Warteschlange zurück, oder entsperren Sie sie für den Fall, dass der Dienst fehlschlägt. 40 Minuten ist ein wirklich langer Prozess, der in Stücke zerlegt werden sollte (CQRS, Workflow, Saga, etc.). – acelent