Tengo una operación asincrónica que por diversos motivos debe activarse mediante una llamada HTTP a una página web ASP.NET. Cuando se solicita mi página, debe comenzar esta operación e inmediatamente devolver un reconocimiento al cliente.Ejecutar una operación asincrónica provocada por una solicitud de página web ASP.NET
Este método también se expone a través de un servicio web WCF, y funciona perfectamente.
En mi primer intento, ha generado una excepción, diciéndome:
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.
Así que por supuesto añadió el parámetro Async="true"
a la directiva @Page
. Ahora, no obtengo un error, pero la página se está bloqueando hasta que se complete la operación asincrónica.
¿Cómo obtengo una verdadera página de "olvídate del fuego" trabajando?
Editar: Algunos códigos para obtener más información. Es un poco más complicado que esto, pero traté de tener una idea general allí.
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");
}
}
La clase 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
}
Es difícil de responder sin ver el código que llama a esta operación asíncrona. – Bryan
Ok, actualizaré la pregunta con más información. Gracias. – Damovisa
En Azure, puede usar trabajos web. Consulte http://curah.microsoft.com/52143/using-the-webjobs-feature-of-windows-azure-web-sites Los subprocesos de fondo en ASP.NET son problemáticos. – RickAndMSFT