Esempio n. 1
0
 public override IMessage Invoke(IMessage msg)
 {
     if (msg is IConstructionCallMessage)
     {
         IConstructionCallMessage   constructCallMsg          = msg as IConstructionCallMessage;
         IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject((IConstructionCallMessage)msg);
         RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue);
         Console.WriteLine("Call constructor");
         return(constructionReturnMessage);
     }
     else
     {
         IMethodCallMessage callMsg = msg as IMethodCallMessage;
         IMessage           message;
         try
         {
             Console.WriteLine(callMsg.MethodName + "执行前。。。");
             object[] args = callMsg.Args;
             object   o    = callMsg.MethodBase.Invoke(GetUnwrappedServer(), args);
             Console.WriteLine(callMsg.MethodName + "执行后。。。");
             message = new ReturnMessage(o, args, args.Length, callMsg.LogicalCallContext, callMsg);
         }
         catch (Exception e)
         {
             message = new ReturnMessage(e, callMsg);
         }
         Console.WriteLine(message.Properties["__Return"]);
         return(message);
     }
 }
 internal void FilterConstructors()
 {
     if (this._fIsJitActivated)
     {
         throw new ServicedComponentException(Resource.FormatString("ServicedComponentException_BadConfiguration"));
     }
     this._filterConstructors = true;
     RealProxy.SetStubData(this, NegativeOne);
 }
        /// <summary>
        /// 构造函数代理方法执行.
        /// </summary>
        /// <param name="methodInvoke">代理目标方法</param>
        /// <returns>代理结果</returns>
        public virtual IMessage ProcessConstruct(IMessage methodInvoke)
        {
            IConstructionCallMessage   constructCallMsg          = methodInvoke as IConstructionCallMessage;
            IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject((IConstructionCallMessage)methodInvoke);

            RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue);

            return(constructionReturnMessage);
        }
Esempio n. 4
0
        public override RealProxy CreateProxy(ObjRef objRef, Type serverType, object serverObject, Context serverContext)
        {
            TransparentProxy proxy = new TransparentProxy(serverType);

            if (serverContext != null)
            {
                RealProxy.SetStubData(proxy, serverContext);
            }
            return(proxy);
        }
        public IMessage LocalInvoke(IMessage reqMsg)
        {
            IMessage message = null;

            if (reqMsg is IConstructionCallMessage)
            {
                this.ActivateProxy();
                if (this._filterConstructors)
                {
                    this._filterConstructors = false;
                    RealProxy.SetStubData(this, this._token);
                }
                if (((IConstructionCallMessage)reqMsg).ArgCount > 0)
                {
                    throw new ServicedComponentException(Resource.FormatString("ServicedComponentException_ConstructorArguments"));
                }
                MarshalByRefObject transparentProxy = (MarshalByRefObject)this.GetTransparentProxy();
                return(EnterpriseServicesHelper.CreateConstructionReturnMessage((IConstructionCallMessage)reqMsg, transparentProxy));
            }
            if (reqMsg is IMethodCallMessage)
            {
                message = this.HandleSpecialMethods(reqMsg);
                if (message != null)
                {
                    return(message);
                }
                if ((base.GetUnwrappedServer() == null) || (((IntPtr)RealProxy.GetStubData(this)) == NegativeOne))
                {
                    throw new ObjectDisposedException("ServicedComponent");
                }
                bool flag = this.SendMethodCall(reqMsg);
                try
                {
                    message = RemotingServices.ExecuteMessage((MarshalByRefObject)this.GetTransparentProxy(), (IMethodCallMessage)reqMsg);
                    if (flag)
                    {
                        this.SendMethodReturn(reqMsg, ((IMethodReturnMessage)message).Exception);
                    }
                }
                catch (Exception exception)
                {
                    if ((exception is NullReferenceException) || (exception is SEHException))
                    {
                        throw;
                    }
                    if (flag)
                    {
                        this.SendMethodReturn(reqMsg, exception);
                    }
                    throw;
                }
            }
            return(message);
        }
