Поделиться через


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>соответствует методу<EndmethodName> и может рассматриваться инфраструктурой как операция, реализованная в интерфейсе службы как пара асинхронных методов; в противном случае — значение 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>, которые клиент может использовать для асинхронного вызова операции.

Примечание

Если операция службы имеет асинхронную и синхронную версии, поведение по умолчанию в службе должно вызвать синхронную версию.

Применяется к