| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- // <copyright>
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // </copyright>
- namespace System.ServiceModel.Diagnostics
- {
- using System;
- using System.Diagnostics;
- using System.Runtime;
- using System.Runtime.Diagnostics;
- using System.Security;
- using System.Security.Permissions;
- using System.ServiceModel.Channels;
- using System.Xml;
- internal static class EventTraceActivityHelper
- {
- public static bool TryAttachActivity(Message message, EventTraceActivity activity)
- {
- if (FxTrace.Trace.IsEnd2EndActivityTracingEnabled && (message != null) && (activity != null))
- {
- if (!message.Properties.ContainsKey(EventTraceActivity.Name))
- {
- message.Properties.Add(EventTraceActivity.Name, activity);
- return true;
- }
- }
- return false;
- }
- public static EventTraceActivity TryExtractActivity(Message message)
- {
- return TryExtractActivity(message, false);
- }
- public static EventTraceActivity TryExtractActivity(Message message, bool createIfNotExist)
- {
- EventTraceActivity eventTraceActivity = null;
- if (message != null && message.State != MessageState.Closed)
- {
- object property;
- if (message.Properties.TryGetValue(EventTraceActivity.Name, out property))
- {
- eventTraceActivity = property as EventTraceActivity;
- }
- if (eventTraceActivity == null)
- {
- Guid activityId;
- if (GetMessageId(message, out activityId))
- {
- eventTraceActivity = new EventTraceActivity(activityId);
- }
- else
- {
- UniqueId uid = message.Headers.RelatesTo;
- if (uid != null)
- {
- if (uid.TryGetGuid(out activityId))
- {
- eventTraceActivity = new EventTraceActivity(activityId);
- }
- }
- }
- if (eventTraceActivity == null && createIfNotExist)
- {
- eventTraceActivity = new EventTraceActivity();
- }
- if (eventTraceActivity != null)
- {
- // Attach the trace activity to the message
- message.Properties[EventTraceActivity.Name] = eventTraceActivity;
- }
- }
- }
- return eventTraceActivity;
- }
- [Fx.Tag.SecurityNote(Critical = "This sets the ActivityId on the thread. Must not be settable from PT code unless from safe context.")]
- [SecurityCritical]
- [SecurityPermission(SecurityAction.Assert, Unrestricted = true)]
- internal static void SetOnThread(EventTraceActivity eventTraceActivity)
- {
- if (eventTraceActivity != null)
- {
- Trace.CorrelationManager.ActivityId = eventTraceActivity.ActivityId;
- }
- }
- private static bool GetMessageId(Message message, out Guid guid)
- {
- UniqueId uniqueId = message.Headers.MessageId;
- if (uniqueId == null)
- {
- guid = Guid.Empty;
- return false;
- }
- return uniqueId.TryGetGuid(out guid);
- }
- }
- }
|