Cenários assíncronos usando HTTP, TCP ou Named-Pipe
Este tópico descreve as atividades e transferências para diferentes cenários assíncronos de solicitação/resposta, 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 para um cenário assíncrono de solicitação/resposta, com clientes multithreaded.
A atividade do chamador termina quando beginCall
retorna e endCall
retorna. Se um retorno de chamada for chamado, o retorno de chamada retornará.
A atividade chamada termina quando beginCall
retorna, endCall
retorna ou quando o retorno de chamada retorna se foi chamado a partir dessa atividade.
Cliente assíncrono sem retorno de chamada
A propagação está habilitada em ambos os lados, usando HTTP
Se propagateActivity=true
, ProcessMessage indica para qual atividade ProcessAction deve ser transferida.
Para cenários baseados em HTTP, ReceiveBytes é invocado na primeira mensagem a ser enviada e existe durante o tempo de vida da solicitação.
A propagação está desativada em ambos os lados, usando HTTP
Se propagateActivity=false
estiver em ambos os lados, ProcessMessage não indica para qual atividade ProcessAction transferir. Portanto, uma nova atividade temporária ProcessAction com uma nova ID é invocada. Quando a resposta assíncrona é correspondida à solicitação no código ServiceModel, o ID da atividade pode ser recuperado do contexto local. A atividade ProcessAction real pode ser transferida para com esse ID.
Para cenários baseados em HTTP, ReceiveBytes é invocado na primeira mensagem a ser enviada e existe durante o tempo de vida da solicitação.
Uma atividade de Ação de Processo é criada em um cliente assíncrono quando propagateActivity=false
está no chamador ou chamador e quando a mensagem de resposta não inclui um cabeçalho de Ação.
A propagação está habilitada em ambos os lados, usando TCP ou pipe nomeado
Para um cenário baseado em Named-Pipe ou TCP, ReceiveBytes é invocado 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 transferir.
A propagação está desativada em ambos os lados, usando TCP ou pipe nomeado
Para um cenário baseado em Named-Pipe ou TCP, ReceiveBytes é invocado 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 indica para qual atividade ProcessAction transferir. Portanto, uma nova atividade temporária ProcessAction com uma nova ID é invocada. Quando a resposta assíncrona é correspondida à solicitação no código ServiceModel, o ID da atividade pode ser recuperado do contexto local. A atividade ProcessAction real pode ser transferida para com esse ID.
Cliente assíncrono com retorno de chamada
Este 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 de HTTP com propagateActivity
=true
. No entanto, as atividades adicionais e transferências também se aplicam aos outros casos (ou seja, propagateActivity
=false
usando TCP ou Named-Pipe).
O retorno de chamada cria uma nova atividade (G) quando o cliente chama o código do usuário para notificar que os resultados estão prontos. Em seguida, o código do usuário chama endCall
dentro do retorno de chamada (como mostra a 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 A’
como . É possível que A' possa ser idêntico ou diferente de A.
Servidor assíncrono com retorno de chamada
A pilha de canais chama de volta o cliente em Message Receive: 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
o . Caso contrário, as atividades e transferências são semelhantes aos cenários anteriores.
Assíncrono unidirecional com ou sem erros
Nenhuma resposta ou falha é devolvida ao cliente.