2014-02-21 5 views
5

Ich sende E-Mails asynchron mit ASP.NET. Mir ist aufgefallen, dass ich in der Ansicht "Async = true" einstellen muss.Wie kann ich Async = "true" für alle Seiten festlegen?

Die Masterseite unterstützt diese Eigenschaft nicht. Wie kann ich Async für alle Seiten festlegen?

+0

Hinweis, dass es sehr schwer ist, Feuer zu bekommen und Hintergrundarbeit direkt in ASP.NET vergessen. Sie sind wahrscheinlich nicht auf einem guten Weg. – usr

+2

Siehe http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/. Der Arbeitsprozess kann jederzeit abbrechen. Ihre Hintergrundarbeit ist dann verloren. – usr

+0

[Hier ist ein weiterer guter Blog-Beitrag] (http://blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html), der einige Optionen für die richtigen Arbeitsweisen im Hintergrund erklärt ASP.NET –

Antwort

2

Sie können es in der Masterseite so einstellen. Gefunden Lösung here:

public abstract class MyBasePage : System.Web.UI.Page 
{ 
    public MyBasePage() 
    { 
     this.AsyncMode = true; 
    } 
} 

Dann das Erbe in der aspx.cs Datei wie folgt zu etwas ändern:

public partial class WebForm1 : MyBasePage 

Es kann das System brechen, wenn Sie die AsyncMode Eigenschaft in etwas setzen anderes dann die Konstrukteur.

+0

das ist eine gute Idee. Es ist merkwürdig, dass diese Eigenschaft nicht in der automatischen Vervollständigung in Visual Studio angezeigt wird. Obwohl es kompiliert. – Seva

+1

Schön, huh! Sie setzen 'Browsable' auf' false', da sie nicht möchten, dass Sie es finden. Es kann das System beschädigen, wenn Sie dies in etwas anderem als dem Konstruktor festlegen. –

1

Öffnen Sie den Suchen-Dialog und geben Sie ein:

Find: @Page 
Replace with: @Page Async="True" 

die Schaltfläche Alle :-D Zu meinem Verständnis Ersetzen klicken, können Sie nicht nur, dass automatisch für alles. Es muss auf jeder einzelnen Seite definiert werden.

+0

Das stimmt. AsyncMode = true erlaubt keine asynchrone Verwendung (mit RegisterAsyncTask) – Zerkz

0

Anstatt zu versuchen, E-Mails im Seitencode von ASP.NET zu senden, warum nicht AJAX verwenden? Erstellen Sie eine ASPX-Datei, die wie ein Anmeldeformular auf einen POST reagiert, und senden Sie bei POST eine E-Mail. AJAX ist asynchron und Sie können den Fortschritt der aktiven Webseite anzeigen. Ein Intro zu AJAX finden Sie hier: http://www.w3schools.com/ajax/default.asp

Persönlich verwende ich jQuery, um meine AJAX-Arbeit zu tun. Sie können es überprüfen wollen out: http://jquery.com/

Und last but not least, wenn Sie lieber nicht "roll-your-own" Code, dies zu tun, eine Web-API für die Nachrichtenübermittlung wie Mandrill check out: http://mandrill.com/

1

Include tpl Referenzen. Dann tun Sie Task.Run (() => Sendmailmethod()); Dies ist die schnelle n ordentliche Feuer n vergessen Muster

+2

Das sollten Sie in einer ASP.NET-Anwendung nicht tun. Ihre AppDomain kann beendet werden, bevor Ihre 'Sendmailmethod()' abgeschlossen ist. Wenn Sie 4.5.2 oder neuer verwenden, verwenden Sie 'HostingEnvironment.QueueBackgroundWorkItem (() => Sendmailmethod()) 'stattdessen wird IIS wissen, dass eine Hintergrundaufgabe ausgeführt wird. Lesen Sie [diesen Blogbeitrag] (http://blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html) für weitere Informationen über QBWI und andere "Feuer und Vergessen" -Optionen für ASP .NET, wenn Sie nicht auf 4.5.2. –

+0

U r rite scott, aber das Herunterfahren von appdomain ist ein Remote-Ereignis, und IIS weiß immer noch, wenn Task.run bei einem ordnungsgemäßen Herunterfahren ausgelöst wird –

Verwandte Themen