2010-03-29 20 views

Trả lời

3

Tôi không đồng ý với Darin. Tôi gọi một hàm trong Session_End để ghi lại kết thúc phiên. Tôi chưa thử nghiệm điều này một cách rõ ràng, nhưng tôi đã xem nhật ký của mình trong vài lần qua rằng nhóm ứng dụng đã được tái chế. Hàm đã được gọi và kết thúc các phiên hoạt động đã được ghi lại.

Điều này xảy ra cả khi hồ bơi ứng dụng được tái chế theo lịch biểu và khi nó được tái chế vì tôi đã triển khai một số dll mới.

+0

Đồng ý, chỉ cần kiểm tra và kích hoạt :-) –

1

Nếu tôi nhớ chính xác (đã lâu kể từ khi tôi đọc tài liệu) có các phiên hoạt động sẽ trì hoãn bộ định thời bình thường của bể bơi ứng dụng (sẽ kích hoạt khi tài nguyên được giải phóng) vì các ngân hàng máy chủ hoạt động có nghĩa là có tiếp tục cần. Sau khi các phiên hết hạn (và kích hoạt sự kiện session_end), bộ đếm thời gian của ứng dụng sẽ bắt đầu lại và đếm ngược, cuối cùng là kích hoạt trước khi nhóm giải phóng tài nguyên của riêng nó và chấm dứt ứng dụng.

Đó là trong trường hợp bình thường, cần lưu ý rằng sự kiện session_end không được bảo đảm để kích hoạt (có sử dụng các kịch bản rất cụ thể), tôi nghĩ rằng điều này chủ yếu liên quan đến các phiên bản IIS bị lỗi hoặc App Pool tái chế cho OOM hoặc lỗi. Nó sử dụng được trừ khi bạn đang sử dụng chỉ là một trong các loại phiên (máy chủ nhà nước tôi tin) nó sẽ không đáng tin cậy cháy. Điều này có thể khác bây giờ.

Nếu bạn cần đảm bảo rằng tài nguyên được giải phóng, tôi không chắc chắn session_end là nơi thích hợp để làm điều đó. Bạn có thể nâng cấp nó lên Bộ nhớ cache ứng dụng hoặc Bộ nhớ cache HTTP và sử dụng các khóa duy nhất của phiên với các sự kiện dọn dẹp định kỳ không? Điều đó có thể đáng tin cậy hơn (nhiều mã hơn) nhưng đáng tin cậy hơn. Đó là kinh nghiệm chung của tôi rằng session_end cháy khá đáng tin cậy, nhưng tôi đã thấy nó thất bại dưới tải trọng đáng kể (100 giây mỗi giây) và tôi biết khi nào bạn bắt đầu nói về các trang trại máy chủ, nó cũng phức tạp hơn nhiều.

+0

Tôi chỉ nói khoảng 20-30 người dùng tối đa, nhưng chi phí để mở kết nối rất cao và tôi không tin tưởng máy chủ từ xa đóng. –

1

Lưu ý rằng Session_End chỉ được gọi nếu bạn sử dụng chế độ phiên Inproc. Đối với các chế độ khác (bao gồm chế độ trạng thái phiên SQL), sự kiện này không bao giờ được nâng lên.

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