TrasferimentoTransfer

In questo argomento viene descritto il trasferimento nel modello di traccia di attività di Windows Communication Foundation (WCF).This topic describes transfer in the Windows Communication Foundation (WCF) activity tracing model.

Definizione di trasferimentoTransfer Definition

I trasferimenti tra le attività rappresentano le relazioni causali tra eventi nelle attività correlate all'interno di endpoint.Transfers between activities represent causal relationships between events in the related activities within endpoints. Due attività sono correlate con i trasferimenti quando controllano i flussi tra queste attività, ad esempio, una chiamata al metodo che supera i limiti di attività.Two activities are related with transfers when control flows between these activities, for example, a method call crossing activity boundaries. In WCF, quando sono byte in ingresso nel servizio, l'attività di ascolto viene trasferito all'attività di ricezione byte in cui viene creato l'oggetto messaggio.In WCF, when bytes are incoming on the service, the Listen At activity is transferred to the Receive Bytes activity where the message object is created. Per un elenco di scenari di traccia end-to-end e le loro rispettive attività e la traccia di progettazione, vedere gli scenari di traccia End-To-End.For a list of end-to-end tracing scenarios, and their respective activity and tracing design, see End-To-End Tracing Scenarios.

Per emettere tracce di trasferimento, usare l'impostazione ActivityTracing nell'origine di traccia, come illustrato nel codice di configurazione seguente.To emit transfer traces, use the ActivityTracing setting on the trace source as demonstrated by the following configuration code.

<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">  

Utilizzo del trasferimento per correlare le attività all'interno di endpointUsing Transfer to Correlate Activities Within Endpoints

Attività e trasferimenti consentono all'utente di individuare probabilisticamente la causa radice di un errore.Activities and transfers permit the user to probabilistically locate the root cause of an error. Se, ad esempio, vi sono trasferimenti tra le attività M e N rispettivamente nei componenti M e N e si verifica un arresto anomalo in N subito dopo il trasferimento a M, se ne può dedurre che ciò è probabilmente dovuto a N che passa indietro i dati a M.For example, if we transfer back and forth between activities M and N respectively in components M and N, and a crash happens in N right after the transfer back to M, we can draw the conclusion that it is likely due to N’s passing data back to M.

Una traccia di trasferimento viene emessa dall'attività M all'attività N quando è presente un flusso di controllo tra M e N. N, ad esempio, esegue un lavoro per M a causa di una chiamata al metodo che attraversa i limiti delle attività.A transfer trace is emitted from activity M to activity N when there is a flow of control between M and N. For example, N performs some work for M because of a method call crossing the activities’ boundaries. N potrebbe esistere già o può essere stato creato.N may already exist or has been created. N viene generato da M quando N è una nuova attività che esegue dei lavori per M.N is spawned by M when N is a new activity that performs some work for M.

Un trasferimento da M a N potrebbe non essere seguito da un trasferimento da N a M. Ciò accade perché M può generare lavoro in N e non tiene traccia di quando N lo completa.A transfer from M to N may not be followed by a transfer back from N to M. This is because M can spawn some work in N and do not track when N completes that work. Di fatto, M può terminare prima che N completi l'attività.In fact, M can terminate before N completes its task. Ciò si verifica nell'attività "Open ServiceHost" (M) che genera le attività di Listener (N) e quindi termina.This happens in the "Open ServiceHost" activity (M) that spawns Listener activities (N) and then terminates. Un ritrasferimento da N a M significa che N ha completato il lavoro correlato a M.A transfer back from N to M means that N completed the work related to M.

N può continuare a eseguire altre elaborazioni non correlate a M, ad esempio, un'attività dell'autenticatore esistente (N) che continua a ricevere richieste di accesso (M) da diverse attività di accesso.N can continue performing other processing unrelated to M, for example, an existing authenticator activity (N) that keeps receiving login requests (M) from different login activities.

Tra attività M e N non esiste necessariamente una relazione di annidamento. Ciò è dovuto a due ragioni.A nesting relationship does not necessarily exist between activities M and N. This can happen due to two reasons. Innanzitutto, quando l'attività M non controlla l'elaborazione effettiva eseguita in N anche se M ha avviato N. In secondo luogo, quando N esiste già.First, when activity M does not monitor the actual processing performed in N although M initiated N. Second, when N already exists.

Esempio di trasferimentiExample of Transfers

