2008-11-07 9 views
6

Webapp của tôi (ASP.NET 2.0) tiêu thụ một webservice (asmx trên 1.1 framework) trên cùng một máy. Sau khi nhận được XML, tôi chuyển nó tới XslCompiledTransform để chuyển đổi XML thành HTML và nó hoạt động tốt.XslCompiledTransform.Load() tăng System.IO.FileNotFoundException

Hôm qua tôi có một số System.IO.FileNotFoundException thường xuyên và không biết nguyên nhân gây ra loại sự cố này.

Cái nhìn đầu tiên tôi nghĩ đó là về quyền đọc/ghi trên c: \ windows \ temp và sau đó tôi đảm bảo cho phép nó đầy đủ cho Dịch vụ mạng (cũng Mọi người ở cuối -_-!) Nhưng nó không giúp .

Mọi ý tưởng hoặc giải pháp sẽ được đánh giá cao.

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

Trả lời

1

OK, đó là một điều thú vị. Tôi đã nhìn thấy các vấn đề tương tự với serializers, nhưng không phải với XslCompiledTransform cụ thể.

Từ tiêu đề, tôi cho rằng đó là sự cố khi tải các biến đổi được bao gồm/được nhập, có thể đã được khắc phục bằng cách cung cấp XmlResolver. Không tìm thấy các dlls tự tạo ra là rất kỳ quặc!

Là điểm dừng (trong khi bạn điều tra vấn đề), bạn có thể muốn xem sự cố vẫn xảy ra với XslTransform. Tôi nhận thấy đây không phải là lý tưởng (được tối ưu hóa trong XslCompiledTransform), nhưng ít nhất có thể cho phép ứng dụng của bạn hoạt động trong khi bạn điều tra ...

Điều đầu tiên tôi cần làm là xem nhật ký sự kiện. Bất cứ điều gì thú vị? Cũng đáng để kiểm tra xem phần mềm chống vi-rút của bạn đã không phát điên với những mặt tích cực sai (không). Điều tiếp theo tôi sẽ làm là cô lập các ứng dụng - tức là snip off các công cụ 1.1 - kể từ khi bạn đang gọi nó thông qua một trang asmx (đến một ứng dụng riêng biệt) nó không phải là một yếu tố, vì vậy bạn nên (về mặt lý thuyết) có thể tái tạo nó chỉ từ một tệp xml phẳng. Lý tưởng nhất, nó sẽ là tốt để có một trang (có thể là một ashx cho sự đơn giản) trong bạn dự án rằng chỉ cố gắng để làm một biến đổi từ một tập tin địa phương.

Sản phẩm có thể tái tạo với xslt/xml đơn giản không? Việc đơn giản hơn bạn có thể làm cho mã có vấn đề, bạn càng phải tìm kiếm/sửa chữa nó hoặc có thứ gì đó mà bạn có thể kích hoạt tại MS thông qua "connect".

1

Cảm ơn rất nhiều Marc đã trả lời của bạn.

Tệp xsl của tôi không có tài nguyên bên ngoài nào được tham chiếu đến (không bao gồm, nhập) nên XmlResolver không nên được điều tra.

Biến đổi hoạt động tốt trong máy chủ khác (tôi nhận được 2 máy chủ) và cũng trong máy chủ này, sau khi tôi đã thực hiện iisreset, nó đang hoạt động trở lại. Nhưng trước một giờ, nó lại xuất hiện. Tôi đã kiểm tra Trình xem sự kiện và nó đã ghi lại lỗi tương tự như tôi nhận được !!

---------------- từ Event Viewer ------------- Loại sự kiện: Cảnh báo

Sự kiện nguồn: ASP. NET 2.0.50727.0 tổ chức sự kiện Thể loại: Web Event ID sự kiện: 1309 ngày: 11/7/2008 Time: 14:07:37 User: N/A Máy tính : XXXX Mô tả: Mã tổ chức sự kiện: 3005 nhắn tổ chức sự kiện : Một ngoại lệ không thể giải quyết đã xãy ra. thời gian sự kiện: 11/7/2008 2:07:37 thời gian tổ chức sự kiện (UTC): 11/7/2008 7:07:37 ID sự kiện: f17058f2126c4a4abb1742a3099010b0 tổ chức sự kiện trình tự: 25.407 tổ chức sự kiện xảy ra: 276 tổ chức sự kiện đang chi tiết: 0

Xử lý thông tin: Process ID: 1128 tên Process: w3wp.exe tên tài khoản: NT AUTHORITY \ NETWORK DỊCH VỤ

thông tin Ngoại lệ: Exception loại: FileNotFoundException nhắn Ngoại lệ: không thể tìm tệp 'C: \ WINDOWS \ TEM P \ irdt-y8o.dll '. .....

+0

Tò mò. Tôi giả sử tất cả 3 có cấu hình tương tự (đặc biệt là thiết lập dir tạm thời trong web.config chính/machine.config)? –

5

Sau khi kiểm tra để biết chi tiết và googling cho các chủ đề liên quan,

  1. Vấn đề này được tìm thấy với .Transform() và cũng occures với XmlSerialization như Marc nói. Christoph Schittko có một bài viết hay cho troubleshooting.
  2. Có người cho biết sự cố có thể do một số bản vá cập nhật của cửa sổ có thể thay đổi hành vi của bộ nối tiếp.

    Tôi đã gọi cho quản trị viên của mình để làm rõ nếu có bất kỳ thay đổi nào trên máy chủ của chúng tôi và anh ấy không nói gì thay đổi và anh ấy đề nghị tôi khởi động lại.

    và Yes ... vấn đề của tôi đã được giải quyết bởi máy chủ ..... khởi động lại (cửa sổ 2003;)

+0

+1 Chúng tôi đã trải qua cùng một lỗi chính xác (Tệp không được tìm thấy cho một DLL trong C: \ Windows \ Temp) cho một XslCompiledTransform. Nó đã được cố định bởi một máy chủ khởi động lại. –

1

chỉ là một số ý tưởng để gỡ rối:

  • là các tập tin dll tạo? Bạn có thể kiểm tra ví dụ: với Filemon từ Sysinternals để xem XSLT có thực sự được biên dịch hay không.
  • Có đủ dung lượng đĩa trống không?
  • Có bao nhiêu tệp trong thư mục tạm thời của bạn? Có thể có vấn đề với quá nhiều tệp trong% TMP%
  • Còn gì khác đang chạy trên máy? Bất cứ thứ gì như Antivirus có thể dọn dẹp thư mục Temp?
1

Tôi đang gặp sự cố tương tự trên Windows Server 2003. Ứng dụng ASP.NET của chúng tôi đang sử dụng dịch vụ web (trên máy bên ngoài trên web) và sau một thời gian chúng tôi nhận được thông báo lỗi này.

Chạy tái chế trên hồ bơi ứng dụng khắc phục sự cố, nhưng tôi đang tìm kiếm câu trả lời cho nguyên nhân của sự cố.

Bất kỳ ai?