我的webapp(ASP.NET 2.0)使用web服务(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)
答案 0 :(得分:4)
查看详细信息并搜索相关主题后,
有人说问题可能是因为某些更新的Windows补丁可以改变序列化程序的行为。
我打电话给我的管理员澄清我们的服务器是否有任何变化,他说没有任何变化,他建议我重新启动。
和是......我的问题已经通过.....重启服务器(Windows 2003;)
答案 1 :(得分:1)
XslCompiledTransform
。
从标题中,我期待加载包含/导入的转换是一个问题,这可能是通过提供XmlResolver
来修复的。没有找到自生成的dll是非常奇怪的!
作为一个权宜之计(当您调查此问题时),您可能希望查看它是否仍然与XslTransform
一起发生。我意识到这不是理想的(考虑到XslCompiledTransform
中的优化等),但它可能至少让你的应用在调查时工作......
我要做的第一件调查是查看事件日志。有什么有趣的吗?另外值得一试的是你的反病毒软件是不是因为误报而疯狂(不太可能)。
我要做的下一件事是隔离应用程序 - 即剪掉1.1内容 - 因为你是通过asmx页面调用它(到一个单独的应用程序)它不应该是一个因素,所以你应该(理论上)只能从平面的xml文件中重现它。理想情况下,在项目中有一个页面(可能是简单的ashx),只是尝试从本地文件进行转换。这将是一件好事。
使用简单的xslt / xml是否可以重现?你可以更简单地制作有问题的代码,你越接近找到/修复它,或者你可以通过“连接”触发MS。
答案 2 :(得分:1)
非常感谢Marc的回复。
我的xsl文件没有要引用的外部资源(不包含,导入),因此不应调查XmlResolver。
转换在其他服务器(我有2个服务器)以及此服务器中运行良好 在我做了iisreset之后,它又重新开始了。但在一个小时之前,它又来了。 我确实检查了事件查看器,它记录了我得到的相同错误!!
来自事件查看器的---------------- ------------- 事件类型:警告
事件来源:ASP.NET 2.0.50727.0 活动类别:网络活动 事件ID:1309 日期:2008年11月7日 时间:下午2:07:37 用户:N / A. 电脑:XXXX 描述: 活动代码:3005 事件消息:发生了未处理的异常。 活动时间:11/7/2008 2:07:37 PM 活动时间(UTC):11/7/2008 7:07:37 AM 事件ID:f17058f2126c4a4abb1742a3099010b0 事件顺序:25407 事件发生:276 活动详细代码:0
流程信息: 进程ID:1128 进程名称:w3wp.exe 帐户名称:NT AUTHORITY \ NETWORK SERVICE
异常信息: 异常类型:FileNotFoundException 异常消息:找不到文件'C:\ WINDOWS \ TEMP \ irdt-y8o.dll'。 .....
答案 3 :(得分:1)
只是一些故障排除的想法:
答案 4 :(得分:1)
我在Windows Server 2003上遇到同样的问题。我们的ASP.NET应用程序正在使用Web服务(在Web上的外部计算机上),过了一段时间我们收到此错误消息。
在应用程序池上运行回收可以解决问题,但我正在寻找问题原因的答案。
任何?