OperationContractAttribute.AsyncPattern Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает, что операция реализуется асинхронно с помощью пары методов Begin
<methodName> и End
<methodName> контракта службы.
public:
property bool AsyncPattern { bool get(); void set(bool value); };
public bool AsyncPattern { get; set; }
member this.AsyncPattern : bool with get, set
Public Property AsyncPattern As Boolean
Значение свойства
true
Значение , если метод methodName>соответствует методу<End
methodName> и может рассматриваться инфраструктурой как операция, реализованная в интерфейсе службы как пара асинхронных методов; в противном случае — значение false
.Begin
< Значение по умолчанию — false
.
Примеры
В приведенном ниже примере кода показан клиентский канал к контракту службы, который включает синхронную и асинхронную версии операции Add
. Если интерфейс контракта используется на клиенте, то операция BeginAdd
и операция Add
вызывают метод на сервере, который может быть или не быть синхронным. Если контракт используется для реализации службы, по умолчанию входящие запросы отправляются в синхронный метод.
[ServiceContract]
public interface IAddTwoNumbers
{
// If the asynchronous method pair
// appears on the client channel, the client can call
// them asynchronously to prevent blocking.
[OperationContract (AsyncPattern=true)]
IAsyncResult BeginAdd(int a, int b, AsyncCallback cb, AsyncState s);
[OperationContract]
int EndAdd(IAsyncResult r);
// This is a synchronous version of the BeginAdd/EndAdd pair.
// It appears in the client channel code by default.
[OperationContract]
int Add(int a, int b);
}
Комментарии
Используйте свойство AsyncPattern для создания операций службы, которые могут вызываться асинхронно на сервере, клиенте или на сервере и клиенте. Свойство AsyncPattern информирует среду выполнения о том, что метод Begin
имеет сопоставленный метод End
, соответствующий шаблону проектирования асинхронных методов платформы .NET Framework. Создание асинхронных методов сервера, которые реализуют операцию службы, увеличивает масштабируемость и производительность сервера, не влияя на клиентов службы, и рекомендуется, когда операция службы должна возвращать что-нибудь клиенту после выполнения очень длинной операции, которая может быть выполнена асинхронно.
Клиенты остаются незатронутыми, поскольку пара асинхронных методов на сервере представляет собой отдельную часть реализации, которая не затрагивает базовое описание операции на языке WSDL. Такие методы представляются клиентами как единая операция с <input>
сообщениями и коррелируются <output>
. WCF автоматически направляет входящие сообщения методу Begin
<methodName>, а результаты End
< вызова methodName> — исходящему сообщению. Клиентские каналы, следовательно, могут представлять пару методов либо как единственную синхронную операцию, либо как пару асинхронных операций. Ни в одном случае представление клиента никаким образом не влияет на асинхронную реализацию на сервере.
Клиентские контракты могут использовать свойство AsyncPattern, чтобы указать пару асинхронных методов, которые клиент может применять для асинхронного вызова операции. Как правило, клиентские приложения используют средство serviceModel Metadata Utility Tool (Svcutil.exe) и /async
параметр для создания<Begin
пары методов methodName> и End
<methodName>, которые клиент может использовать для асинхронного вызова операции.
Примечание
Если операция службы имеет асинхронную и синхронную версии, поведение по умолчанию в службе должно вызвать синхронную версию.