1 //------------------------------------------------------------------------------
2 // <copyright file="CorrelationManager.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 //------------------------------------------------------------------------------
8 using System.Collections;
9 using System.Collections.Specialized;
10 using System.Threading;
11 using System.Runtime.Remoting.Messaging;
14 namespace System.Diagnostics {
15 public class CorrelationManager {
16 private const string transactionSlotName = "System.Diagnostics.Trace.CorrelationManagerSlot";
17 private const string activityIdSlotName = "E2ETrace.ActivityID";
19 internal CorrelationManager() { }
21 public Guid ActivityId {
23 Object id = CallContext.LogicalGetData(activityIdSlotName);
30 CallContext.LogicalSetData(activityIdSlotName, value);
34 public Stack LogicalOperationStack {
36 return GetLogicalOperationStack();
40 public void StartLogicalOperation(object operationId) {
41 if (operationId == null)
42 throw new ArgumentNullException("operationId");
44 Stack idStack = GetLogicalOperationStack();
45 idStack.Push(operationId);
48 public void StartLogicalOperation() {
49 StartLogicalOperation(Guid.NewGuid());
52 public void StopLogicalOperation() {
53 Stack idStack = GetLogicalOperationStack();
57 private Stack GetLogicalOperationStack() {
58 Stack idStack = CallContext.LogicalGetData(transactionSlotName) as Stack;
59 if (idStack == null) {
60 idStack = new Stack();
61 CallContext.LogicalSetData(transactionSlotName, idStack);