Operaciones asincrónicas (WCF Data Services)
Las aplicaciones web deben tolerar una latencia superior entre cliente y servidor que las aplicaciones que se ejecutan en redes internas. Para optimizar el rendimiento y la experiencia del usuario de la aplicación, se recomienda usar los métodos asincrónicos de las clases DataServiceContext y DataServiceQuery<TElement> cuando se tenga acceso a los servidores de Servicios de datos de Microsoft WCF en la web.
Aunque los servidores de Servicios de datos de Microsoft WCF procesen solicitudes HTTP de forma sincrónica, algunos métodos de las bibliotecas de cliente de Servicios de datos de Microsoft WCF son sincrónicas y esperan hasta que se complete el intercambio completo de solicitudes y respuestas antes de continuar con la ejecución. Los métodos asincrónicos de las bibliotecas de cliente de Servicios de datos de Microsoft WCF no esperan a que se complete este intercambio y pueden permitir que la aplicación mantenga una interfaz de usuario que siga respondiendo mientras tanto.
Puede realizar operaciones asincrónicas usando un par de métodos de las clases DataServiceContext y DataServiceQuery<TElement> cuyos nombres comienzan por Begin y End, respectivamente. Los métodos Begin registran un delegado al que llama el servicio cuando se completa la operación. Se debe llamar a los métodos End en el delegado registrado para controlar la devolución de llamada desde las operaciones completadas. Cuando llame al método End para completar una operación asincrónica, debe hacerlo desde la misma instancia de DataServiceQuery<TElement> o DataServiceContext que usó para comenzar la operación. Cada método Begin toma un parámetro state que puede pasar un objeto de estado a la devolución de llamada. Este objeto de estado se recupera desde la interfaz IAsyncResult que se proporciona con la devolución de llamada y se usa para llamar al método End correspondiente para completar la operación asincrónica. Por ejemplo, cuando se proporciona la instancia de DataServiceQuery<TElement> como parámetro state al llamar al método BeginExecute de la instancia, IAsyncResult devuelve la misma instancia de DataServiceQuery<TElement>. A continuación, esta instancia de DataServiceQuery<TElement> se usa para llamar al método EndExecute para completar la operación de consulta. Para obtener más información, vea Cómo: Ejecutar consultas de servicio de datos asincrónicos (WCF Data Services).
Nota
Las bibliotecas de cliente que se proporcionan en .NET Framework para Silverlight solo admiten operaciones asincrónicas.Para obtener más información, vea WCF Data Services (Silverlight).
Las bibliotecas de cliente de .NET Framework admiten las siguientes operaciones asincrónicas:
Operación |
Métodos |
---|---|
Ejecutar una instancia de DataServiceQuery<TElement>. |
|
Ejecutar una consulta desde la instancia de DataServiceContext. |
|
Ejecutar una consulta por lotes desde la instancia de DataServiceContext. |
|
Cargar una entidad relacionada en DataServiceContext. |
|
Guardar los cambios efectuados en los objetos en la instancia de DataServiceContext |
Consideraciones sobre los subprocesos para las operaciones asincrónicas
En una aplicación multiproceso, al delegado que se registra como una devolución de llamada para la operación asincrónica no es necesario invocarle en el mismo subproceso que se usó para llamar al método Begin, encargado de crear la solicitud inicial. En una aplicación cuya devolución de llamada se debe invocar en un subproceso concreto, debe calcular explícitamente las referencias a la ejecución del método End, que controla la respuesta, para el subproceso deseado. Por ejemplo, en las aplicaciones basadas en Windows Presentation Foundation (WPF) y en las aplicaciones basadas en Silverlight, se deben calcular las referencias a la respuesta para el subproceso de interfaz de usuario mediante el método BeginInvoke en el objeto Dispatcher. Para obtener más información, vea Querying the Data Service (WCF Data Services/Silverlight).