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
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.
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
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.
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.
Servidor assíncrono com retorno de chamada
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.