Partilhar via


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

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

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.

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

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

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

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.

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

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=falseusando 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.

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 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 endCallo . 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.