Esempio n. 6
0
        public virtual IMessage ProcessConstruct(IMessage msg)
        {
            IConstructionCallMessage constructCallMsg = msg as IConstructionCallMessage;
            //构造函数 初始化
            IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject((IConstructionCallMessage)msg);

            RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue);

            //Console.WriteLine("Call constructor:"+constructCallMsg.MethodName);
            //Console.WriteLine("Call constructor arg count:"+constructCallMsg.ArgCount);

            return(constructionReturnMessage);
        }
        //调用代理的类型的方法
        public override IMessage Invoke(IMessage msg)
        {
            //用lock来防止多线程在一个时间同时操作方法
            //lock (obj)
            //{

            //}

            object   returnIMessage = null;
            IMessage message;

            //如果是调用了构造函数就进入使用下面的代码
            if (msg is IConstructionCallMessage)
            {
                //构造函数调用
                IConstructionCallMessage   constructCallMsg          = msg as IConstructionCallMessage;
                IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject((IConstructionCallMessage)msg);
                RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue);
                returnIMessage = constructionReturnMessage;
            }
            //如果调用方法是一般方法,进入If语句
            else
            {
                var methodCall = msg as IMethodCallMessage;
                var methodInfo = methodCall.MethodBase as MethodInfo;
                //if(_Filter(methodInfo))
                //    Log("In Dynamic Proxy - Before executing '{0}'", methodCall.MethodName);
                OnBeforeExecute(methodCall);
                try
                {
                    var result = methodInfo.Invoke(GetUnwrappedServer(), methodCall.InArgs);
                    //if (_Filter(methodInfo))
                    //    Log("In Dynamic Proxy - After executing '{0}' ", methodCall.MethodName);
                    message = new ReturnMessage(result, null, 0,
                                                methodCall.LogicalCallContext, methodCall);
                    OnAfterExecute(methodCall, message.Properties["__Return"]);
                    returnIMessage = message;
                }
                catch (Exception ex)
                {
                    //             if (_Filter(methodInfo))
                    //                 Log(string.Format(
                    //"In Dynamic Proxy- Exception {0} executing '{1}'", ex),
                    //methodCall.MethodName);
                    OnErrorExecuting(methodCall, ex.InnerException.ToString());
                    returnIMessage = new ReturnMessage(ex, methodCall);
                }
            }
            return(returnIMessage as IMessage);
        }
        private void FinalizeHere()
        {
            IntPtr currentContextToken = Proxy.GetCurrentContextToken();
            IntPtr currentContext      = Proxy.GetCurrentContext();

            try
            {
                RealProxy.SetStubData(this, currentContextToken);
                ((ServicedComponent)this.GetTransparentProxy())._callFinalize(false);
            }
            finally
            {
                Marshal.Release(currentContext);
                RealProxy.SetStubData(this, NegativeOne);
            }
        }
        public override RealProxy CreateProxy(ObjRef objRef, Type serverType, Object serverObject, Context serverContext)
        {
            var proxy = new InterceptionRealProxy(serverType);

            if (serverContext != null)
            {
                RealProxy.SetStubData(proxy, serverContext);
            }

            if ((serverType.IsMarshalByRef == false) && (serverContext == null))
            {
                throw new RemotingException("Bad Type for CreateProxy");
            }

            return(proxy);
        }
Esempio n. 10
0
        public override RealProxy CreateProxy(ObjRef objRef1,
                                              Type serverType,
                                              object serverObject,
                                              Context serverContext)
        {
            MyProxy myCustomProxy = new MyProxy(serverType);

            if (serverContext != null)
            {
                RealProxy.SetStubData(myCustomProxy, serverContext);
            }
            if ((!serverType.IsMarshalByRef) && (serverContext == null))
            {
                throw new RemotingException("Bad Type for CreateProxy");
            }
            return(myCustomProxy);
        }
