Tôi có một trang web ASP.Net khá đơn giản, nội dung có vấn đề khi tải tệp Microsoft.Practices.EnterpriseLibrary.Data khoảng một lần một tuần. Dưới đây là thông điệp ngoại lệ:Tại sao tôi nhận được System.IO.FileLoadException: Không thể tải tập tin hoặc lắp ráp, khoảng một lần một tuần trên trang web ASP.Net của tôi?
System.IO.FileLoadException: Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Access is denied.
File name: 'Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null'
at foobar.Intranet.Logic.Data.UserDB.SelectByUserName(String userName)
at foobar.Intranet.Logic.Info.User.ValidateUser(String userName) in F:\Development\foobar\foobar\foobar.Intranet.Logic\Info\User.cs:line 130
at Login.ValidateUser(String username, String password) in e:\foobar\foobar.Intranet\Login.aspx.cs:line 32
=== Pre-bind state information ===
LOG: User = Unknown
LOG: DisplayName = Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///E:/foobar/foobar.Intranet/
LOG: Initial PrivatePath = E:\foobar\foobar.Intranet\bin Calling assembly : foobar.Intranet.Logic, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: E:\foobar\foobar.Intranet\web.config
LOG: Using host configuration file: \\?\C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet.config
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/foobar.intranet/668896d8/82d7e51c/Microsoft.Practices.EnterpriseLibrary.Data.DLL.
LOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files/foobar.intranet/668896d8/82d7e51c/Microsoft.Practices.EnterpriseLibrary.Data/Microsoft.Practices.EnterpriseLibrary.Data.DLL.
LOG: Attempting download of new URL file:///E:/foobar/foobar.Intranet/bin/Microsoft.Practices.EnterpriseLibrary.Data.DLL.
ERR: Failed to complete setup of assembly (hr = 0x80070005). Probing terminated.
Những điều cần chú ý:
- Một IIS Đặt lại đơn giản sửa chữa vấn đề này.
- Chúng tôi đã có cùng một mã chạy trên một máy chủ web duy nhất mà không có vấn đề gì. Sau đó chúng tôi chuyển trang web sang hai máy chủ web mới, cân bằng tải (sử dụng các phiên dính) (tất cả ba Windows Server 2003 R2 Standard Edition SP1). Giờ đây, mỗi máy chủ web cân bằng tải sẽ loại trừ ngoại lệ này mỗi tuần một lần.
- Sự khác biệt lớn duy nhất tôi có thể nghĩ đến, là tôi đã cài đặt 4.0 .NET framework trên các máy chủ cân bằng tải. Trang web vẫn chạy dưới ASP.NET 2.0 nên tôi không thấy đây là vấn đề như thế nào
- Tôi đã định cấu hình dịch vụ lập chỉ mục để không tìm kiếm trong thư mục "Tệp ASP.NET tạm thời", nhưng nó đã không không giúp được gì.
- Chúng tôi sử dụng tệp Microsoft.Practices.EnterpriseLibrary.Data ở mọi nơi trên trang web của chúng tôi. Hầu như tất cả các trang sử dụng dll logic của chúng tôi mà lần lượt sử dụng các dlls EnterpriseLibrary.
- Trong khi các lỗi xảy ra một lần, tôi thậm chí còn nhìn thấy những quy trình đã khóa dll trong thư mục "Temporary ASP.NET Files", và nó không khác gì so với các khóa trên máy chủ hoạt động tốt.
- Khi lỗi khởi động, nó lỗi mỗi lần duy nhất cho đến khi một iisreset được thực hiện
Bất kỳ cái nhìn sâu sắc bất cứ ai có thể cung cấp sẽ được nhiều đánh giá cao. Hãy cho tôi biết nếu tôi bỏ lỡ một cái gì đó.
Cảm ơn!
Tôi giả định rằng một khi bạn gặp phải vấn đề này thì mọi cuộc gọi đến hội đồng không thành công với thông báo lỗi trên (cho đến khi một iisreset được thực hiện). –
Tuzo - Giả định của bạn là chính xác. Một khi vấn đề bắt đầu, tất cả các cuộc gọi để tải lắp ráp thất bại (cho đến khi một iisreset được thực hiện). – Daryl
Một điều thú vị mà tôi vừa phát hiện ra, đó là IIS Directory Security, Anonymous Access user không phải là IUSR_MachineName, mà là IUSR_OldMachineName. Tôi đã cập nhật tên người dùng dưới người dùng và nhóm người quản lý, nhưng tôi phải cập nhật tài khoản người dùng IIS Anonymous theo cách thủ công. Có ai biết nếu điều đó sẽ ảnh hưởng đến nó? – Daryl