Seguono due esempi del trasferimento.The following lists two transfer examples.

  • Quando si crea un host del servizio, il costruttore ottiene il controllo dal codice chiamante oppure il codice chiamante viene trasferito al costruttore.When you create a service host, the constructor gains control from the calling code, or the calling code transfers to the constructor. Al termine dell'esecuzione, il costruttore restituisce il controllo al codice chiamante oppure trasferisce di nuovo l'esecuzione al codice chiamante.When the constructor has finished executing, it returns control to the calling code, or the constructor transfers back to the calling code. Questo è il caso di una relazione annidata.This is the case of a nested relationship.

  • Quando un listener inizia a elaborare i dati di trasporto, crea un nuovo thread e consegna all'attività di ricezione byte il contesto appropriato per l'elaborazione, passando controllo e dati.When a listener starts processing transport data, it creates a new thread and hands to the Receive Bytes activity the appropriate context for processing, passing control and data. Quando quel thread ha terminato di elaborare la richiesta, l'attività di ricezione byte non passa indietro nulla al listener.When that thread has finished processing the request, the Receive Bytes activity passes nothing back to the listener. In questo caso, vi è un trasferimento in ingresso ma nessun trasferimento in uscita della nuova attività del thread.In this case, we have a transfer in but no transfer out of the new thread activity. Le due attività sono correlate ma non annidate.The two activities are related but not nested.

Sequenza di trasferimento di attivitàActivity Transfer Sequence

Una sequenza di trasferimento di attività ben formata comprende i passaggi seguenti.A well-formed activity transfer sequence includes the following steps.

  1. Iniziare una nuova attività, che consiste nel selezionare un nuovo gAId.Begin a new activity, which consists of selecting a new gAId.

  2. Emettere una traccia di trasferimento a quel nuovo gAId dall'ID attività correnteEmit a transfer trace to that new gAId from the current activity ID

  3. Impostare il nuovo ID in TLSSet the new ID in TLS

  4. Emettere una traccia di inizio per indicare l'inizio della nuova attività.Emit a start trace to indicate the beginning of the new activity by.

  5. Il ritorno all'attività originale è costituito dai passaggi seguenti:Return to the original activity consists of the following:

  6. Emettere una traccia di trasferimento al gAId originaleEmit a transfer trace to the original gAId

  7. Emettere una traccia di interruzione per indicare la fine della nuova attivitàEmit a Stop trace to indicate the end of the new activity

  8. Impostare TLS sul vecchio gAId.Set TLS to the old gAId.

Nell'esempio di codice seguente viene illustrato come procedere.The following code example demonstrates how to do this. In questo esempio si presuppone che venga effettuata una chiamata di blocco durante il trasferimento alla nuova attività e sono incluse tracce di sospensione/ripresa.This sample assumes a blocking call is made when transferring to the new activity, and includes suspend/resume traces.

// 0. Create a trace source  
TraceSource ts = new TraceSource("myTS");  
// 1. remember existing ("ambient") activity for clean up  
Guid oldGuid = Trace.CorrelationManager.ActivityId;  
// this will be our new activity  
Guid newGuid = Guid.NewGuid();   
// 2. call transfer, indicating that we are switching to the new AID  
ts.TraceTransfer(667, "Transferring.", newGuid);  
// 3. Suspend the current activity.  
ts.TraceEvent(TraceEventType.Suspend, 667, "Suspend: Activity " + i-1);  
// 4. set the new AID in TLS  
Trace.CorrelationManager.ActivityId = newGuid;  
// 5. Emit the start trace  
ts.TraceEvent(TraceEventType.Start, 667, "Boundary: Activity " + i);  
// trace something  
ts.TraceEvent(TraceEventType.Information, 667, "Hello from activity " + i);  
// Perform Work  
// some work.  
// Return  
ts.TraceEvent(TraceEventType.Information, 667, "Work complete on activity " + i);   
// 6. Emit the transfer returning to the original activity  
ts.TraceTransfer(667, "Transferring Back.", oldGuid);  
// 7. Emit the End trace  
ts.TraceEvent(TraceEventType.Stop, 667, "Boundary: Activity " + i);  
// 8. Change the tls variable to the original AID  
Trace.CorrelationManager.ActivityId = oldGuid;    
// 9. Resume the old activity  
ts.TraceEvent(TraceEventType.Resume, 667, "Resume: Activity " + i-1);  

Vedere ancheSee Also

Configurazione delle funzionalità di tracciaConfiguring Tracing
Uso del visualizzatore di tracce dei servizi per la visualizzazione di tracce correlate e la risoluzione dei problemiUsing Service Trace Viewer for Viewing Correlated Traces and Troubleshooting
Scenari di traccia end-to-endEnd-To-End Tracing Scenarios
Strumento Visualizzatore di tracce dei servizi (SvcTraceViewer.exe)Service Trace Viewer Tool (SvcTraceViewer.exe)