public void TestToReestrMspFromMsrCatalogItemsRequestDeserializeMethod() { var xmlCurrentDoc = new XmlDocument(); xmlCurrentDoc.Load($"{Context.XMLMessagePath}{ToReestrMspFromMsrCatalogItemsRequest.NameForESB}.xml"); var messageObj = SerializationTools.DeserialiseDataContract <ToReestrMspFromMsrCatalogItemsRequest>(xmlCurrentDoc.OuterXml); var originalMessageObj = SynchronizationTestHelper.GetToReestrMspFromMsrCatalogItemsRequestMessage(); //TODO поправить по аналогии с TestToMsrFromReestrMspCatalogDataDeserializeMethod //Assert.IsFalse(message == null); Assert.AreEqual(messageObj.RequestInfo, originalMessageObj.RequestInfo); Assert.AreEqual(messageObj.Criteria.Type, originalMessageObj.Criteria.Type); for (int i = 0; i < messageObj.Criteria.Condition.Length; i++) { Assert.AreEqual(messageObj.Criteria.Condition[i].Attribute, originalMessageObj.Criteria.Condition[i].Attribute); Assert.AreEqual(messageObj.Criteria.Condition[i].Operator, originalMessageObj.Criteria.Condition[i].Operator); Assert.AreEqual(messageObj.Criteria.Condition[i].Value, originalMessageObj.Criteria.Condition[i].Value); } Assert.AreEqual(messageObj.Criteria.Criteria, originalMessageObj.Criteria.Criteria); Assert.AreEqual(messageObj.Sorting, originalMessageObj.Sorting); Assert.AreEqual(messageObj.Type, originalMessageObj.Type); }
/// <summary> /// Обработать сообщение. /// </summary> /// <param name="message">Сообщение из шины.</param> public void HandleMessage(SyncLogItem logItem) { if (!string.IsNullOrEmpty(logItem.DataSet)) { var ds = DataServiceProvider.DataService; List <DataObject> toUpdate = new List <DataObject>(); var viewGruppa = new View { DefineClassType = typeof(GruppaDublei) }; viewGruppa.AddProperties( nameof(GruppaDublei.idReestrZapisi), nameof(GruppaDublei.FullValue) ); var viewLichnost = new View { DefineClassType = typeof(Leechnost) }; viewLichnost.AddProperty(nameof(Leechnost.GruppaDublei)); var doc = new XmlDocument(); doc.LoadXml(logItem.DataSet); var response = SerializationTools.DeserialiseDataContract <ToMsrFromReestrMspMergedItemsResponse>(logItem.DataSet); var i = 0; if (response?.Items == null) { return; } foreach (var item in response.Items) { var idReestrZapisi = item.Beneficiary.Guid.ToString(); var xml = doc.SelectNodes("//*[local-name() = 'Item']")[i].OuterXml; var gruppa = ds.Query <GruppaDublei>(GruppaDublei.Views.AuditView).Where(x => x.idReestrZapisi == idReestrZapisi).FirstOrDefault(); if (gruppa == null) { gruppa = new GruppaDublei { idReestrZapisi = idReestrZapisi.ToString(), FullValue = xml }; } else { gruppa.FullValue = xml; } toUpdate.Add(gruppa); var keys = item.Sources.Select(x => (object)x.Key).ToList(); var lichnosti = ds.Query <Leechnost>(viewLichnost).Where(x => keys.Contains(x.__PrimaryKey)).ToList(); lichnosti.ForEach(x => x.GruppaDublei = gruppa); toUpdate.AddRange(lichnosti); i++; } var objects = toUpdate.ToArray(); ds.UpdateObjects(ref objects); } }
protected override void Process() { if (!string.IsNullOrEmpty(_syncLogItem.DataSet)) { var response = SerializationTools.DeserialiseDataContract <ToMsrFromReestrMspCatalogItemsResponse>(_syncLogItem.DataSet); foreach (var item in response?.Items) { ProcessClassifier(item.Classifier, null); } } }
protected override void Process() { if (!string.IsNullOrEmpty(_syncLogItem.DataSet)) { var response = SerializationTools.DeserialiseDataContract <ToMsrFromReestrMspFiasItemsResponse>(_syncLogItem.DataSet); foreach (var item in response?.Items) { ProcessFiasAddressObjects(item.FiasAddressObjects); ProcessFiasHousesStructures(item.FiasHousesStructures); } } }
protected override void Process() { if (!string.IsNullOrEmpty(_syncLogItem.DataSet)) { var response = SerializationTools.DeserialiseDataContract <ToMsrFromReestrMspCatalogDataChanges>(_syncLogItem.DataSet); foreach (var item in response?.Items) { DateTime?state = item.State == tState.deleted ? (DateTime?)DateTime.Now : null; ProcessClassifier(item.Classifier, state); } } }
public void TestToTUFromMSRResponseDeserializeMethod() { var xmlCurrentDoc = new XmlDocument(); xmlCurrentDoc.Load($"{Context.XMLMessagePath}{ToTUFromMsrResponse.NameForESB}.xml"); var messageObj = SerializationTools.DeserialiseDataContract <ToTUFromMsrResponse>(xmlCurrentDoc.OuterXml); var originalMessageObj = SynchronizationTestHelper.GetToTUFromMsrResponseMessage(); Assert.AreEqual(messageObj.RequestInfo, originalMessageObj.RequestInfo); Assert.AreEqual(messageObj.Items.FirstOrDefault()?.Territory?.Guid, originalMessageObj.Items.FirstOrDefault()?.Territory?.Guid); Assert.AreEqual(messageObj.Items.LastOrDefault()?.TypeDocument?.Guid, originalMessageObj.Items.LastOrDefault()?.TypeDocument?.Guid); }
public void TestToMsrFromReestrMspFiasItemsResponseDeserializeMethod() { var xmlCurrentDoc = new XmlDocument(); xmlCurrentDoc.Load($"{Context.XMLMessagePath}{ToMsrFromReestrMspFiasItemsResponse.NameForESB}.xml"); var messageObj = SerializationTools.DeserialiseDataContract <ToMsrFromReestrMspFiasItemsResponse>(xmlCurrentDoc.OuterXml); var originalMessageObj = SynchronizationTestHelper.GetToMsrFromReestrMspFiasItemsMessage(); Assert.AreEqual(messageObj.RequestInfo, originalMessageObj.RequestInfo); Assert.AreEqual(messageObj.Items.FirstOrDefault()?.FiasAddressObjects.AOGUID, originalMessageObj.Items.FirstOrDefault()?.FiasAddressObjects.AOGUID); Assert.AreEqual(messageObj.Items.LastOrDefault()?.FiasHousesStructures.AOGUID, originalMessageObj.Items.LastOrDefault()?.FiasHousesStructures.AOGUID); }
public void TestToReestrMspFromMsrDataChangesDeserializeMethod() { var xmlCurrentDoc = new XmlDocument(); xmlCurrentDoc.Load($"{Context.XMLMessagePath}{ToReestrMspFromMsrDataChanges.NameForESB}.xml"); var messageObj = SerializationTools.DeserialiseDataContract <ToReestrMspFromMsrDataChanges>(xmlCurrentDoc.OuterXml); var originalMessageObj = SynchronizationTestHelper.GetToReestrMspFromMsrDataChangesMessage(); Assert.AreEqual(messageObj.RequestInfo, originalMessageObj.RequestInfo); Assert.AreEqual(messageObj.Items.FirstOrDefault()?.Beneficiary.Registration.Guid, originalMessageObj.Items.FirstOrDefault()?.Beneficiary.Registration.Guid); Assert.AreEqual(messageObj.Items.FirstOrDefault()?.Beneficiary.Location.Street.Territory.FIAS, originalMessageObj.Items.FirstOrDefault()?.Beneficiary.Location.Street.Territory.FIAS); }
public void TestToMsrFromReestrMspCatalogDataDeserializeMethod() { var xmlCurrentDoc = new XmlDocument(); xmlCurrentDoc.Load($"{Context.XMLMessagePath}{ToMsrFromReestrMspCatalogDataChanges.NameForESB}.xml"); var messageObj = SerializationTools .DeserialiseDataContract <ToMsrFromReestrMspCatalogDataChanges>(xmlCurrentDoc.OuterXml); var originalMessageObj = SynchronizationTestHelper.GetToMsrFromReestrMspCatalogDataMessage(); Assert.AreEqual(messageObj.RequestInfo, originalMessageObj.RequestInfo); Assert.AreEqual(messageObj.Items.FirstOrDefault()?.Classifier.Guid, originalMessageObj.Items.FirstOrDefault()?.Classifier.Guid); Assert.AreEqual(messageObj.Items.FirstOrDefault()?.Classifier.Category.Name, originalMessageObj.Items.FirstOrDefault()?.Classifier.Category.Name); }
public void TestToMsrFromReestrMspMergedItemsResponseDeserializeMethod() { var xmlCurrentDoc = new XmlDocument(); xmlCurrentDoc.Load($"{Context.XMLMessagePath}{ToMsrFromReestrMspMergedItemsResponse.NameForESB}.xml"); var messageObj = SerializationTools.DeserialiseDataContract <ToMsrFromReestrMspMergedItemsResponse>( xmlCurrentDoc.OuterXml); var originalMessageObj = SynchronizationTestHelper.GetToMsrFromReestrMspMergeItemsMessage(); Assert.AreEqual(messageObj.RequestInfo, originalMessageObj.RequestInfo); Assert.AreEqual(messageObj.Items.FirstOrDefault()?.Beneficiary?.Guid, originalMessageObj.Items.FirstOrDefault()?.Beneficiary?.Guid); Assert.AreEqual(messageObj.Items.FirstOrDefault()?.Sources.FirstOrDefault()?.Key, originalMessageObj.Items.FirstOrDefault()?.Sources.FirstOrDefault()?.Key); }
/// <summary> /// Обработать сообщение. /// </summary> /// <param name="logItem">Сообщение из журнала синхронизации.</param> public void HandleDataChangeMessage <TMessage, TItem>(SyncLogItem logItem) where TMessage : IDataChangeMessageResponse <TItem> where TItem : IChangedItem { if (!string.IsNullOrEmpty(logItem.DataSet)) { var doc = new XmlDocument(); doc.LoadXml(logItem.DataSet); var xmlClassName = Settings.GetMessageClassTypeName(logItem.Description); if (!string.IsNullOrEmpty(xmlClassName)) { // Получаем тип по названию класса из конфиг файла. var messageType = Type.GetType(xmlClassName); if (messageType != null) { TMessage response; try { response = SerializationTools.DeserialiseDataContract <TMessage>(logItem.DataSet); } catch (Exception ex) { throw new Exception( $"Ошибка десерилизации объекта SyncLogItem.Pk = {logItem.__PrimaryKey}, тип ToMsrFromTUResponse.", ex); } if (response?.Items == null) { LogService.LogWarnFormat( "В сообщениии SyncLogItem.Pk = {0}, отсутствуют объекты для обработки.", logItem.__PrimaryKey); return; } var arrToUpdate = new List <DataObject>(); var arrConformity = new Dictionary <string, List <DataObject> > { { sObjectType, new List <DataObject>() }, { sSource, new List <DataObject>() }, { sConformity, new List <DataObject>() } }; Source source = null; try { source = _syncDS.Query <Source>(Source.Views.SourceE) .FirstOrDefault(x => x.name == logItem.DataSource); } catch (Exception ex) { throw new Exception( $"Произошла ошибка при вычитке источника из БД Source.Name = '{logItem.DataSource}'.", ex); } if (source == null) { source = new Source { name = logItem.DataSource }; arrConformity[sSource].Add(source); } foreach (var item in response.Items) { var obj = GetXMLDataObjInChangedItem(item); //Получаем настройки для обработки типа сообщения. GetSyncSettings(obj, out var destType, out var mapper); ProcessObject(obj, item.State, destType, mapper, item.СhangedAttributes?.Select(x => x.Name).ToList(), source, ref arrToUpdate, ref arrConformity); } var listSync = new List <DataObject>(); listSync.AddRange(arrConformity[sObjectType]); listSync.AddRange(arrConformity[sSource]); var objectsDef = arrToUpdate.ToArray(); var objectsSync = listSync.ToArray(); try { _defDS.UpdateObjectsOrdered(ref objectsDef); _syncDS.UpdateObjects(ref objectsSync); objectsSync = arrConformity[sConformity].ToArray(); _syncDS.UpdateObjects(ref objectsSync); } catch (Exception ex) { throw new Exception($"Произошла ошибка при сохранении объектов в БД. {ex.InnerException?.Message ?? ex.Message}"); } } else { var errorMessage = $" Не найден XML-класс типа сообщения с названием {xmlClassName}"; throw new InvalidOperationException(errorMessage); } } else { var errorMessage = $"Незаполнен тип xml-класса, для сообщения {logItem.Description}. Проверьте настройки секции messageHandlers в конфигурационном файле."; throw new Exception(errorMessage); } } }
/// <summary> /// Принять сообщение из шины. /// </summary> /// <param name="message">Сообщение.</param> public void AcceptMessage([MessageParameter(Name = "msg")] MessageFromESB message) { LogService.LogInfo($"BusListenerService: Принял соообщение - {message.MessageTypeID}!"); // Ищем в конфиг файле, привязку между типов сообщения и xml-классом этого сообщения. var xmlClassName = Context.GetMessageXMLClassNameByMessageID(message.MessageTypeID); if (!string.IsNullOrEmpty(xmlClassName)) { // Получаем тип по названию класса из конфиг файла. var messageType = Type.GetType(xmlClassName); if (messageType != null) { try { ICommonMessage messageObj = null; if (!string.IsNullOrEmpty(message.Body)) { // Проверка валидация по XSD-схеме полученного xml. if (Context.EnableXSDValidation) { var pathToXSD = Path.Combine(HttpRuntime.AppDomainAppPath, $"{Context.XSDSchemasPath}{message.MessageTypeID}.xsd"); if (File.Exists(pathToXSD)) { XMLTools.CheckXMLFromStringtoXSD(message.Body, pathToXSD); } else { LogService.LogWarn( $"BusListenerService: При получении сообщения включена проверка валидности сообщения XSD-схеме, но XSD-схема для сообщения типа {message.MessageTypeID} не найдена!{Environment.NewLine} Путь для ожидаемой XSD-схемы - {pathToXSD}"); } } // Десериализуем сообщение для его сохранения. messageObj = SerializationTools.DeserialiseDataContract(messageType, message.Body) as ICommonMessage; } if (messageObj != null) { // Сохранение сообщения в SyncLogItem. messageObj.Save(message.SenderName, message.Body, true); } else { LogService.LogWarn( $"BusListenerService: Получено пустое сообщение типа {message.MessageTypeID}. Сообщение не будет сохранено в БД!"); } } catch (XmlSchemaValidationException ex) { LogService.LogError( $"{MessageErrorHeader} Не пройдена валидация XSD-схемы для сообщения типа {message.MessageTypeID}", ex); throw; } catch (Exception ex) { LogService.LogError($"{MessageErrorHeader}", ex); throw; } } else { var errorMessage = $"{MessageErrorHeader} Не найден XML-класс типа сообщения с названием {xmlClassName}"; LogService.LogError(errorMessage); throw new InvalidOperationException(errorMessage); } } else { var errorMessage = $"{MessageErrorHeader} Неизвестный тип сообщения - {message.MessageTypeID}. Проверьте настройки секции {Context.CustomSBListenerConfigSectionName} в конфигурационном файле."; LogService.LogError(errorMessage); throw new UnknowMessageTypeException(errorMessage); } }