/// <summary> /// Saves the specified xml to storage. /// </summary> /// <param name="xmlData">The xml to save.</param> /// <param name="databaseId">The database id.</param> /// <returns> /// <c>true</c> if is saving successful; otherwise, <c>false</c>. /// </returns> public bool ProcessXml(XmlTransferObject xmlData, Guid?databaseId) { bool isSaved = false; ICommunicationPackage xml = this.packageFactory.CreatePackage(xmlData); xml.DatabaseId = databaseId; xml.Decompress(); if (xml.CheckSyntax()) { int retryCount = 0; using (IUnitOfWork uow = Manager.CreateUnitOfWork()) { uow.MapperFactory = this.mapperFactory; CommunicationPackageRepository repo = new CommunicationPackageRepository(uow); while (isSaved == false && retryCount < 10) { try { repo.Add(xml); isSaved = true; } catch (SqlException) { ++retryCount; Wait(); } catch (CommunicationPackageExistsException e) // Xml with the same id exists in db { this.Log.Info(e.ToString(), false); isSaved = true; } } if (!isSaved) { Log.Error("EXCEPTION: CRITICAL ERROR ALERT! What to do with unset (Saves the specified xml to storage) ProcessXml(XmlTransferObject xmlData,Guid? databaseId) PackageReceiver.cs"); } } } else { Log.Error("Invalid xml received, syntax error. Xml id=" + xmlData.Id + " content=" + xmlData.Content); ////it shouldnt be received in the first place = validation on the WebService site return(false); } return(isSaved); }
private ICommunicationPackage CreateCommunicationPackage(SendDataParameters methodParams) { ICommunicationPackage communicationPackage = IoC.Get <ICommunicationPackageFactory>().CreatePackage(methodParams.Xml); communicationPackage.DatabaseId = methodParams.DepartmentIdentifier; communicationPackage.Decompress(); //log when package is invalid but save it anyway if (communicationPackage.CheckSyntax() == false) { Log.Error("Invalid xml received - syntax error. Xml Id=" + communicationPackage.XmlData.Id); } return(communicationPackage); }