Propagazione di ID attivitàActivity ID Propagation

La propagazione si verifica quando la traccia attività ServiceModel viene attivata (propagazione di ServiceModel) o disattivata (propagazione di attività utente-utente).Propagation happens when ServiceModel activity tracing is enabled (ServiceModel propagation) or disabled (User-to-User activity propagation).

Traccia attività ServiceModel attivataServiceModel Activity Tracing is Enabled

Se la traccia attività ServiceModel è attivata, la propagazione si verifica tra le attività ProcessAction.If ServiceModel ActivityTracing is enabled, propagation happens between ProcessAction activities.

ServerServer

Quando il propagateActivity attributo è impostato su true su entrambi client e server, l'ID del ProcessAction attività nel server è identico all'ID nel propagato ActivityId intestazione del messaggio.When the propagateActivity attribute is set to true on both the client and server, the ID of the ProcessAction activity in the server is identical to the ID in the propagated ActivityId message header.

Se non si ActivityId intestazione è presente nel messaggio (vale a dire propagateActivity = false sul client), o quando propagateActivity = false sul server, il server genera un nuovo ID di attività.When no ActivityId header is present in the message (that is, propagateActivity=false on the client), or when propagateActivity=false on the server, the server generates a new activity ID.

ClientClient

Se il client è a thread singolo in modalità sincrona, ignora qualsiasi impostazione di propagateActivity sul client o sul server.If the client is synchronously single threaded, the client disregards any settings of propagateActivity at the client or server. La risposta viene invece gestita nell'attività di richiesta.Instead, the response is handled in the request activity. Se il client può essere sincrona o asincrona con multithreading, propagateActivity = true nel client e vi è un'intestazione ID attività nel messaggio inviato dal server, il client recupera l'ID attività dal messaggio e lo trasferisce al Attività elaborazione azione che contiene l'ID attività propagato.If the client is asynchronous or synchronous multithreaded, propagateActivity=true in the client, and there is an activity ID header in the message sent by the server, the client retrieves the activity ID from the message, and transfers to the Process Action activity that contains the propagated activity ID. In caso contrario, il client esegue il trasferimento dall'attività Elaborazione messaggio a una nuova attività Elaborazione azione.Otherwise, the client transfers from Process Message activity to a new Process Action activity. Questo ulteriore trasferimento a una nuova attività Elaborazione azione viene eseguito per coerenza.This extra transfer to a new Process Action activity is done for consistency. In questa attività, il client recupera l'ID attività dell'attività BeginCall dal contesto del thread locale, quando il thread viene allocato per l'elaborazione del messaggio di risposta.Inside this activity, the client retrieves the activity ID of the BeginCall activity from the local thread context, when the thread is allocated for response message processing. Trasferisce quindi tale ID all'attività Elaborazione azione.It then transfers to the initial Process Action activity.

Se il client è duplex, agisce da server alla ricezione del messaggio.If the client is duplex, the client acts as server on receiving the message.

Propagazione nei messaggi di errorePropagation in Fault Messages

Non c'è differenza nello gestire messaggi validi e di errore.There is no difference in handling valid and fault messages. Se propagateActivity = true, l'ID attività aggiunto alle intestazioni di messaggio di errore SOAP è identico all'attività dell'ambiente.If propagateActivity=true, the activity ID added to the SOAP fault message headers is identical to the ambient activity.

Traccia attività ServiceModel disattivataServiceModel Activity Tracing is Disabled

Se la traccia attività ServiceModel è disattivata, la propagazione si verifica direttamente tra le attività del codice utente, senza passare per le attività ServiceModel.If ServiceModel ActivityTracing is disabled, propagation occurs between user code activities directly without going through ServiceModel activities. Viene inoltre propagato un ID attività definito dall'utente tramite l'intestazione ID attività del messaggio.A user-defined activity ID is also propagated through the message activity ID header.

Se propagateActivity = true e ActivityTracing = off per un listener di traccia ServiceModel (indipendentemente dal fatto se è attivata su ServiceModel), sul client o server si verifica quanto segue:If propagateActivity=true and ActivityTracing=off for a ServiceModel trace listener (regardless of whether tracing is enabled on ServiceModel), the following happen on either the client or server:

  • Alla richiesta di un'operazione o all'invio di una risposta, l'ID attività in TLS viene propagato fuori dal codice utente fino a quando non viene formato un messaggio.On operation request or sending response, the activity ID in TLS is propagated out of user code until a message is formed. Viene inoltre inserita un'intestazione ID attività nel messaggio prima dell'invio.An activity ID header is also inserted into the message before it is sent.

  • Alla ricezione di una richiesta o una risposta, l'ID attività viene recuperato dall'intestazione del messaggio non appena viene creato l'oggetto messaggio.On receiving request or receiving response, the activity ID is retrieved from the message header as soon as the received message object is created. L'ID attività in TLS viene propagato non appena il messaggio scompare dall'ambito, fino a quando non viene raggiunto il codice utente.The activity ID in TLS is propagated as soon as the message disappears from scope until user code is reached.

Questa garanzia delle azioni che le tracce dell'utente saranno visualizzate nella stessa attività se la propagazione è su.These actions guarantee that user traces will appear in the same activity if propagation is on. Tuttavia, non costituisce per le tracce ServiceModel.However, it makes no guarantee on ServiceModel traces. Le tracce ServiceModel si verificano in un'attività del codice utente solo se l'elaborazione di tali tracce viene eseguita sullo stesso thread dove l'attività del codice utente è impostata.ServiceModel traces occur in a user code activity only if the processing of those traces is executed on the same thread where the user code activity was set.

In generale, le traccie ServiceModel possono essere osservate nelle posizioni seguenti:In general, ServiceModel traces can be observed in the following places:

  • Se la traccia ServiceModel è disattivata, tutte le tracce emesse vengono visualizzate in attività utente.If ServiceModel tracing is disabled, all emitted traces appear in user activities. Se la propagazione è attivata sul server e sul client, queste tracce si troveranno nella stessa attività.If propagation is enabled at both the server and client, these traces will be in the same activity.

  • Se la traccia ServiceModel è attivata, ma ActivityTracing è disattivata, le tracce utente verranno visualizzate nella stessa attività, se la propagazione è attivata su entrambe le estremità.If ServiceModel tracing is enabled, but ActivityTracing is disabled, user traces appear in the same activity if propagation is enabled on both ends. Le tracce ServiceModel si trovano nell'attività 0000 predefinita, a meno che non si verifichino nello stesso thread dell'elaborazione del codice utente in cui l'attività è inizialmente impostata.ServiceModel traces appear in the default 0000 activity, unless they occur in the same thread as the user code processing where the activity is initially set.

  • Se entrambe le tracce ServiceModel e ActivityTracing sono attivate, le traccie dell'utente sono visualizzate in attività definite dall'utente e le traccie ServiceModel sono visualizzate in attività definite da ServiceModel.If both ServiceModel tracing and ActivityTracing are enabled, user traces appear in user-defined activities, and ServiceModel traces appear in ServiceModel-defined activities. La propagazione si verificherà a livello di ServiceModel.Propagation happens at ServiceModel level.