2009-06-06 49 views
21

Ai đó có thể giải thích tại sao hàm tạo của lớp tùy chỉnh bắt nguồn từ HttpApplication được gọi nhiều lần khi khởi động ứng dụng?Tại sao hàm tạo HttpApplication được gọi nhiều lần

cấu trúc mã của tôi là như sau:
- toàn cầu Lớp học của tôi trong global.asax xuất phát từ CustomApp lớp.
- Các CustomApp lớp xuất phát từ HttpApplication lớp

Các toàn cầu lớp được tạo ra lúc khởi động, nhưng khi tôi đặt một breakpoint trong các nhà xây dựng, nó được gọi nhiều lần! Tôi nghĩ rằng chỉ nên có một ví dụ của Ứng dụng lớp học được tạo ra?

Tôi có sai không?

UPD: máy chủ web thực sự có thể tạo một số trường hợp HttpApplication để xử lý nhiều yêu cầu đến cùng một lúc. Điều này trở nên đặc biệt rõ ràng khi bạn đặt một điểm ngắt trong hàm khởi tạo của HttpApplication hậu duệ của bạn. Một số yêu cầu sẽ được chờ từ khách hàng (nội dung http, tệp CSS, v.v.) và để phục vụ mỗi máy chủ web sẽ tạo ra các phiên bản mới của HttpApp. Vì vậy, hãy cẩn thận về điều này, khi viết logic khởi tạo ứng dụng.

+0

có thể đăng đoạn mã cắt xuống thể hiện hành vi này không? –

Trả lời

15

Tôi tin rằng thời gian chạy ASP.NET có thể tạo nhiều hơn một HttpApplication cho mỗi miền ứng dụng. Vì vậy, HttpApplication.Init và Ctor có thể được gọi nhiều hơn một lần.

Nếu bạn muốn có mã khởi tạo chỉ chạy một lần, bạn nên sử dụng sự kiện Application_Start sẽ chỉ được gọi một lần cho mỗi ứng dụng.

+0

Có một sự kiện (hoặc tương tự) mà tôi có thể móc vào để Applcation_Start kể từ khi tôi cần phải có lớp HttpApplication của tôi bên ngoài của trang web? –

+1

Chỉ cần thực hiện một phương thức 'Applcation_Start' trong Global.asax.cs và nó sẽ tự động được kết nối và được gọi lúc bắt đầu. http://msdn.microsoft.com/en-us/library/ms178473.aspx – mckamey

+0

Hãy nhớ rằng, các sự kiện như 'AuthenticateRequest' hoặc' AcquireRequestState' không kích hoạt nếu bạn đăng ký trình xử lý sự kiện trong 'Application_Start () '. Bạn có thể muốn đăng ký chúng trong 'Init()' là một ghi đè lên 'HttpApplication'. – Manfred

6

Vui lòng xem bài đăng global.asax in ASP.NET - giải thích tại sao có nhiều phiên bản của HttpApplication. Về cơ bản có hai hồ bơi: đặc biệt và bình thường. Hồ bơi bình thường chứa các cá thể của HttpApplication được sử dụng bởi các yêu cầu (mỗi yêu cầu có cá thể HttpApplication riêng của nó). Nhóm đặc biệt chứa các đối tượng HttpApplication được sử dụng cho các sự kiện mức ứng dụng (như Application_Start, Application_Error).

+0

rất thú vị, cảm ơn! – Andy

Các vấn đề liên quan