private void SaveUnlineData(DataSyncContract tempDataSyncContract)
        {
            //离线数据同步事件委托
            Action tempSyncAction = new Action(() =>
            {
                //同步离线数据到数据中心
                ILocalDataSyncService syncService = ObjectContainer.CreateInstance <ILocalDataSyncService>();
                syncService.Sync(tempDataSyncContract);
            });

            //异步调用
            tempSyncAction.BeginInvoke(null, null);
        }
        private void RemoteCall(DataSyncContract tempDataSyncContract)
        {
            //离线数据同步事件委托
            Action tempSyncAction = new Action(() =>
            {
                //同步离线数据到数据中心
                IRemoteDataSyncService remoteSyncService = ObjectContainer.CreateInstance <IRemoteDataSyncService>();
                if (!remoteSyncService.Sync(tempDataSyncContract))
                {
                    this.SaveUnlineData(tempDataSyncContract);
                }
            });

            //异步调用
            tempSyncAction.BeginInvoke(null, null);
        }
        /// <summary>
        /// 通过实现此方法来拦截调用并执行所需的拦截行为。
        /// </summary>
        /// <param name="input">调用拦截目标时的输入信息。</param>
        /// <param name="getNext">通过行为链来获取下一个拦截行为的委托。</param>
        /// <returns>从拦截目标获得的返回信息。</returns>
        public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
        {
            if (input == null)
            {
                throw new ArgumentNullException("input");
            }
            if (getNext == null)
            {
                throw new ArgumentNullException("getNext");
            }

            var methodReturn = getNext().Invoke(input, getNext);

            //获取当前操作的方法
            var tempMethod = input.MethodBase as System.Reflection.MethodInfo;

            var tempDataSyncAttributes      = tempMethod.GetCustomAttributes(typeof(DataSyncAttribute), false);
            var tempDataSyncCloudAttributes = tempMethod.GetCustomAttributes(typeof(DataSyncCloudAttribute), false);

            //如果该方法上有标记
            if (tempDataSyncAttributes.Length > 0)
            {
                //方法参数
                var inputParameterCollection = input.Inputs;

                //根据反射获取对象的成员信息
                var realArguments = (object[])ReflectHelper.GetInstanceProperty(inputParameterCollection, "arguments");

                //获取当前方法所属的对象
                var tempTarget = input.Target;

                //生成对应的信息-并保存到数据库中
                DataSyncContract tempDataSyncContract = new DataSyncContract();

                if (realArguments.Length > 0)
                {
                    tempDataSyncContract.Data     = NS.Framework.Utility.Xml.XmlHelper.Instance.SerializeToString(realArguments[0]);
                    tempDataSyncContract.DataType = string.Format("{0};{1}", realArguments[0].GetType().Assembly.GetName().Name + ".dll", realArguments[0].GetType().FullName);
                }

                tempDataSyncContract.Id            = Guid.NewGuid().ToString();
                tempDataSyncContract.MethodName    = tempMethod.Name;
                tempDataSyncContract.ServicePath   = string.Format("{0};{1}", input.MethodBase.ReflectedType.Assembly.GetName().Name + ".dll", input.Target.GetType().FullName);
                tempDataSyncContract.OperationTime = DateTime.Now;
                tempDataSyncContract.SyncFlag      = "0";
                var tempDataSyncAttribute = tempDataSyncAttributes[0] as DataSyncAttribute;

                //如果要求实时同步
                if (tempDataSyncAttribute.IsRealTimeSync)
                {
                    this.RemoteCall(tempDataSyncContract);
                }
                else //不要求实时同步的数据,就通过离线同步版本的方式来传输
                {
                    this.SaveUnlineData(tempDataSyncContract);
                }
            }
            //如果该方法上有标记
            if (tempDataSyncCloudAttributes.Length > 0)
            {
                //方法参数
                var inputParameterCollection = input.Inputs;

                //根据反射获取对象的成员信息
                var realArguments = (object[])ReflectHelper.GetInstanceProperty(inputParameterCollection, "arguments");

                //获取当前方法所属的对象
                var tempTarget = input.Target;

                //生成对应的信息-并保存到数据库中
                DataSyncContract tempDataSyncContract = new DataSyncContract();

                if (realArguments.Length > 0)
                {
                    tempDataSyncContract.Data     = NS.Framework.Utility.Xml.XmlHelper.Instance.SerializeToString(realArguments[0]);
                    tempDataSyncContract.DataType = string.Format("{0};{1}", realArguments[0].GetType().Assembly.GetName().Name + ".dll", realArguments[0].GetType().FullName);
                }

                tempDataSyncContract.Id            = Guid.NewGuid().ToString();
                tempDataSyncContract.MethodName    = tempMethod.Name;
                tempDataSyncContract.ServicePath   = string.Format("{0};{1}", input.MethodBase.ReflectedType.Assembly.GetName().Name + ".dll", input.Target.GetType().FullName);
                tempDataSyncContract.OperationTime = DateTime.Now;
                tempDataSyncContract.SyncFlag      = "1";
                var tempDataSyncAttribute = tempDataSyncCloudAttributes[0] as DataSyncCloudAttribute;

                //如果要求实时同步
                if (tempDataSyncAttribute.IsRealTimeSync)
                {
                    this.RemoteCall(tempDataSyncContract);
                }
                else //不要求实时同步的数据,就通过离线同步版本的方式来传输
                {
                    this.SaveUnlineData(tempDataSyncContract);
                }
            }
            return(methodReturn);
        }