2008-11-07 57 views
6

我的webapp(ASP.NET 2.0)在同一臺機器上使用webservice(1.1框架上的asmx) 。獲得XML後,我將它傳遞到 XslCompiledTransform用於將XML轉換爲HTML,並且工作正常。XslCompiledTransform.Load()引發System.IO.FileNotFoundException

昨天我經常收到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) 

回答

1

好的,這是一個有趣的。我已經看到了序列化程序的類似問題,但是具體而言,並未使用XslCompiledTransform

從標題中,我期待它是一個加載包含/導入轉換的問題,這可能通過提供XmlResolver來解決。沒有發現自己生成的dll很奇怪!

作爲一個障礙(當你調查問題時),你可能想看看它是否仍然發生在XslTransform。我知道這是不理想的(給予XslCompiledTransform優化等),但它可能至少讓你的應用程序工作,而你調查...

我會做的第一個調查的事情是看事件日誌。有什麼有趣的?還值得檢查一下,如果您的防病毒軟件沒有發生誤報(不太可能),就會發生誤判。

我會做的下一件事是隔離應用程序 - 即剪掉1.1的東西 - 因爲你通過asmx頁面調用它(到一個單獨的應用程序)它不應該是一個因素,所以你應該(理論上)只能從一個平坦的xml文件重現它。理想情況下,最好在你的項目中有一個頁面(可能是ashx),只是試圖從本地文件進行轉換。

是否可以用簡單的xslt/xml重現?你可以更簡單地製作出有問題的代碼,或者找到/修復它,或者通過「連接」可以在MS上觸發某些內容。

1

非常感謝Marc的回覆。

我的xsl文件沒有外部資源被引用(不包括,導入),因此不應該調查XmlResolver。

該變換在其他服務器(我有2個服務器),並在此服務器, 罰款後,我做了iisreset,它再次得到作品。但在一小時之前,它又來了。 我沒有檢查事件查看器,它記錄了我得到的同樣的錯誤!

----------------事件查看器------------- 事件類型:警告

事件來源:ASP。 NET 2.0.50727。0 事件類別:Web事件 事件ID:1309 日期:2008年11月7日 時間:下午2點07分37秒 用戶:N/A 計算機:XXXX 描述: 事件代碼:3005 事件消息:發生未處理的異常。 事件時間:2008年11月7日下午2點07分37秒 事件時間(UTC):2008年11月7日上午07點07分37秒 事件ID:f17058f2126c4a4abb1742a3099010b0 事件序列:25407 事件發生:276 事件詳細信息代碼:0

進程信息: 進程ID:1128 進程名:w3wp.exe 帳戶名:NT AUTHORITY \ NETWORK SERVICE

異常信息: 異常類型:FileNotFoundException異常 異常信息:無法找到文件'C:\ WINDOWS \ TEM P \ irdt-y8o.dll」。 .....

+0

好奇。我假設所有3具有相同的配置(特別是在主web.config/machine.config中的臨時目錄設置)? – 2008-11-07 08:00:57

5

檢查細節和谷歌上搜索了相關主題之後,

  1. 這個問題.Transform發現(),也可以作爲馬克表示,與XmlSerialization occures。 Christoph Schittko有一篇關於troubleshooting的好文章。
  2. 有人說這個問題可能是因爲一些更新補丁的windows可以改變串行器的行爲。

    我打電話給管理員澄清我們的服務器是否有任何變化,他說沒有任何變化,他建議我重新啓動。

    和是...我的問題已經由.....重新啓動服務器解決(的Windows 2003;)

+0

+1我們遇到了與XslCompiledTransform完全相同的錯誤(在C:\ Windows \ Temp中找不到DLL文件)。它通過服務器重啓來修復。 – 2013-01-24 22:21:40

1

只是一些想法進行故障排除:

  • 是DLL文件產生的?你可以檢查例如與Sysinternals的Filemon一起查看XSLT是否實際編譯。
  • 是否有足夠的可用磁盤空間?
  • 臨時文件夾中有多少個文件?可能有太多文件存在問題%TMP%
  • 機器上還運行着什麼?任何可能會清理Temp文件夾的Antivirus?
1

我在Windows Server 2003上遇到同樣的問題。我們的ASP.NET應用程序正在使用Web服務(在Web上的外部計算機上),過了一會兒,我們收到此錯誤消息。

在應用程序池中運行回收可修復問題,但我正在尋找問題原因的答案。

有人嗎?

相關問題