Esempio n. 11
0
        public override IMessage Invoke(IMessage msg)
        {
            //消息拦截之后,就会执行这里的方法。
            IConstructionCallMessage constructCallMsg = msg as IConstructionCallMessage;

            if (constructCallMsg != null) // 如果是构造函数,按原来的方式返回即可。
            {
                IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject((IConstructionCallMessage)msg);
                if (constructionReturnMessage != null)
                {
                    RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue);
                    return(constructionReturnMessage);
                }
            }
            IMethodCallMessage callMsg = msg as IMethodCallMessage;

            if (callMsg != null) //如果是方法调用(属性也是方法调用的一种)
            {
                object[] args = callMsg.Args;
                IMessage message;
                try
                {
                    if (callMsg.MethodName.StartsWith("set_") && args.Length == 1)
                    {
                        //这里检测到是set方法
                        //在这里切入日志记录
                        if (!args[0].GetType().IsByRef ||
                            args[0].GetType().MemberType == typeof(string).MemberType)
                        {
                            Logger.WriteInfo(string.Format("加载{0}成功,值:{1}",
                                                           callMsg.MethodName.Substring(callMsg.MethodName.IndexOf("_", StringComparison.Ordinal) + 1), args[0]));
                        }
                    }
                    object o = callMsg.MethodBase.Invoke(GetUnwrappedServer(), args);
                    message = new ReturnMessage(o, args, args.Length, callMsg.LogicalCallContext, callMsg);
                }
                catch (Exception e)
                {
                    message = new ReturnMessage(e, callMsg);
                }
                return(message);
            }
            return(msg);
        }
Esempio n. 12
0
 public override IMessage Invoke(IMessage msg)
 {
     if (msg is IConstructionCallMessage)
     {
         IConstructionCallMessage   constructCallMsg          = msg as IConstructionCallMessage;
         IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject(constructCallMsg);
         RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue);
         return(constructionReturnMessage);
     }
     else if (msg is IMethodCallMessage)
     {
         IMethodCallMessage callMsg = msg as IMethodCallMessage;
         //object[] copiedArgs = Array.CreateInstance(typeof(object), callMsg.Args.Length) as object[];
         //callMsg.Args.CopyTo(copiedArgs, 0);
         var      copiedArgs = callMsg.Args;
         IMessage message;
         try
         {
             var taget = GetUnwrappedServer();
             if (taget is IModel)
             {
                 if (callMsg.MethodName.StartsWith("set_") && copiedArgs.Length == 1)
                 {
                     //透明代理无法调试
                     //var model = taget as IModel;
                     //if (model.GetInnerChanges())
                     //{
                     //    model.SetChanges(callMsg.MethodName.Substring(4), copiedArgs[0]);
                     //}
                 }
             }
             var returnValue = callMsg.MethodBase.Invoke(taget, copiedArgs);
             message = new ReturnMessage(returnValue, copiedArgs, copiedArgs.Length, callMsg.LogicalCallContext, callMsg);
         }
         catch (Exception e)
         {
             message = new ReturnMessage(e, callMsg);
         }
         return(message);
     }
     return(msg);
 }
 void IManagedPoolAction.LastRelease()
 {
     if (this.IsObjectPooled && (base.GetUnwrappedServer() != null))
     {
         this.ReleaseContext();
         IntPtr currentContextToken = Proxy.GetCurrentContextToken();
         IntPtr currentContext      = Proxy.GetCurrentContext();
         try
         {
             RealProxy.SetStubData(this, currentContextToken);
             ((ServicedComponent)this.GetTransparentProxy())._callFinalize(!this._fFinalized && !this._fReturnedByFinalizer);
             GC.SuppressFinalize(this);
         }
         finally
         {
             Marshal.Release(currentContext);
             RealProxy.SetStubData(this, this._token);
         }
     }
 }
 internal void DeactivateProxy(bool disposing)
 {
     if (this._fIsActive)
     {
         object transparentProxy = this.GetTransparentProxy();
         if (base.GetUnwrappedServer() != null)
         {
             this.DispatchDeactivate();
             ((ServicedComponent)transparentProxy)._callFinalize(disposing);
             base.DetachServer();
         }
         RealProxy.SetStubData(this, NegativeOne);
         this._fIsActive = false;
         if (!this.IsJitActivated)
         {
             this.ReleaseGitCookie();
         }
         this.ReleasePoolUnk();
     }
 }
