OperationContractAttribute.AsyncPattern Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Indica que uma operação é implementada de forma assíncrona usando um Begin
<par de métodos methodName> e End
<methodName> em um contrato de serviço.
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
Valor da propriedade
true
se o Begin
<methodNamemethod> for correspondido por um End
< método methodName> e puder ser tratado pela infraestrutura como uma operação implementada como um par de métodos assíncrono na interface do serviço; caso contrário, false
. O padrão é false
.
Exemplos
O exemplo de Add
código a seguir mostra um canal cliente para um contrato de serviço que inclui uma versão síncrona e uma versão assíncrona. Se a interface do contrato for usada no cliente, a operação e Add
a BeginAdd
operação invocarão um método no servidor que pode ou não ser síncrono. Se o contrato for usado para implementar o serviço, o padrão é que as solicitações de entrada sejam enviadas para o método síncrono.
[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);
}
Comentários
Use a AsyncPattern propriedade para criar operações de serviço que podem ser chamadas de forma assíncrona no servidor, no cliente ou em ambos. A AsyncPattern propriedade informa ao runtime que um Begin
método tem um método correspondente End
que está em conformidade com o padrão de design de método assíncrono .NET Framework. Criar métodos assíncronos do servidor que implementam uma operação de serviço aumenta a escalabilidade e o desempenho do servidor sem afetar os clientes do serviço e é recomendado quando uma operação de serviço deve retornar algo ao cliente depois de executar uma operação longa que pode ser executada de forma assíncrona.
Os clientes permanecem não afetados porque o par de métodos assíncronos no servidor é um detalhe de implementação que não afeta a descrição subjacente da WSDL (Linguagem de Descrição dos Serviços Web) da operação. Esses métodos aparecem para clientes como uma única operação com <input>
mensagens correlacionadas e com mensagens correlacionadas <output>
. O WCF roteia automaticamente as mensagens de entrada para o Begin
<methodName> método e roteia os resultados da End
<methodName> chamada para a mensagem de saída. Os canais do cliente, portanto, podem representar o par de métodos como uma única operação síncrona ou como um par de operações assíncronas. Em nenhum caso, a representação do cliente afeta a implementação assíncrona no servidor de qualquer forma.
Os contratos de cliente podem usar a AsyncPattern propriedade para indicar um par de métodos assíncronos que o cliente pode usar para invocar a operação de forma assíncrona. Normalmente, os aplicativos cliente usam a ferramenta ServiceModel Metadata Utility Tool (Svcutil.exe) e a opção /async
de gerar um par e End
<methodName> método Begin
<methodName> que o cliente pode usar para invocar a operação de forma assíncrona.
Observação
Se uma operação de serviço tiver uma versão assíncrona e síncrona, o comportamento padrão no serviço será invocar a versão síncrona.