我们有一个系统可以读取包含设置的Xml文件,并将其反序列化为对象。它在我们的Windows 2003服务器上运行得非常好,并且已经做了很多年。我们在相当长的一段时间内没有对代码进行任何更改。
本周我需要为其中一个页面添加一个次要功能,为此,我将代码从Visual Studio 2008转发到2013.当我在运行IIS 7.5的Windows 7工作站上测试应用程序时,一切都工作为预期。但是,当我将它提升到我们的QA服务器时,执行Xml格式化设置文件反序列化的DLL失败,并出现此异常:
XML文档中存在错误(21,8)...
我以前见过这种事情,它总是意味着在第y行的第x列有一些东西(反之亦然)。但是,Xml文件中没有任何更改,实际上它是完美格式化的。并且Deserializer的代码也没有改变。它是这样的:
XmlSerializer serializer = new XmlSerializer(typeof(OFM.UserManager.SystemSettings.UMSystems));
serializer.UnknownNode+= new XmlNodeEventHandler(serializer_UnknownNode);
serializer.UnknownAttribute+= new XmlAttributeEventHandler(serializer_UnknownAttribute);
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
SystemSettings = (OFM.UserManager.SystemSettings.UMSystems) serializer.Deserialize(fs);
现在,我之前使用过XmlSeserializer.Deserialize方法,并且它在封面下方很聪明,我发现它和地狱一样敏捷。事实上我不再使用它,而是在我需要的时候更愿意使用自己的反序列化程序。但我不应该改变那些一直在运行的代码!
但是我无法弄清楚到底发生了什么(他们需要快速更改),所以我编写了一个新的反序列化器例程并将其投入使用而不是旧的。它运作得很好。
然而,我仍然想知道发生了什么。
事实上,我将从Win7工作站上使用IIS7.5上的VS2013到WinServer2003和IIS 6.0。此外,似乎我可能将应用程序从Fx 2.0升级到3.5。