Ich habe eine Anwendung, wo ich den Benutzer brauche, um ein Foto hochzuladen. Nachdem das Foto auf den Server hochgeladen wurde, was nicht sehr lange dauern sollte, sollte der Benutzer eine Antwort erhalten, die eine normale HTML-Seite ist, die sagt: "Danke ... bla bla bla ..."
Jetzt, nachdem die Antwort an den Client gesendet wurde und er seinen fröhlichen Weg geht, möchte ich, dass der Server an diesem Foto weiterarbeitet. Es muss etwas tun, was schwer ist und lange dauern würde. Aber das ist in Ordnung, weil der Benutzer auf nichts wartet. Er ist wahrscheinlich auf einer anderen Seite.
Also meine Frage ist, wie mache ich das mit ASP.NET.
Die Anwendung, die ich schreibe, ist in ASP.NET MVC, also stelle ich mir etwas wie
Aber ich denke, das ist nicht wirklich so. Auch, da ich manchmal mit ASP.NET WebForms arbeite, wie wird dies auch mit WebForms gemacht.
Danke!
Wir tun dies für eine leichte Protokollierung:
%Vor%Es ist keineswegs robust. Wenn Sie eine Garantie für die Verarbeitung benötigen, sollten Sie eine Nachrichtenwarteschlange in Betracht ziehen. Auf diese Weise können Sie die Verarbeitung auch auf einen separaten Computer verlagern und Ihren Webserver nicht behindern.
BEARBEITEN:
Das Folgende funktioniert auch und ist vielleicht etwas offensichtlicher für Ihren Kollegen. Es ist im Wesentlichen das Gleiche, aber scheinbar schneller und Sie brauchen sich keine Sorgen über den Aufruf von EndInvoke () zu machen.
%Vor%Weitere Informationen: Thread-Pool und asynchrone Methoden und Asynchronous delegate vs thread pool & amp; thread und Ruft EndInvoke nicht auf < em> wirklich verursacht ein Speicherleck?
Es scheint mir, als müssten Sie einen anderen Prozess ausgliedern, um das zu tun, was Sie tun müssen. Vielleicht möchten Sie sogar einen Windows-Dienst erstellen, um die Verarbeitung des Bildes zu übernehmen. Es könnte eine App sein, die darauf wartet, dass eine Datei irgendwo erscheint, und wenn sie es tut, kann sie zur Arbeit gehen und den asp.net-Thread verlassen, um ihre Arbeit zu erledigen.
Eine Möglichkeit, die ich in der Vergangenheit gemacht habe und die mit dem Webmodell gut funktioniert, ist eine "private" Seite / einen Webdienst, der für die Verarbeitung verantwortlich ist und auf einen Anruf wartet. Es ist ziemlich einfach, eine Seite asynchron mit einer anderen Seite zu sprechen und dann mit dem fortzufahren, was der Benutzer tut.
Ich bin kein ASP.NET-Programmierer, aber die Art, wie Sie das tun, ist normalerweise, einen anderen Thread auf dem Server zu starten, der diesen Hintergrund für Sie verarbeitet, während der ursprüngliche Thread die Ansicht zurückgibt und beendet.
Sehen Sie, ob Sie etwas finden können, wenn Sie nach "ASP.NET start Thread"
suchenEs sieht so aus, als müssten Sie einen zweiten Prozess haben, der sich um die zusätzliche Verarbeitung kümmert. Sie können entweder Ihre ursprüngliche Seite den Prozess starten lassen, oder Sie können eine eigenständige Anwendung haben, die einen Ordner abfragt und sie verarbeitet, sobald die Fotos ankommen. Auf diese Weise verhindern Sie auch, dass Ihr Webserver und der Arbeitsprozess belastet werden.
Ich würde wahrscheinlich einen Windows-Dienst erstellen, der auf dem Server ausgeführt wird und eine Fill-Queue verwendet, um das Foto zu verarbeiten. also würde dein
ändern %Vor%Auf diese Weise wird die eigentliche Verarbeitung des Fotos vollständig von der Website getrennt und Sie können nicht mehr alle Threads durchdrehen.
Colin G
Tags und Links asp.net-mvc asp.net