Esempio n. 15
0
        public override IMessage Invoke(IMessage msg)
        {
            if (msg is IConstructionCallMessage)
            {
                var constructCallMessage = msg as IConstructionCallMessage;
                var argMessage           = BuildArgMessageString(constructCallMessage, constructCallMessage.Args);
                Console.WriteLine($"=== Call {constructCallMessage.ActivationType.Name} Constructor Start{argMessage} ===");

                var constructReturnMessage = this.InitializeServerObject(constructCallMessage);
                RealProxy.SetStubData(this, constructReturnMessage.ReturnValue);


                Console.WriteLine($"=== Call {constructCallMessage.ActivationType.Name} Constructor Finish ===");
                return(constructReturnMessage);
            }

            var callMessage = msg as IMethodCallMessage;

            ReturnMessage message;

            try
            {
                var args       = callMessage.Args;
                var argMessage = BuildArgMessageString(callMessage, args);

                Console.WriteLine($"=== Call {callMessage.MethodName} Start{argMessage} ===");

                var output = callMessage.MethodBase.Invoke(GetUnwrappedServer(), args);

                var returnMessage = BuildReturnMessageString(callMessage, output);
                Console.WriteLine($"=== Call {callMessage.MethodName} Finish{returnMessage} ===");

                message = new ReturnMessage(output, args, args.Length, callMessage.LogicalCallContext, callMessage);
            }
            catch (Exception e)
            {
                message = new ReturnMessage(e, callMessage);
            }

            return(message);
        }
Esempio n. 16
0
 public override IMessage Invoke(IMessage msg)
 {
     b += 1;
     if (msg is IConstructionCallMessage)
     {
         IConstructionCallMessage   constructCallMsg          = msg as IConstructionCallMessage;
         IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject(constructCallMsg);
         RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue);
         return(constructionReturnMessage);
     }
     else if (msg is IMethodCallMessage)
     {
         IMethodCallMessage callMsg    = msg as IMethodCallMessage;
         object[]           copiedArgs = Array.CreateInstance(typeof(object), callMsg.Args.Length) as object[];
         callMsg.Args.CopyTo(copiedArgs, 0);
         //var copiedArgs = callMsg.Args;
         IMessage message;
         try
         {
             var    taget = GetUnwrappedServer();
             object returnValue;
             if (callMsg.MethodName.StartsWith("set_") && copiedArgs.Length == 1)
             {
                 var method = _serverType.GetMethod("SetChanges", BindingFlags.NonPublic | BindingFlags.Instance);
                 method.Invoke(taget, new object[] { callMsg.MethodName.Substring(4), copiedArgs[0] });
             }
             returnValue = callMsg.MethodBase.Invoke(taget, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static, null,
                                                     copiedArgs, null);
             message = new ReturnMessage(returnValue, copiedArgs, copiedArgs.Length, callMsg.LogicalCallContext, callMsg);
         }
         catch (Exception e)
         {
             message = new ReturnMessage(e, callMsg);
         }
         return(message);
     }
     return(msg);
 }
        private void SetupContext(bool construction)
        {
            IntPtr currentContextToken = Proxy.GetCurrentContextToken();

            if (this._token != currentContextToken)
            {
                if (this._token != NegativeOne)
                {
                    this.ReleaseContext();
                }
                this._token   = currentContextToken;
                this._context = Proxy.GetCurrentContext();
                this._tracker = Proxy.FindTracker(this._context);
            }
            if (!this._filterConstructors)
            {
                RealProxy.SetStubData(this, this._token);
            }
            if ((this.IsJitActivated && !this._tabled) && !construction)
            {
                IdentityTable.AddObject(this._token, this.GetTransparentProxy());
                this._tabled = true;
            }
        }
