Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I det här avsnittet beskrivs överföring i WCF-aktivitetsspårningsmodellen (Windows Communication Foundation).
Överföringsdefinition
Överföringar mellan aktiviteter representerar kausala relationer mellan händelser i relaterade aktiviteter inom slutpunkter. Två aktiviteter är kopplade till överföringar när kontrollen flödar mellan dessa aktiviteter, till exempel ett metodanrop som korsar aktivitetsgränser. När byte tas emot i tjänsten i WCF flyttas "Lyssna på"-aktiviteten till "Ta emot byte"-aktiviteten där meddelandeobjektet skapas. En lista över end-to-end spårningsscenarier och deras respektive aktivitets- och spårningsdesign finns i End-To-End Tracing Scenarios.
Om du vill generera överföringsspårningar använder du ActivityTracing inställningen på spårningskällan enligt följande konfigurationskod.
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing">
Använda överföring för att korrelera aktiviteter inom slutpunkter
Aktiviteter och överföringar gör det möjligt för användaren att sannolikhetsbaserat lokalisera rotorsaken till ett fel. Om vi till exempel överför fram och tillbaka mellan aktiviteterna M respektive N i komponenterna M och N, och en krasch inträffar i N direkt efter överföringen tillbaka till M, kan vi dra slutsatsen att det sannolikt beror på att N skickar data tillbaka till M.
En överföringsspårning genereras från aktivitet M till aktivitet N när det finns ett kontrollflöde mellan M och N. Till exempel utför N en del arbete för M på grund av ett metodanrop som korsar aktiviteternas gränser. N kanske redan finns eller har skapats. N skapas av M när N är en ny aktivitet som utför en del arbete för M.
En överföring från M till N får inte följas av en överföring tillbaka från N till M. Detta beror på att M kan skapa en del arbete i N och inte spåra när N slutför det arbetet. I själva verket kan M avsluta innan N slutför sin uppgift. Detta händer i aktiviteten "Open ServiceHost" (M) som skapar lyssnaraktiviteter (N) och sedan avslutas. En överföring tillbaka från N till M innebär att N slutförde arbetet som rör M.
N kan fortsätta att utföra annan bearbetning som inte är relaterad till M, till exempel en befintlig autentiseringsaktivitet (N) som fortsätter att ta emot inloggningsbegäranden (M) från olika inloggningsaktiviteter.
En kapslingsrelation finns inte nödvändigtvis mellan aktiviteterna M och N. Detta kan hända av två skäl. Först, när aktivitet M inte övervakar den faktiska bearbetningen som utförs i N även om M initierade N. För det andra, när N redan finns.
Exempel på överföringar
Följande visar två överföringsexempel.
När du skapar en tjänstvärd, tar konstruktorn kontrollen från den anropande koden, eller så övergår den anropande koden till konstruktorn. När konstruktorn har slutfört körningen returneras kontrollen till den anropande koden, eller så överförs kontrollen tillbaka till den anropande koden. Detta gäller för en kapslad relation.
När en lyssnare börjar bearbeta transportdata skapar den en ny tråd och överlämnar till aktiviteten Ta emot byte den lämpliga kontexten för bearbetning samt överföring av kontroll och data. När tråden har slutfört bearbetningen av begäran skickas inga mottagna byte tillbaka till lyssnaren. I det här fallet har vi en överföring in men ingen överföring ut från den nya trådaktiviteten. De två aktiviteterna är relaterade men inte kapslade.
Aktivitetsöverföringssekvens
En välformulerad aktivitetsöverföringssekvens innehåller följande steg.
Starta en ny aktivitet, som består av att välja ett nytt gAId.
Generera en överföringsspårning till det nya gAId:t från det aktuella aktivitets-ID:t
Ange det nya ID:t i TLS
Generera en startspårning för att ange början av den nya aktiviteten.
Återgå till den ursprungliga aktiviteten består av följande:
Generera en överföringsspårning till det ursprungliga gAId
Generera en stoppspårning för att indikera slutet på den nya aktiviteten
Ange TLS till det gamla gAId:t.
Följande kodexempel visar hur du gör detta. Det här exemplet förutsätter att ett blockerande anrop görs vid överföring till den nya aktiviteten och innehåller spårningar för paus/återuppta.
// 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);