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); }