Esempio n. 18
0
        public override IMessage Invoke(IMessage msg)
        {
            Logger log         = null;
            string returnvalue = null;//返回值
            bool   IsErrorMsg  = false;

            if (IsErrorLog || IsAllLog)
            {
                log = new Logger
                {
                    CreateDate = DateTime.Now,
                    Project    = "SesameLingo",
                    LogType    = (int)LogType.Warring,
                    Args       = ""
                };
            }
            object returnIMessage = null;

            if (msg is IConstructionCallMessage)
            {
                //构造函数调用
                IConstructionCallMessage   constructCallMsg          = msg as IConstructionCallMessage;
                IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject((IConstructionCallMessage)msg);
                RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue);
                // Console.WriteLine("Call constructor");
                object[] args = constructCallMsg.Args;
                for (int i = 0; i < args.Length; i++)
                {
                    log.Args += (args[i] != null ? args[i].ToString() : "") + ",";
                }
                returnIMessage = constructionReturnMessage;
            }
            else
            {
                //非构造函数调用

                IMethodCallMessage callMsg = msg as IMethodCallMessage;
                IMessage           message;
                try
                {
                    log.MethodName = callMsg.MethodName;
                    log.TypeName   = callMsg.TypeName;

                    object[] args = callMsg.Args;
                    object   o    = callMsg.MethodBase.Invoke(GetUnwrappedServer(), args);
                    message = new ReturnMessage(o, args, args.Length, callMsg.LogicalCallContext, callMsg);
                    #region 记录方法输入参数
                    if (args != null && args.Length > 0)
                    {
                        for (int i = 0; i < args.Length; i++)
                        {
                            log.Args += (args[i] != null ? args[i].ToString() : "") + ",";
                        }
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    message    = new ReturnMessage(ex, callMsg);
                    IsErrorMsg = true;
                    if (IsErrorLog || IsAllLog)
                    {
                        log.ErrorMsg = Newtonsoft.Json.JsonConvert.SerializeObject(ex);
                        log.LogType  = (int)LogType.Error;
                    }
                }
                if (message.Properties["__Return"] != null)
                {
                    returnvalue = message.Properties["__Return"].ToString();
                }
                log.ReturnValue = returnvalue;
                //Console.WriteLine(returnvalue);
                returnIMessage = message;
            }


            if (IsAllLog)
            {
                log.EndDate = DateTime.Now;
                TimeSpan span = (TimeSpan)(log.EndDate - log.CreateDate);
                log.UseTime = span.Milliseconds;
                if (span.Milliseconds > SlowQuery)
                {
                    Task task = new Task(new Action(() =>
                    {
                        SystemErrorLogOper.Create(log);
                    }));
                    task.Start();
                }
            }
            else if (IsErrorLog && IsErrorMsg)
            {
                log.EndDate = DateTime.Now;
                TimeSpan span = (TimeSpan)(log.EndDate - log.CreateDate);
                log.UseTime = span.Milliseconds;
                Task task = new Task(new Action(() =>
                {
                    SystemErrorLogOper.Create(log);
                }));
                task.Start();
            }

            return(returnIMessage as IMessage);
        }
Esempio n. 19
0
        public override IMessage Invoke(IMessage msg)
        {
            //方法启动时间
            DateTime startTime = DateTime.Now;
            //记录方法返回结果
            string returnvalue = "null";
            Log    log         = new Log();

            //log.Uri = msg.Properties["__Uri"].ToString();
            log.IP              = "";
            log.Mac             = "";
            log.MethodName      = msg.Properties["__MethodName"].ToString();
            log.MethodSignature = msg.Properties["__MethodSignature"].ToString();
            log.TypeName        = msg.Properties["__TypeName"].ToString();
            log.CallContext     = msg.Properties["__CallContext"].ToString();
            log.Project         = "AOPTestClient";
            object returnIMessage = null;

            if (msg is IConstructionCallMessage)
            {
                //构造函数调用
                IConstructionCallMessage   constructCallMsg          = msg as IConstructionCallMessage;
                IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject((IConstructionCallMessage)msg);
                RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue);
                //记录方法输入参数
                object[] args = constructCallMsg.Args;
                for (int i = 0; i < args.Length; i++)
                {
                    log.Args += args[i].ToString() + ",";
                }
                returnIMessage = constructionReturnMessage;
            }
            else
            {
                //非构造函数调用

                IMethodCallMessage callMsg = msg as IMethodCallMessage;
                IMessage           message;
                try
                {
                    object[] args = callMsg.Args;
                    object   o    = callMsg.MethodBase.Invoke(GetUnwrappedServer(), args);
                    message = new ReturnMessage(o, args, args.Length, callMsg.LogicalCallContext, callMsg);
                    //记录方法输入参数
                    for (int i = 0; i < args.Length; i++)
                    {
                        log.Args += args[i].ToString() + ",";
                    }
                }
                catch (Exception e)
                {
                    message     = new ReturnMessage(e, callMsg);
                    returnvalue = e.InnerException.ToString();
                }
                if (message.Properties["__Return"] != null)
                {
                    returnvalue = message.Properties["__Return"].ToString();
                }
                log.ReturnValue = returnvalue;
                Console.WriteLine(returnvalue);
                returnIMessage = message;
            }
            //方法结束时间
            DateTime endTime = DateTime.Now;

            log.UseTime = (endTime - startTime).ToString();
            //写入日志到数据库
            SysLogService.GetInstance().InsertAccessLog(log);
            return(returnIMessage as IMessage);
        }
