Opérations asynchrones (WCF Data Services)
Les applications Web doivent gérer une latence plus élevée entre le client et le serveur, comparé aux applications qui s'exécutent sur des réseaux internes. Pour optimiser la performance et l'expérience utilisateur de votre application, nous recommandons d'utiliser les méthodes asynchrones des classes DataServiceQuery et DataServiceContext lors de l'accès aux serveurs Services de données WCF sur le Web.
Bien que les serveurs Services de données WCF traitent les requêtes HTTP de façon asynchrone, certaines méthodes des bibliothèques clientes Services de données WCF sont synchrones et attendent la fin de l'échange demande-réponse avant de poursuivre l'exécution. Les méthodes asynchrones des bibliothèques clientes Services de données WCF n'attendent pas la fin de cet échange et permettent que votre application maintienne une interface utilisateur réactive en même temps.
Vous pouvez effectuer des opérations asynchrones à l'aide d'une paire de méthodes sur les classes DataServiceQuery et DataServiceContext qui démarrent avec Begin et End respectivement. Les méthodes Begin inscrivent un délégué appelé par le service lorsque l'opération est terminé. Les méthodes End doivent être appelées dans le délégué inscrit pour gérer le rappel des opérations terminées. Lorsque vous appelez la méthode End pour compléter une opération asynchrone, vous devez le faire de la même instance DataServiceQuery ou DataServiceContext utilisée pour commencer l'opération. Chaque méthode Begin prend un paramètre state qui peut passer un objet d'état au rappel. Cet objet d'état est récupéré de IAsyncResult qui est fourni avec le rappel et permet d'appeler la méthode End correspondante pour compléter l'opération asynchrone. Par exemple, lorsque vous fournissez l'instance DataServiceQuery comme paramètre state lorsque vous appelez la méthode BeginExecute sur l'instance, la même instance DataServiceQuery est retournée par IAsyncResult. Puis cette instance de DataServiceQuery est utilisée pour appeler la méthode EndExecute pour compléter l'opération de requête. Pour plus d'informations, consultez Procédure : exécuter des requêtes asynchrones de service des données (WCF Data Services).
Remarque : |
---|
Seules les opérations asynchrones sont prises en charge par les bibliothèques clientes fournies dans le .NET Framework pour Silverlight.Pour plus d'informations, consultez WCF Data Services (Silverlight). |
Les bibliothèques clientes .NET Framework prennent en charge les opérations asynchrones suivantes :
Opération | Méthodes |
---|---|
Exécution d'un DataServiceQuery. |
|
Exécution d'une requête du DataServiceContext. |
|
Exécution d'une requête par lot du DataServiceContext. |
|
Chargement d'une entité connexe dans DataServiceContext. |
|
Enregistrement des modifications apportées aux objets dans DataServiceContext |
Considérations sur le threading relatives aux opérations asynchrones
Dans une application multithread, le délégué inscrit comme un rappel pour l'opération asynchrone n'est pas nécessairement appelé sur le même thread que celui utilisé pour appeler la méthode Begin qui crée la demande initiale. Dans une application où le rappel doit être appelé sur un thread spécifique, vous devez marshaler explicitement l'exécution de la méthode End, qui gère la réponse, au thread souhaité. Par exemple, dans les applications WPF (Windows Presentation Foundation) et Silverlight, la réponse doit être remarshalée au thread de l'interface utilisateur en utilisant la méthode BeginInvoke sur l'objet Dispatcher. Pour plus d'informations, consultez Querying the Data Service (WCF Data Services/Silverlight).