/// <summary> /// Gets the instance of transaction. /// </summary> /// <param name="httpContext">The HTTP context.</param> /// <returns>Instance of transaction.</returns> public static TransactionInstance GetInstance(HttpContextBase httpContext) { var instance = httpContext.Items[nameof(TransactionInstance)] as TransactionInstance; if (instance == null) { instance = new TransactionInstance(); httpContext.Items[nameof(TransactionInstance)] = instance; } return(instance); }
/// <inheritdoc/> public override IMessage Invoke(IMessage msg) { if (msg is IMethodCallMessage methodCall) { if (methodCall.MethodBase is MethodInfo methodInfo) { TransactionInstance instance = TransactionInstance.GetInstance(this.httpContext); TransactionDetail detail = instance.StartDetail(methodInfo); try { object result = methodInfo.Invoke(this.decorated, methodCall.Args); return(new ReturnMessage(result, methodCall.Args, methodCall.Args.Length, methodCall.LogicalCallContext, methodCall)); } finally { instance.StopDetail(detail); } } } return(msg); }
/// <inheritdoc/> public void Init(HttpApplication context) { context.BeginRequest += (sender, args) => { TransactionInstance transactionInstance = TransactionInstance.GetInstance(context.Context); transactionInstance.BeginDetail += TransactionModule.BeginDetail; transactionInstance.BeginTransaction += TransactionModule.BeginTransaction; transactionInstance.EndDetail += TransactionModule.EndDetail; transactionInstance.EndTransaction += TransactionModule.EndTransaction; context.Context.Items[nameof(TransactionModule)] = transactionInstance.StartTransaction( context.Context.Request.Url, nameof(HttpApplication), nameof(TransactionModule)); }; context.AcquireRequestState += (sender, args) => { context.Context.Items[nameof(TransactionDetail)] = TransactionInstance.GetInstance(context.Context).StartDetail( nameof(HttpApplication), nameof(context.AcquireRequestState)); }; context.PostAcquireRequestState += (sender, args) => { TransactionInstance.GetInstance(context.Context).StopDetail(context.Context.Items[nameof(TransactionDetail)] as TransactionDetail, true); context.Context.Items.Remove(nameof(TransactionDetail)); }; context.AuthenticateRequest += (sender, args) => { context.Context.Items[nameof(TransactionDetail)] = TransactionInstance.GetInstance(context.Context).StartDetail( nameof(HttpApplication), nameof(context.AuthenticateRequest)); }; context.PostAuthenticateRequest += (sender, args) => { TransactionInstance.GetInstance(context.Context).StopDetail( context.Context.Items[nameof(TransactionDetail)] as TransactionDetail, true); context.Context.Items.Remove(nameof(TransactionDetail)); }; context.AuthorizeRequest += (sender, args) => { context.Context.Items[nameof(TransactionDetail)] = TransactionInstance.GetInstance(context.Context).StartDetail( nameof(HttpApplication), nameof(context.AuthorizeRequest)); }; context.PostAuthorizeRequest += (sender, args) => { TransactionInstance.GetInstance(context.Context).StopDetail( context.Context.Items[nameof(TransactionDetail)] as TransactionDetail, true); context.Context.Items.Remove(nameof(TransactionDetail)); }; context.ResolveRequestCache += (sender, args) => { context.Context.Items[nameof(TransactionDetail)] = TransactionInstance.GetInstance(context.Context).StartDetail( nameof(HttpApplication), nameof(context.ResolveRequestCache)); }; context.PostResolveRequestCache += (sender, args) => { TransactionInstance.GetInstance(context.Context).StopDetail( context.Context.Items[nameof(TransactionDetail)] as TransactionDetail, true); context.Context.Items.Remove(nameof(TransactionDetail)); }; context.PreRequestHandlerExecute += (sender, args) => { if (context.Context.Items[nameof(TransactionModule)] is TransactionDescription transactionDescription) { KeyValuePair <string, string> fullMethodName = TransactionHelper.GetFullMethodName(context.Context); transactionDescription.FullName = fullMethodName.Key; transactionDescription.MethodName = fullMethodName.Value; } context.Context.Items[nameof(TransactionDetail)] = TransactionInstance.GetInstance(context.Context).StartDetail( nameof(HttpApplication), nameof(context.Request)); }; context.PostRequestHandlerExecute += (sender, args) => { TransactionInstance.GetInstance(context.Context).StopDetail( context.Context.Items[nameof(TransactionDetail)] as TransactionDetail, true); context.Context.Items.Remove(nameof(TransactionDetail)); }; context.UpdateRequestCache += (sender, args) => { context.Context.Items[nameof(TransactionDetail)] = TransactionInstance.GetInstance(context.Context).StartDetail( nameof(HttpApplication), nameof(context.UpdateRequestCache)); }; context.PostUpdateRequestCache += (sender, args) => { TransactionInstance.GetInstance(context.Context).StopDetail( context.Context.Items[nameof(TransactionDetail)] as TransactionDetail, true); context.Context.Items.Remove(nameof(TransactionDetail)); }; context.Error += (sender, args) => { if (context.Context.Items[nameof(TransactionDetail)] is TransactionDetail transactionDetail) { TransactionInstance.GetInstance(context.Context).StopDetail( transactionDetail, true); context.Context.Items.Remove(nameof(TransactionDetail)); } }; context.EndRequest += (sender, args) => { TransactionInstance.GetInstance(context.Context).StopTransaction(); }; }
/// <summary> /// Gets the instance of transaction. /// </summary> /// <param name="httpContext">The HTTP context.</param> /// <returns>Instance of transaction.</returns> public static TransactionInstance GetInstance(HttpContext httpContext) { return(TransactionInstance.GetInstance(new HttpContextWrapper(httpContext))); }