У меня проблема с очень медленной десериализацией XML в ASP.NET 4.6.2.Строка, содержащая XML, должна быть десериализована с использованием XmlSchemaSet, который прекрасно работает в нашей собственной среде разработки, но по какой-то причине наш клиент работает с тем же кодом с тем же XML на IIS (windows server 2012 r2, поэтому IIS 8.5 я предполагаю)имеет крайние задержки: Извлечение Schemaset занимает 20 секунд, а десериализация XML занимает 40 секунд , хотя тот же код может десериализовать другие XML / схемы без каких-либо задержек.Поскольку код выполняется в удаленной защищенной среде, у меня возникают проблемы с отладкой проблемы, и я не могу воспроизвести проблему локально.
Этот код был тщательно протестирован локально, в тестах юнит-тестов и запуске на IIS, и вво всех случаях это работало безупречно, даже при использовании одного и того же набора схем Xml и одних и тех же данных.Наши системы регистрации не видят исключений или ошибок.Я хотел бы сканировать любые события, используя ProcMon, но в настоящее время у меня нет доступа к среде хостинга :-( Схема набора состоит из 6 XSD-файлов с примерно 100 типами / шаблонами, поэтому не чрезмерно. XML-файл имеет длину около 72 строк.
public static object DeSerializeClassFromString(string xml, Type targetType, XmlSchemaSet schema)
{
XmlReaderSettings settings = null;
if (schema != null)
{
settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags =
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ReportValidationWarnings | XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationEventHandler += new ValidationEventHandler(DeSerializeClassFromString_ValidationEventHandler);
settings.Schemas.Add(schema);
}
// Use an xmlTextReader to get the proper encoding for the xml
XmlReader reader = XmlTextReader.Create(new XmlTextReader(new StringReader(xml)), settings);
object res = DeSerializeClass(reader, targetType);
return res;
}
public void TestFunction(string xml)
{
var xss = new System.Xml.Schema.XmlSchemaSet();
xss.Add(@"http://www.hostname.nl/schema/Messages/2010/02/Header",
XmlReader.Create(new MemoryStream(Properties.Resources.resource1)));
xss.Add(@"http://www.hostname.nl/schema/Messages/2010/02/Types",
XmlReader.Create(new MemoryStream(Properties.Resources.resource2)));
var obj = DeSerializeClassFromString(xml, typeof(myType), xss);
}
Я ожидаю, что код будет запущен в течение нескольких миллисекунд, а не 40 секунд.