Ich verwende ASP.NET MVC und habe einen langen Prozess. Insbesondere erzeuge ich eine große PDF-Datei, die der Benutzer herunterladen kann.
Ich verstehe das Grundkonzept:
Die Teile, die ich nicht vollständig verstehe, sind:
HttpContext.Application
bewusst, wäre das dafür geeignet? Das Cashe ist dafür sehr gut geeignet. Es ist nur eine Sache, sicherzustellen, dass das zwischengespeicherte Objekt niemals entfernt wird, während der Prozess läuft (Sie können dafür ItemPriority.NotRemovable verwenden).
Sie können die Datei auf dem Datenträger im temporären Ordner speichern oder sie für einige Zeit im Cache behalten (abhängig davon).
Ich persönlich mag es nicht, Festplatten mit Dateien zu verschmutzen, so dass ich die Datei im Cache behalten würde (mit MediumPriority während einiger Minuten). Aber die Datei ist groß und kann oft mit der Datenbank des Dateisystems erstellt werden.
Auf dem Client, wenn die letzte Ajax-Anfrage das Ergebnis zurückgibt (kann aussehen wie {progress: "100%", resultUrl: " Ссылка "} ) Sie können den Browser auf eine URL umleiten Es wiederum wird diese Datei als binäres Ergebnis rendern.
Client Umleitung kann mit Javascript wie folgt durchgeführt werden:
%Vor%BTW, wie generieren Sie PDF? NFOP?
Es funktioniert!
Folgendes habe ich getan:
Schritt 1 & amp; 2 - Aktionsmethode wird aufgerufen, langer Thread wird gestartet
Wenn meine Aktionsmethode aufgerufen wird, wird eine eindeutige ID generiert. Ich instanziiere dann eine Instanz meiner Klasse PdfGenerator
, erstelle einen neuen Thread, der PdfGenerator.Generate
aufruft und starte ihn.
Sobald der Thread gestartet wurde (oder vor dem Start), wird die Generatorinstanz im Cache gespeichert:
%Vor%Ich füge auch die GUID an die ViewData an, so dass sie eine Referenz in meinem View-Skript sein kann.
Schritt 3 & amp; 4 - Anzeige und Aktualisierung der Status- / Fortschrittsanzeige
Jetzt, da der Thread ausgeführt wird und die PDF-Generierung begonnen hat, kann ich mein Fortschrittsansichtsskript anzeigen. Mit jQuerys $.getJSON
kann ich eine separate Aktion abfragen, um den Status der Generierung zu finden:
Mein Ansichtsskript interpretiert den JSON und zeigt die entsprechenden Fortschrittsinformationen an.
Schritt 5 - Datei dem Benutzer präsentieren
Sobald die Generierung abgeschlossen ist, wird der Status des Generators entsprechend festgelegt. Wenn jQuery diese Informationen erhält, kann er entweder einen Link zur Verfügung stellen oder die Datei direkt mit Javascripts location.href
senden.
Die Aktionsmethode, mit der die Datei eingerichtet und zurückgegeben wird, ruft den Generator einfach aus dem Cache ab und gibt das angehängte Byte []
zurück %Vor%Meine aktuelle Arbeit Ich habe einen detaillierteren Status wie Initialisiert, Laufen und Abgeschlossen. Zusätzlich zu einem Fortschrittsprozentsatz (ausgedrückt als Dezimalzahl, wobei 1,0 vollständig ist).
Also ja, hoffe, das hilft jedem, der etwas Ähnliches versucht.
Tags und Links asp.net-mvc