Esempio n. 20
0
        public override IMessage Invoke(IMessage msg)
        {
            DateTime startTime = DateTime.Now;//方法启动时间
            //记录方法返回结果
            string returnvalue = "null";
            //Model.sys_AccessLog log = new Model.sys_AccessLog();
            ////log.Uri = msg.Properties["__Uri"].ToString();
            //log.IP = Safe.Instance().ClientIp();
            //log.Mac = Safe.Instance().ClientPort();
            //log.MethodName = msg.Properties["__MethodName"].ToString();
            //log.MethodSignature = msg.Properties["__MethodSignature"].ToString();
            //log.TypeName = msg.Properties["__TypeName"].ToString();
            //log.CallContext = msg.Properties["__CallContext"].ToString();
            //log.Project = "XAUTOA";
            object returnIMessage = null;

            if (msg is IConstructionCallMessage)
            {
                //构造函数调用
                IConstructionCallMessage   constructCallMsg          = msg as IConstructionCallMessage;
                IConstructionReturnMessage constructionReturnMessage = this.InitializeServerObject((IConstructionCallMessage)msg);
                RealProxy.SetStubData(this, constructionReturnMessage.ReturnValue);
                //Console.WriteLine("Call constructor");
                object[] args = constructCallMsg.Args;
                for (int i = 0; i < args.Length; i++)
                {
                    log.Debug("__Args:" + args[i].ToString());
                }
                returnIMessage = constructionReturnMessage;
            }
            else
            {
                log.Debug("__MethodName:" + msg.Properties["__MethodName"].ToString());
                log.Debug("__MethodSignature:" + msg.Properties["__MethodSignature"].ToString());
                log.Debug("__TypeName:" + msg.Properties["__TypeName"].ToString());
                log.Debug("__CallContext:" + msg.Properties["__CallContext"].ToString());

                //非构造函数调用
                IMethodCallMessage callMsg = msg as IMethodCallMessage;
                IMessage           message;
                CarPartsEntities   db = new CarPartsEntities();

                DbConnection  con  = null;
                DbTransaction tran = null;

                try
                {
                    object[] args = callMsg.Args;
                    #region 记录方法输入参数
                    //log.IP = args[args.Length-2].ToString();
                    //log.Mac = args[args.Length - 1].ToString();
                    for (int i = 0; i < args.Length; i++)
                    {
                        if (args[i] != null)
                        {
                            log.Debug("__Args:" + args[i].ToString());
                        }
                    }
                    #endregion

                    //BaseBusiness bb = (BaseBusiness)GetUnwrappedServer();
                    BaseBusiness bb = new BaseBusiness();
                    bb.db = db;

                    //打开数据库连接
                    con = ((IObjectContextAdapter)db).ObjectContext.Connection;
                    con.Open();
                    //开启事务
                    tran = con.BeginTransaction();

                    object o = callMsg.MethodBase.Invoke(GetUnwrappedServer(), args);
                    message = new ReturnMessage(o, args, args.Length, callMsg.LogicalCallContext, callMsg);

                    //业务逻辑处理完毕,提交事务
                    db.SaveChanges();
                    tran.Commit();
                }
                catch (Exception e)
                {
                    //发生异常,事务回滚
                    tran.Rollback();
                    message     = new ReturnMessage(e, callMsg);
                    returnvalue = e.InnerException.ToString();
                }
                finally
                {
                    //关闭数据库连接
                    con.Close();
                }
                if (message.Properties["__Return"] != null)
                {
                    returnvalue = message.Properties["__Return"].ToString();
                }
                log.Info("__ReturnValue:" + returnvalue);
                //Console.WriteLine(returnvalue);
                returnIMessage = message;
            }
            DateTime endTime = DateTime.Now;//方法结束时间
            log.Debug("__UseTime:" + (endTime - startTime).ToString());
            //SysLogService.GetInstance().InsertAccessLog(log);//写入日志到数据库
            log.Debug(string.Format("{0}:{1}", msg.Properties["__MethodName"].ToString(), returnvalue));//写入日志到本地文件
            return(returnIMessage as IMessage);
        }