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