В итоге было отдано предпочтение работе со строками:
public static XmlNode ToXml(string xml)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
return doc.DocumentElement;
}
public static string FromXml(XmlNode xml)
{
if (xml == null) return string.Empty;
return xml.OuterXml;
}
Конвертация XML в string и обратно выполнялась вышеописанным способом.
Но в итоге столкнулись с целой вереницей проблем: при больших нагрузках на сервисы выпадало исключение OutOfMemory. Причина была совершенно непонятна, т.к. при мониторинге не было замечено ни утечек памяти, ни заметного причинного роста. По данным из EventLog’а ошибка происходила при обращении к свойству OuterXml объекта типа XmlNode, а в итоге здесь - System.String.GetStringForStringBuilder(String value, Int32 startIndex, Int32 length, Int32 capacity)
Read more: .NET разработка от devlanfear