Compartilhar via


Cenários assíncronos usando HTTP, TCP ou pipe nomeado

Este tópico descreve as atividades e transferências de diferentes cenários de solicitação/resposta assíncrona, com solicitações multithreaded usando HTTP, TCP ou pipe nomeado.

Solicitação/resposta assíncrona sem erros

Esta seção descreve as atividades e transferências de um cenário de solicitação/resposta assíncrona, com clientes multithreaded.

A atividade de chamador termina quando são retornadas beginCall e endCall. Se um retorno de chamada for chamado, ele será retornado.

A atividade chamada termina quando são retornadas beginCall ou endCall, ou quando o retorno de chamada retorna caso tenha sido chamado a partir dessa atividade.

Cliente assíncrono sem retorno de chamada

A propagação está habilitada em ambos os lados, usando o HTTP

Asynchronous client with no callback where propagateActivity is set to true on both sides.

Se propagateActivity=true, ProcessMessage indicará para qual atividade ProcessAction será transferida.

Para cenários baseados em HTTP, ReceiveBytes é invocada na primeira mensagem a ser enviada e existira durante o tempo de vida da solicitação.

A propagação está desabilitada em ambos os lados, usando o HTTP

Se propagateActivity=false em ambos os lados, ProcessMessage não indicará para qual atividade ProcessAction fazer a transferência. Portanto, é invocada uma nova atividade temporária ProcessAction com uma nova ID. Quando a resposta assíncrona corresponder à solicitação no código ServiceModel, a ID da Atividade poderá ser recuperada do contexto local. A atividade ProcessAction real pode ser transferida com essa ID.

Asynchronous client with no callback where propagateActivity is set to false on either side.

Para cenários baseados em HTTP, ReceiveBytes é invocada na primeira mensagem a ser enviada e existira durante o tempo de vida da solicitação.

Uma atividade Process Action é criada em um cliente assíncrono quando propagateActivity=false no chamador ou receptor e quando a mensagem de resposta não incluir um cabeçalho Action.

A propagação está habilitada em ambos os lados, usando TCP ou Pipe Nomeado

Asynchronous client with no callback where propagateActivity is set to true on both sides and named pipe/TCP.

Para um cenário baseado em Pipe Nomeado ou TCP, ReceiveBytes é invocada quando o cliente é aberto e existe durante o tempo de vida da conexão.

Semelhante à primeira imagem, se propagateActivity=true, ProcessMessage indica para qual atividade ProcessAction fazer a transferência.

A propagação está desabilitada em ambos os lados, usando TCP ou Pipe Nomeado

Para um cenário baseado em Pipe Nomeado ou TCP, ReceiveBytes é invocada quando o cliente é aberto e existe durante o tempo de vida da conexão.

Semelhante à segunda imagem, se propagateActivity=false em ambos os lados, ProcessMessage não indicará para qual atividade ProcessAction fazer a transferência. Portanto, é invocada uma nova atividade temporária ProcessAction com uma nova ID. Quando a resposta assíncrona corresponder à solicitação no código ServiceModel, a ID da Atividade poderá ser recuperada do contexto local. A atividade ProcessAction real pode ser transferida com essa ID.

Asynchronous client with no callback where propagateActivity is set to false on either side and named pipe/TCP.

Cliente assíncrono com retorno de chamada

Esse cenário adiciona as atividades G e A’, para o retorno de chamada e endCall, e suas transferências de entrada/saída.

Esta seção demonstra apenas o uso do HTTP com propagateActivity=true. No entanto, as atividades e transferências adicionais também se aplicam aos outros casos (ou seja, propagateActivity=false, usando TCP ou Pipe Nomeado).

Quando o cliente chama o código do usuário, o retorno de chamada cria uma nova atividade (G) para notificar que os resultados estão prontos. O código do usuário chama endCall dentro do retorno de chamada (conforme mostrado na Figura 5) ou fora do retorno de chamada (Figura 6). Como não se sabe de qual atividade endCall do usuário está sendo chamada, essa atividade é rotulada como A’. É possível que A’ possa ser idêntica ou diferente de A.

Shows an asynchronous client with callback, endcall in callback.

Shows an asynchronous client with callback, endcall outside callback.

Servidor assíncrono com retorno de chamada

Shows an asynchronous server with callback.

A pilha de canais chama o cliente de volta no Recebimento de Mensagens: os rastreamentos para esse processamento são emitidos na própria atividade ProcessRequest.

Solicitação/resposta assíncrona com erros

Erros de mensagem de falha são recebidos durante endCall. Caso contrário, as atividades e transferências são semelhantes aos cenários anteriores.

Unidirecional assíncrono com ou sem erros

Nenhuma resposta ou falha é retornada ao cliente.