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

При разработке веб-приложений необходимо учитывать наличие большего времени задержки между клиентом и сервером по сравнению с приложениями, выполняющимися во внутренних сетях. Для оптимизации производительности и взаимодействия приложения с пользователем рекомендуется использовать асинхронные методы классов DataServiceContext и DataServiceQuery при доступе к серверам Службы WCF Data Services через Интернет.

Хотя серверы Службы WCF Data Services обрабатывают запросы HTTP асинхронно, некоторое методы клиентской библиотеки служб Службы WCF Data Services являются синхронными и ожидают завершения всего обмена запрос-ответ до продолжения выполнения. Асинхронные методы клиентской библиотеки служб Службы WCF Data Services не ожидают завершения этого обмена и дают возможность приложению в это время поддерживать быстро реагирующий пользовательский интерфейс.

Асинхронные операции можно выполнять с помощью пары методов классов DataServiceContext и DataServiceQuery, которые соответственно начинаются со слова Begin и End. Методы Begin регистрируют делегат, который будет вызван службой по завершении операции. Методы End должны вызываться в делегате, зарегистрированном для обработки обратного вызова по завершении операций. При вызове метода End для завершения асинхронной операции сделать это нужно с использованием того же экземпляра DataServiceQuery или DataServiceContext, который использовался для запуска операции. Каждый метод Begin принимает параметр state, который может передавать объект состояния в метод обратного вызова. Этот объект состояния извлекается из интерфейса IAsyncResult, предоставляемого методом обратного вызова и используемого при вызове соответствующего метода End для завершения асинхронной операции. Например, если передать экземпляр DataServiceQuery в качестве параметра state при вызове применительно к экземпляру метода BeginExecute, тот же экземпляр DataServiceQuery возвращается интерфейсом IAsyncResult. Этот экземпляр DataServiceQuery используется затем при вызове метода EndExecute для завершения операции запроса. Дополнительные сведения см. в разделе Как выполнить асинхронные запросы службы данных (службы WCF Data Services).

Dd756365.note(ru-ru,VS.100).gifПримечание
Клиентские библиотеки, предоставленные в среде .NET Framework для Silverlight, поддерживают только асинхронные операции.Дополнительные сведения см. в разделе Службы данных WCF (Silverlight).

Клиентские библиотеки .NET Framework поддерживают следующие асинхронные операции.

Операция Методы

Выполнение запроса DataServiceQuery.

  • BeginExecute

  • EndExecute

Выполнение запроса из контекста DataServiceContext.

Выполнение пакетного запроса из контекста DataServiceContext.

Загрузка связанной сущности в контекст DataServiceContext.

Сохранение изменений в объектах контекста DataServiceContext

Вопросы использования потоков в асинхронных операциях

В многопоточном приложении делегат, зарегистрированный как метод обратного вызова для асинхронной операции, не обязательно вызывать в том же потоке, который использовался для вызова метода Begin, создавшего первоначальный запрос. В приложении, в котором метод обратного вызова должен быть вызван из определенного потока, необходимо выполнить явный маршалинг выполнения метода End, который обрабатывает ответ, в нужный поток. Например, в приложениях на основе Windows Presentation Foundation (WPF) и на основе Silverlight необходимо выполнить маршалинг ответа обратно в поток пользовательского интерфейса с помощью метода BeginInvoke объекта Dispatcher. Дополнительные сведения см. в разделе Querying the Data Service (WCF Data Services/Silverlight).

См. также

Другие ресурсы

Клиентская библиотека служб WCF Data Services