Асинхронные операции (службы данных WCF)Asynchronous Operations (WCF Data Services)

Важно!

Службы данных WCF является устаревшим и больше не будет доступен для скачивания из центра загрузки Майкрософт.WCF Data Services has been deprecated and will no longer be available for download from the Microsoft Download Center. Службы данных WCF поддерживали только более ранние версии протокола Microsoft OData (v1-v3) и не были активны в рамках активной разработки.WCF Data Services supported earlier versions of the Microsoft OData (V1-V3) protocol only and has not been under active development. OData v1-v3 заменена OData версии 4, которая является отраслевым стандартом, опубликованным OASIS и ратифицирован по ISO.OData V1-V3 has been superseded by OData V4, which is an industry standard published by OASIS and ratified by ISO. OData v4 поддерживается в базовых библиотеках, совместимых с OData V4, доступных в Microsoft. OData. Core.OData V4 is supported through the OData V4 compliant core libraries available at Microsoft.OData.Core. Документация по поддержке доступна по адресу OData.NET, а библиотеки служб OData v4 доступны в Microsoft. AspNetCore. OData.Support documentation is available at OData.Net, and the OData V4 service libraries are available at Microsoft.AspNetCore.OData.

Рестиер — это последующий службы данных WCF.RESTier is the successor to WCF Data Services. Рестиер помогает в минутах запрашивать стандартизированный, поддерживающий запросы интерфейс RESTFUL на основе HTTP.RESTier helps you bootstrap a standardized, queryable, HTTP-based REST interface in minutes. Как и службы данных WCF, Рестиер предоставляет простые и понятные способы формирования запросов и перехвата отправок до и после попадания в базу данных.Like WCF Data Services before it, Restier provides simple and straightforward ways to shape queries and intercept submissions before and after they hit the database. И, как и веб-API + OData, у вас по-прежнему есть гибкость в добавлении собственных настраиваемых запросов и действий с помощью уже знакомых методов.And like Web API + OData, you still have the flexibility to add your own custom queries and actions with techniques you're already familiar with.

При разработке веб-приложений необходимо учитывать наличие большего времени задержки между клиентом и сервером по сравнению с приложениями, выполняющимися во внутренних сетях.Web applications must accommodate higher latency between client and server than applications that run inside internal networks. Чтобы оптимизировать производительность и взаимодействие с пользователем приложения, мы рекомендуем использовать асинхронные методы DataServiceContext DataServiceQuery<TElement> классов и при доступе к службы данных WCFным серверам через Интернет.To optimize the performance and user experience of your application, we recommend using the asynchronous methods of the DataServiceContext and DataServiceQuery<TElement> classes when accessing WCF Data Services servers over the Web.

Несмотря на то, что службы данных WCF серверы обрабатывают HTTP-запросы асинхронно, некоторые методы службы данных WCF клиентских библиотек являются синхронными и ожидают завершения всего обмена запроса-ответа до продолжения выполнения.Although the WCF Data Services servers process HTTP requests asynchronously, some methods of the WCF Data Services client libraries are synchronous and wait until the entire request-response exchange is completed before continuing execution. Асинхронные методы клиентских библиотек службы данных WCF не ожидают завершения этого обмена и могут позволить приложению поддерживать реагирующий пользовательский интерфейс.The asynchronous methods of the WCF Data Services client libraries do not wait for this exchange to complete and can allow your application to maintain a responsive user interface in the meantime.

