7

我的 webapp (ASP.NET 2.0) 在同一台机器上使用 webservice (asmx on 1.1 framework)。在获得 XML 作为回报后,我将它传递 XslCompiledTransform给将 XML 转换为 HTML,它工作正常。

昨天我System.IO.FileNotFoundException经常遇到这种问题,不知道是什么原因造成的。

首先看看我认为这是关于 c:\windows\temp 的读/写权限,然后我确保给它完全的网络服务权限(最后也是每个人-_-!)但它没有帮助。

任何想法或解决方案将不胜感激。

-------------------- 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)
4

5 回答 5

4

在检查详细信息并搜索相关主题后,

  1. .Transform() 发现了这个问题,并且正如 Marc 所说,XmlSerialization 也出现了这个问题。Christoph Schittko 有一篇很好的故障排除文章。
  2. 有人说这个问题可能是因为windows的一些更新补丁可以改变序列化器的行为。

    我打电话给我的管理员以澄清我们的服务器是否有任何变化,他说没有任何变化,他建议我重新启动。

    是的......我的问题已经通过......重新启动服务器(windows 2003 ;)解决了

于 2008-11-08T01:17:03.033 回答
1

好的,这是一个有趣的。我在序列化程序中看到了类似的问题,但没有XslCompiledTransform特别提到。

从标题来看,我预计这是加载包含/导入的转换的问题,这可能可以通过提供XmlResolver. 找不到自己生成的 dll 很奇怪!

作为权宜之计(当您调查问题时),您可能想看看它是否仍然发生在XslTransform. 我意识到这并不理想(考虑到 中的优化等XslCompiledTransform),但它至少可以让您的应用程序在您调查时工作......

我要做的第一件事是查看事件日志。有什么有趣的吗?还值得检查您的防病毒软件是否没有因误报而发疯(不太可能)。

我要做的下一件事是隔离应用程序 - 即剪掉 1.1 的东西 - 因为你是通过 asmx 页面(到单独的应用程序)调用它,所以它不应该是一个因素,所以你应该(理论上)能够仅从平面 xml 文件中复制它。理想情况下,最好在您的项目中有一个页面(为了简单起见可能是一个 ashx),它只是尝试从本地文件进行转换。

它可以用简单的 xslt/xml 重现吗?您可以使有问题的代码越简单,您就越接近找到/修复它,或者拥有可以通过“连接”在 MS 上触发的东西。

于 2008-11-07T05:27:12.743 回答
1

我在 Windows Server 2003 上遇到了同样的问题。我们的 ASP.NET 应用程序正在使用 Web 服务(在 Web 上的外部机器上),一段时间后我们收到此错误消息。

在应用程序池上运行回收可以解决问题,但我正在寻找问题原因的答案。

任何人?

于 2009-03-24T23:37:16.370 回答
1

非常感谢马克的回复。

我的 xsl 文件没有要引用的外部资源(无包含、导入),因此不应调查 XmlResolver。

转换在其他服务器(我有 2 个服务器)和这台服务器中运行良好,在我执行 iisreset 之后,它又开始运行了。但不到一个小时,它又来了。我确实检查了事件查看器,它记录了与我得到的相同的错误!!

---------------- 来自事件查看器 ------------- 事件类型:警告

事件源:ASP.NET 2.0.50727.0 事件类别:Web 事件事件 ID:1309 日期:11/7/2008 时间:下午 2:07:37 用户:N/A 计算机:XXXX 描述:事件代码:3005 事件消息:发生了未处理的异常。事件时间:2008 年 11 月 7 日下午 2:07:37 事件时间 (UTC):2008 年 11 月 7 日上午 7:07:37 事件 ID:f17058f2126c4a4abb1742a3099010b0 事件序列:25407 事件发生:276 事件详细代码:0

进程信息:进程ID:1128 进程名:w3wp.exe 账户名:NT AUTHORITY\NETWORK SERVICE

异常信息:异常类型:FileNotFoundException 异常消息:找不到文件“C:\WINDOWS\TEMP\irdt-y8o.dll”。......

于 2008-11-07T07:08:27.907 回答
1

只是一些故障排除的想法:

  • dll文件是否创建?例如,您可以使用 Sysinternals 的 Filemon 来检查 XSLT 是否已实际编译。
  • 是否有足够的可用磁盘空间?
  • 您的临时文件夹中有多少个文件?%TMP% 中的文件过多可能存在问题
  • 机器上还在运行什么?像杀毒软件这样可以清理临时文件夹的东西吗?
于 2008-11-24T18:41:56.637 回答