예제 #1
0
        internal static ActivityScope AddActivityScope(ActivityContextState activityContextState)
        {
            Guid          guid = Guid.NewGuid();
            ActivityScope result;

            using (DisposeGuard disposeGuard = default(DisposeGuard))
            {
                try
                {
                    ActivityScopeImpl.scopeCacheLock.EnterWriteLock();
                    ActivityScopeImpl activityScopeImpl = new ActivityScopeImpl(guid);
                    disposeGuard.Add <ActivityScopeImpl>(activityScopeImpl);
                    ActivityScopeImpl.scopeCache.Add(guid, activityScopeImpl);
                    ActivityScope activityScope = new ActivityScope(activityScopeImpl);
                    disposeGuard.Add <ActivityScope>(activityScope);
                    activityScopeImpl.UpdateFromState(activityContextState);
                    SingleContext.Singleton.LocalId = new Guid?(guid);
                    SingleContext.Singleton.SetId();
                    disposeGuard.Success();
                    result = activityScope;
                }
                finally
                {
                    try
                    {
                        ActivityScopeImpl.scopeCacheLock.ExitWriteLock();
                    }
                    catch (SynchronizationLockException)
                    {
                    }
                }
            }
            return(result);
        }
예제 #2
0
        internal static void UpdateActivityScopeRequestIdFromUrl(string httpUrl)
        {
            if (string.IsNullOrWhiteSpace(httpUrl))
            {
                return;
            }
            Uri uri = new Uri(httpUrl);
            NameValueCollection urlProperties = LoggerHelper.GetUrlProperties(uri);
            string text = urlProperties["RequestId48CD6591-0506-4D6E-9131-797489A3260F"];
            Guid   guid;

            if (text == null || !Guid.TryParse(text, out guid))
            {
                return;
            }
            ActivityScopeImpl activityScopeImpl = ActivityContext.GetCurrentActivityScope() as ActivityScopeImpl;

            if (activityScopeImpl == null)
            {
                return;
            }
            if (activityScopeImpl.ActivityId == guid)
            {
                return;
            }
            ActivityContextState state = new ActivityContextState(new Guid?(guid), LoggerHelper.EmptyConcurrentDic);

            activityScopeImpl.UpdateFromState(state);
        }
예제 #3
0
        public void UpdateFromMessage(HttpRequestBase httpRequestBase)
        {
            ActivityContextState activityContextState = ActivityContextState.DeserializeFrom(httpRequestBase);

            if (activityContextState != null)
            {
                this.UpdateFromState(activityContextState);
            }
        }
예제 #4
0
        public void UpdateFromMessage(HttpRequestMessageProperty wcfMessage)
        {
            ActivityContextState activityContextState = ActivityContextState.DeserializeFrom(wcfMessage);

            if (activityContextState != null)
            {
                this.UpdateFromState(activityContextState);
            }
        }
예제 #5
0
        public void UpdateFromMessage(OperationContext wcfOperationContext)
        {
            ActivityContextState activityContextState = ActivityContextState.DeserializeFrom(wcfOperationContext);

            if (activityContextState != null)
            {
                this.UpdateFromState(activityContextState);
            }
        }
예제 #6
0
 internal RfriContext(ClientSecurityContext clientSecurityContext, string userDomain, string clientAddress, string serverAddress, string protocolSequence, string authenticationService, bool encrypted, bool isAnonymous, Guid requestId = default(Guid))
 {
     this.ContextHandle         = NspiContext.GetNextContextHandle();
     this.disposeTracker        = ((IDisposeTrackable)this).GetDisposeTracker();
     this.clientSecurityContext = clientSecurityContext;
     this.userDomain            = userDomain;
     this.encrypted             = encrypted;
     this.isAnonymous           = isAnonymous;
     this.protocolSequence      = protocolSequence;
     this.protocolLogSession    = ProtocolLog.CreateSession(this.ContextHandle, clientAddress, serverAddress, protocolSequence);
     this.ProtocolLogSession[ProtocolLog.Field.Authentication] = authenticationService;
     if (requestId != Guid.Empty)
     {
         ActivityContextState activityContextState = new ActivityContextState(new Guid?(requestId), new ConcurrentDictionary <Enum, object>());
         ActivityContext.ClearThreadScope();
         this.scope = ActivityContext.Resume(activityContextState, null);
     }
 }
예제 #7
0
 internal void UpdateFromState(ActivityContextState state)
 {
     if (state != null)
     {
         if (state.ActivityId != null)
         {
             this.ActivityId   = state.ActivityId.Value;
             this.ActivityType = state.ActivityType;
         }
         if (state.Properties != null)
         {
             foreach (KeyValuePair <Enum, object> keyValuePair in state.Properties)
             {
                 this.SetPropertyObject(keyValuePair.Key, keyValuePair.Value);
             }
         }
         DebugContext.UpdateFrom(this);
     }
 }
예제 #8
0
 internal string GetMinimalSerializedScope()
 {
     return(ActivityContextState.GetMinimalSerializedScope(this.ActivityId));
 }