// синхронизация справочника public int DicSync(double aEntityTypeId, string aJsonEntityData, ref string aErrorMessage) { int lResult = 1; aErrorMessage = string.Empty; try { this.WriteLog(USLogLevel.Debug, "Старт синхронизации сущности {0}", aEntityTypeId); if (Properties.Settings.Default.NeedLogSyncData) { this.WriteLog(USLogLevel.Trace, "Cинхронизации сущности {0}. Переданные данные {1}", aEntityTypeId, aJsonEntityData); } var lDbConnectionString = GetConnectionString(); using (var lData = new SyncServicesEntities(lDbConnectionString)) { var lElsysTypeName = lData.GetElsysTypeName(aEntityTypeId); lData.Connection.Open(); this.WriteLog(USLogLevel.Trace, "Cинхронизации сущности {0}:{1}. Start UpdateEntityData", aEntityTypeId, lElsysTypeName); lResult = Convert.ToInt16(lData.UPDATE_ENTITY_DATA(aJsonEntityData, (long?)aEntityTypeId, ref aErrorMessage)); this.WriteLog(USLogLevel.Trace, "Cинхронизации сущности {0}:{1}. Finish UpdateEntityData. Result {2}", aEntityTypeId, lElsysTypeName, lResult); switch (lResult) { case 0: this.WriteLog(USLogLevel.Trace | USLogLevel.Debug | USLogLevel.Error, "Синхронизации сущности {0}:{1} окончена с ошибкой {2}", aEntityTypeId, lElsysTypeName, aErrorMessage); break; case 1: this.WriteLog(USLogLevel.Trace | USLogLevel.Debug, "Синхронизации сущности {0}:{1} окончена успешно", aEntityTypeId, lElsysTypeName); break; case 2: this.WriteLog(USLogLevel.Trace | USLogLevel.Debug, "Синхронизации сущности {0}:{1} была прервана по причине {2}", aEntityTypeId, lElsysTypeName, aErrorMessage); break; default: break; } } } catch (Exception e) { aErrorMessage = string.Format("Ошибка синхронизации сущности {0}. Ошибка: {1}", aEntityTypeId, e); this.WriteLog(USLogLevel.Trace | USLogLevel.Debug, aErrorMessage); this.WriteLogException(aErrorMessage, e); throw; } return lResult; }
public void UpsmileSyncInitiatorTest() { var connection = GetConnectionString("DISTR_CO"); var data = new SyncServicesEntities(connection); string xml = string.Empty; string error = string.Empty; var result = data.GetLinkSyncServEntData(_LinkSyncServEnt,1,ref xml,ref error); Assert.IsNotNullOrEmpty(xml); Assert.IsNotNull(error); var syncParams = data.GetSyncServiceData(_LinkSyncServEnt); Assert.IsNotNull(syncParams); Assert.IsTrue(syncParams.BranchName.ToUpper() =="Донецкий".ToUpper()); var reciveData = new USInServiceValues { EntityTypeId = syncParams.ElsysTypeId, JsonEntityData = Convert.ToString(xml) }; Assert.IsNotNull(reciveData); var sendJSON = JsonConvert.SerializeObject(reciveData); Assert.IsNotNullOrEmpty(sendJSON); var cfg = "windows-1251"; var DBEncoding = Encoding.GetEncoding(cfg); var TransmissionEncoding = Encoding.GetEncoding(cfg); using (var ms = new MemoryStream(Encoding.Convert(DBEncoding, TransmissionEncoding, DBEncoding.GetBytes(sendJSON)))) { //var size = (ms.Length/1024); ////sendJSON = String.Empty; //var lBinding = new TcpChunkingBinding(); //lBinding.OpenTimeout= _openTimeoute; //lBinding.ReceiveTimeout = _openTimeoute; //lBinding.SendTimeout = _openTimeoute; //lBinding.CloseTimeout = _openTimeoute; //using (var factory = new ChannelFactory<IUSExService>(lBinding, new EndpointAddress(syncParams.EndPointAddress))) //{ // var service = factory.CreateChannel(); // var result1 = service.EntitySync(ms); // var res = JsonConvert.DeserializeObject<USInServiceRetValues>(result1); // Assert.AreEqual(res.ErrorMessage, null); // factory.Close(); //} var service = new USExService(); var r = service.EntitySync(ms); var res = JsonConvert.DeserializeObject<USInServiceRetValues>(r); Assert.AreEqual(res.ErrorMessage, null); } }
void TimerElapsed(object sender, ElapsedEventArgs e) { //запукск сервиса try { // идем по списку сущностей которые нужно синхронизировать и запускаем синхронизацию using (var lData = new SyncServicesEntities(GetConnectionString())) { lData.Connection.Open(); var query = from v in lData.VLinkSyncSerEntNeededs select v; foreach (var lItem in query) { _syncServiceManager.CallSyncData(lItem.ID); } lData.Connection.Close(); } } catch (Exception ex) { this.WriteLogException(Newtonsoft.Json.JsonConvert.SerializeObject(ex), ex); } }
static void Main() { // Console.WriteLine("Press any ley to start"); // Console.ReadLine(); // try // { // var lEndPointAddress = // new EndpointAddress(new Uri("net.tcp://62.122.56.156:9000/Upsmile.Sync.Executant/USExService.svc")); // Console.WriteLine("CallSyncService: lEndPointAddress = {0}", lEndPointAddress); // using (var factory = new ChannelFactory<IUSInService>(new NetTcpBinding(), lEndPointAddress)) // { // try // { // Console.WriteLine("CallSyncService: ChannelFactory created"); // IUSInService service = factory.CreateChannel(); // Console.WriteLine("factory.CreateChannel created"); // Console.WriteLine("Введите ID LinkSyncEntity для запуска синхронизации"); // var s = Console.ReadLine(); // var lLinkSyndcId = Convert.ToInt32(s); // string lResult = service.EntitySync(lLinkSyndcId); // Console.WriteLine("CallSyncService: service.EntitySync выполнен"); // factory.Close(); // Console.WriteLine("CallSyncService: ChannelFactory Closed"); // if (lResult != string.Empty) // { // Console.WriteLine("CallSyncService: Возникла ошибка во время синхронизации LinkId = {0}", lResult); // } // } // finally // { // factory.Abort(); // } // } // //ChannelFactory<IUSInService> factory = new ChannelFactory<IUSInService>(new NetTcpBinding(), lEndPointAddress); // //try // //{ // // Console.WriteLine("CallSyncService: ChannelFactory created"); // // IUSInService service = factory.CreateChannel(); // // Console.WriteLine("factory.CreateChannel created"); // // Console.WriteLine("Введите ID LinkSyncEntity для запуска синхронизации"); // // var s = Console.ReadLine(); // // var lLinkSyndcId = Convert.ToInt32(s); // // string lResult = service.EntitySync(lLinkSyndcId); // // Console.WriteLine("CallSyncService: service.EntitySync выполнен"); // // factory.Close(); // // Console.WriteLine("CallSyncService: ChannelFactory Closed"); // // if (lResult != string.Empty) // // { // // Console.WriteLine("CallSyncService: Возникла ошибка во время синхронизации LinkId = {0}", lResult); // // } // //} // //finally // //{ // // factory.Abort(); // //} // Console.WriteLine("Press any ley to finish"); // Console.ReadLine(); // } // catch (Exception e) // { // Console.WriteLine("Error: {0}", e); // Console.WriteLine("Error: {0}",e.InnerException); // Console.WriteLine("Press any ley to finish"); // Console.ReadLine(); // } SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder(); sqlBuilder.UserID = "distrdev"; sqlBuilder.DataSource = "SWCOPY"; sqlBuilder.Password = "******"; string ProviderString = sqlBuilder.ToString(); EntityConnectionStringBuilder entBuilder = new EntityConnectionStringBuilder(); entBuilder.Provider = "Devart.Data.Oracle"; entBuilder.ProviderConnectionString = ProviderString; entBuilder.Metadata = @"res://*/emSyncServices.csdl| res://*/emSyncServices.ssdl| res://*/emSyncServices.msl"; string lDbConnectionString = entBuilder.ToString(); //string lDbConnectionString = Properties.Settings.Default.DBConnectionString; using (var lData = new SyncServicesEntities(lDbConnectionString)) { var lresXML = string.Empty; var lErrorMsg = string.Empty; var lres = lData.GET_ENTITY_DATA(91038, 1, ref lresXML, ref lErrorMsg); Console.WriteLine(lresXML); Console.WriteLine(lErrorMsg); } }
/// <summary> /// Метод синхронизации /// </summary> /// <param name="aLinkSyncServiceEntitiesId"></param> /// <param name="aIsFullSync"></param> /// <returns></returns> public static string EntitySync(double aLinkSyncServiceEntitiesId, bool aIsFullSync = false) { var beginArgument = new SyncEventArgument {Exception = null, Result = aLinkSyncServiceEntitiesId}; OnBeginSync(beginArgument); _logger.Trace("EntitySync: Начата синхронизация: {0}", aLinkSyncServiceEntitiesId); LinkSyncServEntId = aLinkSyncServiceEntitiesId; IsFullSync = aIsFullSync; var lResult = string.Empty; try { using (var lData = new SyncServicesEntities(GetConnectionString())) { lData.Connection.Open(); try { var lSyncDateTime = lData.GET_SYSDATE(); _syncParams = lData.GetSyncServiceData(aLinkSyncServiceEntitiesId); if (_syncParams == null) { var ex = new NullReferenceException(lResult); OnEndSync(new SyncEventArgument{Exception =ex,Result = lResult}); return lResult; } var lIteratorNumber = 1; var lErrorMsg = string.Empty; var lJSonElements = string.Empty; int lSyncResult; do { switch (Convert.ToInt16(lData.GetLinkSyncServEntData(aLinkSyncServiceEntitiesId, lIteratorNumber, ref lJSonElements, ref lErrorMsg))) { case 0: // ошибка lSyncResult = 0; lResult = lErrorMsg; break; case 1: // успешное получение данных. lSyncResult = 1; if (lJSonElements != string.Empty) { // успешное получение данных. данные не пустые. запускаем синхронизацию // формируем данные для передачи на филиал var lInData = new USInServiceValues { EntityTypeId = _syncParams.ElsysTypeId, JsonEntityData = Convert.ToString(lJSonElements) }; // серриализация данных для передачи на филиал var lJsonInData = JsonConvert.SerializeObject(lInData); _logger.Trace("EntitySync: Кодировка на клиенте {0}", Encoding.Default.EncodingName); // создаем поток который будет передан на филиал var DBEncoding = Encoding.GetEncoding(Properties.Settings.Default.DBEncodingName); var TransmissionEncoding = Encoding.GetEncoding(Properties.Settings.Default.TransmissionEncodingName); _logger.Trace("EntitySync: Кодировка на базе {0}", DBEncoding.EncodingName); _logger.Trace("EntitySync: Кодировка передачи {0}", TransmissionEncoding.EncodingName); using (var ms = new MemoryStream(Encoding.Convert(DBEncoding, TransmissionEncoding, DBEncoding.GetBytes(lJsonInData)))) { var lBinding = new TcpChunkingBinding { OpenTimeout = Properties.Settings.Default.OpenTimeout, ReceiveTimeout = Properties.Settings.Default.ReceiveTimeout, SendTimeout = Properties.Settings.Default.SendTimeout, CloseTimeout = Properties.Settings.Default.CloseTimeout }; var endPointAdress = _syncParams.EndPointAddress; //endPointAdress = string.Empty; using (var factory = new ChannelFactory<IUSExService>(lBinding, new EndpointAddress(endPointAdress))) { try { var service = factory.CreateChannel(); var lRetValuesStr = service.EntitySync(ms); factory.Close(); var lRetValues = JsonConvert.DeserializeObject<USInServiceRetValues>(lRetValuesStr); lSyncResult = Convert.ToInt16(lRetValues.Result); lResult = lRetValues.ErrorMessage; } catch (Exception e) { lResult = string.Format("EntitySync: Синхронизация LinkSyncServiceEntitiesId = {0} закончилась с ошибкой. Ошибка: {1}", aLinkSyncServiceEntitiesId, e); OnErrorSync(new SyncEventArgument {Exception = e,Result = lResult}); continue; } factory.Abort(); } ms.Close(); } } break; case 2: // ошибки не было но данные не были получены lSyncResult = 2; lResult = lErrorMsg; OnErrorSync(new SyncEventArgument {Exception = null,Result = lResult}); continue; //break; default: lSyncResult = 0; lResult = string.Format("EntitySync: Синхронизация LinkSyncServiceEntitiesId = {0} закончилась с ошибкой. Не прогнозируемый результат получения данных", aLinkSyncServiceEntitiesId); OnErrorSync(new SyncEventArgument {Exception = null,Result = lResult}); continue; //break; } lIteratorNumber += 1; } while ((lSyncResult == 1) && (lJSonElements != string.Empty)); switch (lSyncResult) { case 0: var s0 = string.Format("Ошибка при синхронизация сущности EntitySync: aLinkSyncServiceEntitiesId = {0} Описание {1}; Сущность {2}: {3}; Филиал {4}; Ошибка {5}", aLinkSyncServiceEntitiesId, _syncParams.Description, _syncParams.ElsysTypeId, _syncParams.ElsysTypeName, _syncParams.BranchName, lResult); OnEndSync(new SyncEventArgument {Exception = null,Result = s0}); break; case 1: lData.SET_LINK_SYNC_SERV_CALL_DATA(Convert.ToDecimal(LinkSyncServEntId), lSyncDateTime); var s1 =string.Format("Успешная синхронизация сущности EntitySync: aLinkSyncServiceEntitiesId = {0} Описание {1}; Сущность {2}: {3}; Филиал {4}", aLinkSyncServiceEntitiesId, _syncParams.Description, _syncParams.ElsysTypeId, _syncParams.ElsysTypeName, _syncParams.BranchName); OnEndSync(new SyncEventArgument {Exception = null,Result = s1}); break; case 2: var s2 = string.Format("Cинхронизация сущности EntitySync не завершена: aLinkSyncServiceEntitiesId = {0} Описание {1}; Сущность {2}: {3}; Филиал {4}. Причина {5}", aLinkSyncServiceEntitiesId, _syncParams.Description, _syncParams.ElsysTypeId, _syncParams.ElsysTypeName, _syncParams.BranchName, lResult); OnEndSync(new SyncEventArgument {Exception = null,Result = s2}); lResult = string.Empty; break; } } finally { lData.Connection.Close(); lData.Dispose(); } } } catch (Exception e) { lResult = string.Format("EntitySync: Синхронизация LinkSyncServiceEntitiesId = {0} закончилась с ошибкой. Ошибка: {1}", aLinkSyncServiceEntitiesId, e); OnErrorSync(new SyncEventArgument {Exception = e,Result = lResult}); } OnEndSync(new SyncEventArgument {Exception = null,Result = aLinkSyncServiceEntitiesId}); return lResult; }
public string EntitySync(double aLinkSyncServiceEntitiesId, bool aIsFullSync = false) { this.WriteLog(USLogLevel.Trace | USLogLevel.Debug, "EntitySync: Начата синхронизация: {0}", aLinkSyncServiceEntitiesId); LinkSyncServEntId = aLinkSyncServiceEntitiesId; IsFullSync = aIsFullSync; string lResult = string.Empty; try { using (var lData = new SyncServicesEntities(GetConnectionString())) { lData.Connection.Open(); try { var lSyncDateTime = lData.GET_SYSDATE(); _syncParams = lData.GetSyncServiceData(aLinkSyncServiceEntitiesId); if (_syncParams == null) { lResult = string.Format("EntitySync: aLinkSyncServiceEntitiesId = {0} параметры синхронизации не определены", aLinkSyncServiceEntitiesId); this.WriteLog(USLogLevel.Trace | USLogLevel.Debug, lResult); return lResult; } this.WriteLog(USLogLevel.Trace | USLogLevel.Debug, "EntitySync: aLinkSyncServiceEntitiesId = {0} Описание {1}; Сущность {2}: {3}; Филиал {4}", aLinkSyncServiceEntitiesId, _syncParams.Description, _syncParams.ElsysTypeId, _syncParams.ElsysTypeName, _syncParams.BranchName); int lIteratorNumber = 1; var lErrorMsg = string.Empty; var lJSonElements = string.Empty; int lSyncResult = 0; do { this.WriteLog(USLogLevel.Trace, "EntitySync: aLinkSyncServiceEntitiesId = {0} данные по сущности получены и сериализованы. Шаг {1}", aLinkSyncServiceEntitiesId, lIteratorNumber); switch (Convert.ToInt16(lData.GetLinkSyncServEntData(aLinkSyncServiceEntitiesId, lIteratorNumber, ref lJSonElements, ref lErrorMsg))) { case 0: // ошибка lSyncResult = 0; lResult = lErrorMsg; break; case 1: // успешное получение данных. lSyncResult = 1; if (lJSonElements != string.Empty) { // успешное получение данных. данные не пустые. запускаем синхронизацию // формируем данные для передачи на филиал var lInData = new USInServiceValues { EntityTypeId = _syncParams.ElsysTypeId, JsonEntityData = Convert.ToString(lJSonElements) }; // серриализация данных для передачи на филиал string lJsonInData = Newtonsoft.Json.JsonConvert.SerializeObject(lInData); if (Properties.Settings.Default.NeedLogSyncData) { this.WriteLog(USLogLevel.Trace, "EntitySync: aLinkSyncServiceEntitiesId = {0} lJsonInData сформирован = {1}", aLinkSyncServiceEntitiesId, lJsonInData); } lInData = null; this.WriteLog(USLogLevel.Trace, "EntitySync: Кодировка на клиенте {0}", Encoding.Default.EncodingName); // создаем поток который будет передан на филиал var DBEncoding = Encoding.GetEncoding(Properties.Settings.Default.DBEncodingName); var TransmissionEncoding = Encoding.GetEncoding(Properties.Settings.Default.TransmissionEncodingName); this.WriteLog(USLogLevel.Trace, "EntitySync: Кодировка на базе {0}", DBEncoding.EncodingName); this.WriteLog(USLogLevel.Trace, "EntitySync: Кодировка передачи {0}", TransmissionEncoding.EncodingName); using (var ms = new MemoryStream(Encoding.Convert(DBEncoding, TransmissionEncoding, DBEncoding.GetBytes(lJsonInData)))) { this.WriteLog(USLogLevel.Trace, "EntitySync: aLinkSyncServiceEntitiesId = {0} MemoryStream создан", aLinkSyncServiceEntitiesId); lJsonInData = String.Empty; var lBinding = new TcpChunkingBinding(); lBinding.OpenTimeout = Properties.Settings.Default.OpenTimeout; lBinding.ReceiveTimeout = Properties.Settings.Default.ReceiveTimeout; lBinding.SendTimeout = Properties.Settings.Default.SendTimeout; lBinding.CloseTimeout = Properties.Settings.Default.CloseTimeout; this.WriteLog(USLogLevel.Trace, "lBinding params lBinding.OpenTimeout = {0}; lBinding.ReceiveTimeout = {1}; lBinding.SendTimeout = {2}; lBinding.CloseTimeout = {3}", lBinding.OpenTimeout, lBinding.ReceiveTimeout, lBinding.SendTimeout, lBinding.CloseTimeout); using (var factory = new ChannelFactory<IUSExService>(lBinding, new EndpointAddress(_syncParams.EndPointAddress))) { try { this.WriteLog(USLogLevel.Trace, "EntitySync: aLinkSyncServiceEntitiesId = {0} ChannelFactory created", aLinkSyncServiceEntitiesId); IUSExService service = factory.CreateChannel(); this.WriteLog(USLogLevel.Trace, "EntitySync: aLinkSyncServiceEntitiesId = {0} IUSExService service = factory.CreateChannel created", aLinkSyncServiceEntitiesId); var lRetValuesStr = service.EntitySync(ms); this.WriteLog(USLogLevel.Trace, "EntitySync: aLinkSyncServiceEntitiesId = {0} service.EntitySync выполнен", aLinkSyncServiceEntitiesId); factory.Close(); this.WriteLog(USLogLevel.Trace, "EntitySync: aLinkSyncServiceEntitiesId = {0} ChannelFactory Closed", aLinkSyncServiceEntitiesId); this.WriteLog(USLogLevel.Trace, "EntitySync: aLinkSyncServiceEntitiesId = {0} Returned Value Deserialized", aLinkSyncServiceEntitiesId); var lRetValues = Newtonsoft.Json.JsonConvert.DeserializeObject<USInServiceRetValues>(lRetValuesStr); lSyncResult = Convert.ToInt16(lRetValues.Result); lResult = lRetValues.ErrorMessage; } catch (Exception e) { lResult = string.Format("EntitySync: Синхронизация LinkSyncServiceEntitiesId = {0} закончилась с ошибкой. Ошибка: {1}", aLinkSyncServiceEntitiesId, e); this.WriteLog(USLogLevel.Trace | USLogLevel.Debug, lResult, e); this.WriteLogException(lResult, e); } factory.Abort(); } } } break; case 2: // ошибки не было но данные не были получены lSyncResult = 2; lResult = lErrorMsg; break; default: lSyncResult = 0; lResult = string.Format("EntitySync: Синхронизация LinkSyncServiceEntitiesId = {0} закончилась с ошибкой. Не прогнозируемый результат получения данных", aLinkSyncServiceEntitiesId); break; } lIteratorNumber += 1; } while ((lSyncResult == 1) && (lJSonElements != string.Empty)); switch (lSyncResult) { case 0: this.WriteLog(USLogLevel.Trace | USLogLevel.Debug | USLogLevel.Error, "Ошибка при синхронизация сущности EntitySync: aLinkSyncServiceEntitiesId = {0} Описание {1}; Сущность {2}: {3}; Филиал {4}; Ошибка {5}", aLinkSyncServiceEntitiesId, _syncParams.Description, _syncParams.ElsysTypeId, _syncParams.ElsysTypeName, _syncParams.BranchName, lResult); break; case 1: lData.SET_LINK_SYNC_SERV_CALL_DATA(Convert.ToDecimal(LinkSyncServEntId), lSyncDateTime); this.WriteLog(USLogLevel.Trace | USLogLevel.Debug, "Успешная синхронизация сущности EntitySync: aLinkSyncServiceEntitiesId = {0} Описание {1}; Сущность {2}: {3}; Филиал {4}", aLinkSyncServiceEntitiesId, _syncParams.Description, _syncParams.ElsysTypeId, _syncParams.ElsysTypeName, _syncParams.BranchName); break; case 2: this.WriteLog(USLogLevel.Trace | USLogLevel.Debug, "Cинхронизация сущности EntitySync не завершена: aLinkSyncServiceEntitiesId = {0} Описание {1}; Сущность {2}: {3}; Филиал {4}. Причина {5}", aLinkSyncServiceEntitiesId, _syncParams.Description, _syncParams.ElsysTypeId, _syncParams.ElsysTypeName, _syncParams.BranchName, lResult); lResult = string.Empty; break; default: break; } } finally { lData.Connection.Close(); this.WriteLog(USLogLevel.Trace, "EntitySync: aLinkSyncServiceEntitiesId = {0} Соединение закрыто", aLinkSyncServiceEntitiesId); lData.Dispose(); this.WriteLog(USLogLevel.Trace, "EntitySync: aLinkSyncServiceEntitiesId = {0} lData.Dispose done", aLinkSyncServiceEntitiesId); } } } catch (Exception e) { lResult = string.Format("EntitySync: Синхронизация LinkSyncServiceEntitiesId = {0} закончилась с ошибкой. Ошибка: {1}", aLinkSyncServiceEntitiesId, e); this.WriteLog(USLogLevel.Trace | USLogLevel.Debug, lResult, e); this.WriteLogException(lResult, e); } this.WriteLog(USLogLevel.Trace | USLogLevel.Debug, "EntitySync: Завершена синхронизация: {0}", aLinkSyncServiceEntitiesId); return lResult; }
public void GetSynckParam() { var connection = GetConnectionString("DISTR_CO"); var data = new SyncServicesEntities(connection); var syncParams = data.GetSyncServiceData(_LinkSyncServEnt); Assert.IsNotNull(syncParams); }