以下是我的尝试:
我的设置如下:
Windows 2008专用服务器上的IIS7。 该网站使用Delphi在ASP.NET中编写。 我有几个需要序列化的XML文件,而不仅仅是一个。 我的网站与Web服务进行对话并处理XML(我猜这是打破一切的部分)
除了列出的内容之外,是否有人有任何建议?我已经阅读了有关使用SGEN预编译序列化对象的信息,但这是否适用于多个XML文件?我真的不太了解它。
以下是一个例子:
这是我的一个XML文件的代码。 StockXMLSer在全球范围内举行,测试后每个站点只创建一次。
function IntGetSTOCK_ITEMS(S: TStream): STOCK_ITEMS;
begin
if not Assigned(StockXMLSer) then begin
StockXMLSer := XmlSerializer.Create(STOCK_ITEMS.ClassInfo);
OutputDebugString('StockXMLSer Serializer Created');
end;
Result := STOCK_ITEMS(StockXMLSer.Deserialize(S));
end;
答案 0 :(得分:4)
您需要在代码中添加一些设置才能调试序列化代码。请参考msdn上的以下文章。
Troubleshooting Common Problems with the XmlSerializer
还有一个巧妙的技巧,可以保存你的临时文件夹中创建的文件,以便你可以看到发生了什么。
正常情况下, XmlSerializer删除C#源 序列化类的文件 什么时候不再需要它们。那里 是一个无证的诊断开关, 然而,这将指示 XmlSerializer删除以留下这些 磁盘上的文件。你可以设置 切换应用程序的.config 文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<switches>
<add name="XmlSerialization.Compilation" value="4" />
</switches>
</system.diagnostics>
</configuration>
此开关存在于 .config文件,C#源文件保留 在你的临时目录中。如果你是 在运行Windows的计算机上工作 2000或更高版本,默认位置 对于temp目录是\ Documents and Settings \\ LocalSettings \ Temp或 \ Temp,适用于网络 在ASPNET下运行的应用程序 帐户。 C#文件很容易被遗漏 因为他们看起来很奇怪 随机生成的文件名, 类似于:bdz6lq-t.0.cs。该 XmlSerializerPreCompiler设置了这个 诊断开关,所以你可以打开 检查行的文件 其中XmlSerializerPreCompiler 在记事本中报告了编译错误 或Visual Studio。
答案 1 :(得分:2)
XML Serialization创建一个临时DLL,其中包含序列化代码,位于temp目录中的某个位置。创建序列化程序时,会将其加载到App Domain中。清除Temp目录时可能会删除此DLL,并且由于某种原因,它无法正确重新生成。
答案 2 :(得分:2)
仅为了记录,我遇到了与此类似的错误,并从this blog找到了解决方案
在TEMP文件夹上设置权限后,错误开始再次起作用的功能。