Propagação de ID de atividade

A propagação acontece quando o rastreamento de atividade ServiceModel está habilitado (propagação ServiceModel) ou desabilitado (propagação de atividade de usuário para usuário).

O rastreamento de atividade ServiceModel está habilitado

Se ServiceModel ActivityTracing estiver habilitado, a propagação acontecerá entre as atividades ProcessAction.

Servidor

Quando o propagateActivity atributo é definido como true no cliente e no servidor, o ID da ProcessAction atividade no servidor é idêntico ao ID no cabeçalho da mensagem propagada ActivityId .

Quando nenhum ActivityId cabeçalho está presente na mensagem (ou seja,=propagateActivityfalse no cliente), ou quando propagateActivity=false no servidor, o servidor gera um novo ID de atividade.

Cliente

Se o cliente for síncrono de thread único, o cliente desconsidera quaisquer configurações de propagateActivity no cliente ou servidor. Em vez disso, a resposta é tratada na atividade de solicitação. Se o cliente for multithread assíncrono ou síncrono, propagateActivity=true no cliente, e houver um cabeçalho de ID de atividade na mensagem enviada pelo servidor, o cliente recuperará o ID de atividade da mensagem e transferirá para a atividade Process Action que contém o ID de atividade propagada. Caso contrário, o cliente transfere da atividade Mensagem de processo para uma nova atividade de ação de processo. Essa transferência extra para uma nova atividade de Ação de Processo é feita para consistência. Dentro dessa atividade, o cliente recupera o ID de atividade da atividade BeginCall do contexto de thread local, quando o thread é alocado para processamento de mensagens de resposta. Em seguida, ele é transferido para a atividade inicial de Ação do Processo.

Se o cliente for duplex, o cliente atuará como servidor ao receber a mensagem.

Propagação em mensagens de falha

Não há diferença no tratamento de mensagens válidas e de falha. Se propagateActivity=true, o ID da atividade adicionado aos cabeçalhos da mensagem de falha SOAP for idêntico à atividade ambiente.

O rastreamento de atividade ServiceModel está desativado

Se ServiceModel ActivityTracing estiver desabilitado, a propagação ocorrerá entre as atividades de código do usuário diretamente sem passar pelas atividades ServiceModel. Um ID de atividade definido pelo usuário também é propagado através do cabeçalho do ID de atividade da mensagem.

Se propagateActivity=true e ActivityTracing=off para um ouvinte de rastreamento ServiceModel (independentemente de o rastreamento estar habilitado no ServiceModel), o seguinte acontece no cliente ou servidor:

  • Na solicitação de operação ou no envio de resposta, o ID de atividade no TLS é propagado para fora do código do usuário até que uma mensagem seja formada. Um cabeçalho de ID de atividade também é inserido na mensagem antes de ser enviada.

  • Ao receber solicitação ou resposta, o ID da atividade é recuperado do cabeçalho da mensagem assim que o objeto de mensagem recebida é criado. O ID de atividade no TLS é propagado assim que a mensagem desaparece do escopo até que o código do usuário seja alcançado.

Essas ações garantem que os rastreamentos do usuário apareçam na mesma atividade se a propagação estiver ativada. No entanto, ele não garante os rastreamentos do ServiceModel. Os rastreamentos ServiceModel ocorrem em uma atividade de código de usuário somente se o processamento desses rastreamentos for executado no mesmo thread em que a atividade de código de usuário foi definida.

Em geral, os rastreamentos ServiceModel podem ser observados nos seguintes locais:

  • Se o rastreamento ServiceModel estiver desabilitado, todos os rastreamentos emitidos aparecerão nas atividades do usuário. Se a propagação estiver habilitada no servidor e no cliente, esses rastreamentos estarão na mesma atividade.

  • Se o rastreamento ServiceModel estiver habilitado, mas o ActivityTracing estiver desabilitado, os rastreamentos de usuário aparecerão na mesma atividade se a propagação estiver habilitada em ambas as extremidades. Os rastreamentos ServiceModel aparecem na atividade 0000 padrão, a menos que ocorram no mesmo thread que o processamento de código do usuário onde a atividade é definida inicialmente.

  • Se o rastreamento ServiceModel e o ActivityTracing estiverem habilitados, os rastreamentos de usuário aparecerão em atividades definidas pelo usuário e os rastreamentos ServiceModel aparecerão em atividades definidas pelo ServiceModel. A propagação acontece no nível ServiceModel.