XslCompiledTransform.Load()提升系统.IO.FileNotFoundException
本文关键字:系统 IO FileNotFoundException Load XslCompiledTransform | 更新日期: 2023-09-27 17:48:49
我的Web应用程序(ASP.NET 2.0)使用Web服务(1.1框架上的asmx)在同一台机器上。在得到XML作为回报后,我将其传递给XslCompiledTransform
用于将XML转换为HTML,并且工作良好。
昨天我经常收到System.IO.FileNotFoundException
,不知道是什么原因导致了这种问题。
首先,我认为这是关于c:''windows''temp的读/写权限,然后我确保授予它网络服务的完全权限(最后也是Everyone),但是这无济于事。
任何想法或解决方案都将不胜感激。
-------------------- stack trace --------------------------
Exception: **System.IO.FileNotFoundException**
**Could not find file 'C:'WINDOWS'TEMP'sivvt5f6.dll'.**
at System.IO.__Error**.WinIOError**(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32
rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames)
at Microsoft.CSharp.CSharpCodeGenerator.FromDomBatch(CompilerParameters options, CodeCompileUnit[] ea)
at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromDomBatch(CompilerParameters options, CodeCompileUnit[] ea)
at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromDom(CompilerParameters options, CodeCompileUnit[] compilationUnits)
at System.Xml.Xsl.Xslt.Scripts.CompileAssembly(List`1 scriptsForLang)
at System.Xml.Xsl.Xslt.Scripts.CompileScripts()
at System.Xml.Xsl.Xslt.QilGenerator.Compile(Compiler compiler)
at System.Xml.Xsl.Xslt.**Compiler.
Compile**(Object stylesheet, XmlResolver xmlResolver, QilExpression& qil)
at System.Xml.Xsl.XslCompiledTransform.LoadInternal(Object stylesheet, XsltSettings settings, XmlResolver stylesheetResolver)
at System.Xml.Xsl.**XslCompiledTransform.Load**(String stylesheetUri, XsltSettings settings, XmlResolver stylesheetResolver)
在检查详细信息并在谷歌上搜索相关主题后,
- 在中发现此问题。Transform(),并且也发生在XmlSerialization中,正如Marc所说。Christoph Schittko有一篇关于故障排除的好文章
-
有人说这个问题可能是因为windows的一些更新补丁可以改变序列化程序的行为。
我打电话给我的管理员,澄清我们的服务器是否有任何更改,他说没有任何更改,并建议我重新启动。
是的。。。我的问题已经通过…重新启动服务器(windows 2003;)解决了
好吧,这是一个有趣的问题。我在序列化程序中看到过类似的问题,但在XslCompiledTransform
中没有看到。
从标题中,我预计这将是加载包含/导入的转换的问题,这可能可以通过提供XmlResolver
来解决。找不到自己生成的dll是非常奇怪的!
作为权宜之计(当您调查该问题时),您可能想看看XslTransform
是否仍然存在这种情况。我意识到这并不理想(考虑到XslCompiledTransform
中的优化等),但它至少可以让你的应用程序在你调查时工作。。。
我要做的第一件调查性的事情就是查看事件日志。有什么有趣的吗?同样值得检查的是,你的防病毒软件是否没有出现误报(不太可能)。
我要做的下一件事是隔离应用程序,即删除1.1的内容,因为你是通过asmx页面(到一个单独的应用程序)调用它的,它不应该是一个因素,所以你应该(理论上)能够从一个平面xml文件中复制它。理想情况下,最好在项目中有一个页面(为了简单起见,可能是一个ashx),只是尝试从本地文件进行转换。
它可以用简单的xslt/xml复制吗?你越简单地生成有问题的代码,就越接近于找到/修复它,或者拥有可以通过"连接"向MS发送的东西。
非常感谢Marc的回复。
我的xsl文件没有可引用的外部资源(无include,import),因此不应调查XmlResolver。
转换在其他服务器(我有2台服务器)和这个服务器中都很好,在我做了iisreset之后,它又开始工作了。但不到一个小时,它又来了。我确实检查了事件查看器,它记录了与我得到的相同的错误!!
----------------从事件查看器-------------事件类型:警告
事件来源:ASP。净2.0.50727.0事件类别:Web事件事件ID:1309日期:2008年7月11日时间:下午2:07:37用户:不适用计算机:XXXX说明:事件代码:3005事件消息:发生了未处理的异常。活动时间:2008年11月7日下午2:07:37事件时间(UTC):2008年7月11日上午7:07:37事件ID:f17058f2126c4a4b1742a3099010b0事件顺序:25407事件发生次数:276事件详细代码:0
流程信息:进程ID:1128进程名称:w3wp.exe帐户名:NT AUTHORITY''NETWORK SERVICE
异常信息:异常类型:FileNotFoundException异常消息:找不到文件"C:''WINDOWS''TEMP''irdt-y8o.dll"。…..
关于故障排除的一些想法:
- dll文件是否已创建?例如,您可以使用Sysinternals中的Filemon来检查XSLT是否真的编译过
- 有足够的可用磁盘空间吗
- 临时文件夹中有多少个文件?%TMP%中的文件太多可能有问题
- 机器上还有什么在运行?像Antivirus这样可以清理Temp文件夹的东西吗
我在Windows Server 2003上遇到了同样的问题。我们的ASP。NET应用程序正在使用web服务(在web上的外部机器上),过了一段时间我们就会收到此错误消息。
在应用程序池上运行回收可以解决问题,但我正在寻找问题原因的答案。
有人吗?