Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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();
            };
        }
Example #4
0
 /// <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)));
 }