Ну, окончательный ответ на мой вопрос не поможет всем, кто сталкивался с этим, но некоторые из моих коллег также столкнулись в этом месяце спустя в другой системе с другим продуктом. Смеялись, когда они нашли мой пост здесь SO несколько месяцев спустя, и удивлялись, решил я это на самом деле или нет, поскольку здесь не было принято никакого решения.
Окончательное решение не имеет ничего общего с проблемами десериализации. Вместо этого он включал в себя полное удаление и установку новой копии клиента базы данных Oracle ODP.NET , который используют многие, если не все наши приложения.
Судя по неподтвержденным данным, эта проблема возникает в неправильно исправленных версиях сборок ODP.NET, которые впоследствии были распространены на другие системы через клоны виртуальных машин.
Когда ODP.NET был полностью удален, а с веб-сайта Oracle установлена и установлена новая совместимая версия, проблема полностью исчезла.
Гипотеза заключается в том, что используемый (но поврежденный) драйвер ODP.NET имеет небезопасный код и неоднократно перезаписывал защищенную область памяти .NET рядом с методом Deserialize
после первого использования. Если бы Deserialize
вызывался до каких-либо вызовов ODP.NET, он бы работал просто отлично. Однако все последующие вызовы для десериализации после использования любых вызовов ODP.NET с треском провалились.
Окончательное решение, которое теперь разрешено дважды в двух разных продуктах, - это установить хорошую / свежую / чистую / новую копию ODP.NET.
Не красиво ... но вот что это решило.