Асинхронные операции можно выполнять с помощью пары методов в DataServiceContext DataServiceQuery<TElement> классах и, которые начинаются с Begin и End соответственно.You can perform asynchronous operations by using a pair of methods on the DataServiceContext and DataServiceQuery<TElement> classes that start with Begin and End respectively. Методы Begin регистрируют делегат, который служба вызывает при завершении операции.The Begin methods register a delegate that the service calls when the operation is complete. Методы End должны вызываться в делегате, зарегистрированном для обработчика обратного вызова из завершенных операций.The End methods should be called in the delegate that is registered to handle the callback from the completed operations. При вызове метода End для завершения асинхронной операции необходимо сделать это из того же DataServiceQuery<TElement> или DataServiceContext экземпляра, который использовался для начала операции.When you call the End method to complete an asynchronous operation, you must do so from the same DataServiceQuery<TElement> or DataServiceContext instance that you used to begin the operation. Каждый метод Begin принимает state параметр, который может передать объект состояния обратному вызову.Each Begin method takes a state parameter that can pass a state object to the callback. Этот объект состояния извлекается из IAsyncResult , который предоставляется вместе с обратным вызовом и используется для вызова соответствующего метода End для завершения асинхронной операции.This state object is retrieved from the IAsyncResult that is supplied with the callback and is used to call the corresponding End method to complete the asynchronous operation. Например, если передать экземпляр DataServiceQuery<TElement> в качестве параметра state при вызове применительно к экземпляру метода BeginExecute, тот же экземпляр DataServiceQuery<TElement> возвращается интерфейсом IAsyncResult.For example, when you supply the DataServiceQuery<TElement> instance as the state parameter when you call the BeginExecute method on the instance, the same DataServiceQuery<TElement> instance is returned by the IAsyncResult. Этот экземпляр DataServiceQuery<TElement> затем используется при вызове метода EndExecute для завершения операции запроса.This instance of DataServiceQuery<TElement> is then used to call the EndExecute method to complete the query operation. Дополнительные сведения см. в разделе инструкции. выполнение запросов асинхронной службы данных.For more information, see How to: Execute Asynchronous Data Service Queries.

Примечание

Клиентские библиотеки, предоставленные в среде .NET Framework для Silverlight, поддерживают только асинхронные операции.Only asynchronous operations are supported by the client libraries that are provided in the .NET Framework for Silverlight. Дополнительные сведения см. в разделе службы данных WCF (Silverlight).For more information, see WCF Data Services (Silverlight).

Клиентские библиотеки .NET Framework поддерживают следующие асинхронные операции.The .NET Framework client libraries support the following asynchronous operations:

ОперацияOperation МетодыMethods
Выполнение запроса DataServiceQuery<TElement>.Executing a DataServiceQuery<TElement>. - BeginExecute
- EndExecute
Выполнение запроса из контекста DataServiceContext.Executing a query from the DataServiceContext. - BeginExecute
- EndExecute
Выполнение пакетного запроса из контекста DataServiceContext.Executing a batch query from the DataServiceContext. - BeginExecuteBatch
- EndExecuteBatch
Загрузка связанной сущности в контекст DataServiceContext.Loading a related entity into the DataServiceContext. - BeginLoadProperty
- EndLoadProperty
Сохранение изменений в объектах контекста DataServiceContextSaving changes to objects in the DataServiceContext - BeginSaveChanges
- EndSaveChanges

Вопросы использования потоков в асинхронных операцияхThreading Considerations for Asynchronous Operations

В многопоточном приложении делегат, зарегистрированный в качестве обратного вызова для асинхронной операции, не обязательно вызывается в том же потоке, который использовался для вызова метода Begin , который создает первоначальный запрос.In a multi-threaded application, the delegate that is registered as a callback for the asynchronous operation is not necessarily invoked on the same thread that was used to call the Begin method, which creates the initial request. В приложении, где обратный вызов должен быть вызван в определенном потоке, необходимо явным образом маршалировать выполнение метода End , который обрабатывает ответ, в нужный поток.In an application where the callback must be invoked on a specific thread, you must explicitly marshal the execution of the End method, which handles the response, to the desired thread. Например, в приложениях на основе Windows Presentation Foundation (WPF) и на основе Silverlight необходимо выполнить маршалинг ответа обратно в поток пользовательского интерфейса с помощью метода BeginInvoke объекта Dispatcher.For example, in Windows Presentation Foundation (WPF)-based applications and Silverlight-based applications, the response must be marshaled back to the UI thread by using the BeginInvoke method on the Dispatcher object. Дополнительные сведения см. в разделе запросы к службе данных (службы данных WCF/Silverlight).For more information, see Querying the Data Service (WCF Data Services/Silverlight).

См. такжеSee also