Десериализация XML в IIS с использованием XmlSchemaSet чрезвычайно медленная (ASP.NET 4.6.2) - PullRequest
0 голосов
/ 14 июня 2019

У меня проблема с очень медленной десериализацией 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 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...