Mam operację asynchroniczną, która z różnych powodów musi zostać wywołana przy użyciu wywołania HTTP do strony internetowej ASP.NET. Kiedy moja strona jest żądana, powinna rozpocząć tę operację i natychmiast zwrócić potwierdzenie klientowi.Uruchamianie operacji asynchronicznej uruchamianej przez żądanie strony internetowej ASP.NET
Ta metoda jest również wyświetlana za pośrednictwem usługi WWW WCF i działa idealnie.
Na mojej pierwszej próbie, wyjątek został rzucony, mówiąc mi:
Asynchronous operations are not allowed in this context. Page starting an asynchronous operation has to have the Async attribute set to true and an asynchronous operation can only be started on a page prior to PreRenderComplete event.
więc oczywiście dodałem parametr Async="true"
z dyrektywą @Page
. Teraz nie otrzymuję błędu, ale strona jest blokowana, dopóki nie zakończy się operacja asynchroniczna.
Jak uzyskać dostęp do prawdziwej strony z zaporą i zapomnieniem?
Edytuj: Kod w celu uzyskania dalszych informacji. To trochę bardziej skomplikowane, ale starałem się stworzyć ogólny pomysł.
public partial class SendMessagePage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string message = Request.QueryString["Message"];
string clientId = Request.QueryString["ClientId"];
AsyncMessageSender sender = new AsyncMessageSender(clientId, message);
sender.Start();
Response.Write("Success");
}
}
Klasa AsyncMessageSender:
public class AsyncMessageSender
{
private BackgroundWorker backgroundWorker;
private string client;
private string msg;
public AsyncMessageSender(string clientId, string message)
{
this.client = clientId;
this.msg = message;
// setup background thread to listen
backgroundThread = new BackgroundWorker();
backgroundThread.WorkerSupportsCancellation = true;
backgroundThread.DoWork += new DoWorkEventHandler(backgroundThread_DoWork);
}
public void Start()
{
backgroundThread.RunWorkerAsync();
}
...
// after that it's pretty predictable
}
Trudno odpowiedzieć, nie widząc kodu, który wywołuje tę operację asynchroniczną. – Bryan
OK, zaktualizuję pytanie, podając więcej informacji. Dzięki. – Damovisa
Na platformie Azure można używać zadań sieci Web. Zobacz http://curah.microsoft.com/52143/using-the-webjobs-feature-of-windows-azure-web-sites wątków w tle na ASP.NET są problematyczne. – RickAndMSFT