2013-09-06 76 views
5

EDIT: Điều này trước đây có tên "Hành vi ứng dụng Init khác nhau giữa Khởi động lại IIS và Khởi tạo ứng dụng". Tôi đã thay đổi tiêu đề để mở rộng câu hỏi ra khỏi IIS/Application Initialisation vì hành vi được quan sát liên quan đến AppDomain.CurrentDomain.GetAssemblies();Tại sao AppDomain.CurrentDomain.GetAssemblies() không trả về các assembly phụ thuộc trong Global.asax trong các điều kiện nhất định?

Tôi đang sử dụng mô-đun Initialisation ứng dụng IIS để khởi động dịch vụ asmx wed.

Tôi đã triển khai một số mã khởi động để đảm bảo khởi tạo ứng dụng ứng dụng thành công dịch vụ asmx của JIT trong sự kiện Global.asax Application_Start. Điều này sử dụng System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod() để lặp qua tất cả các assembly trong ứng dụng (nó cũng chọn tất cả các phụ thuộc lắp ráp) để đảm bảo rằng cuộc gọi đầu tiên tới dịch vụ càng nhanh càng tốt.

Khi tôi phung phí hành vi này bằng cách sử dụng "net stop w3svc & net w3svc bắt đầu" Tôi có thể thấy (qua ghi nhật ký) rằng TẤT CẢ các hội đồng được JIT'ted và cuộc gọi đầu tiên tới dịch vụ nhanh như mong đợi.

Tuy nhiên, khi hồ bơi ứng dụng được tự động tái chế theo lịch trình được định cấu hình (03:00:00) nhật ký chỉ hiển thị các hội đồng được tham chiếu trực tiếp là JIT'ted, không phải phụ thuộc cũng nằm trong thư mục.

Điều này dẫn đến khoản phí không được chấp nhận trong lần gọi đầu tiên đến dịch vụ.

App Init thực hiện chính xác như mong đợi ở tất cả các khía cạnh khác nhưng tại sao chu kỳ IIS của hồ bơi ứng dụng chỉ JIT biên dịch các hội đồng tham chiếu trực tiếp chứ không phải phụ thuộc của nó?

+0

bài này dường như ám vào cùng một vấn đề: http://stackoverflow.com/questions/3552223/asp-net-appdomain-currentdomain-getassemblies-assemblies-missing-after-app – Redeemed1

Trả lời