Câu hỏi của tôi là tương tự nhưng không giống với:HttpModule.Init - an toàn thêm HttpApplication.BeginRequest xử lý trong chế độ tích hợp IIS7
Why can't my host (softsyshosting.com) support BeginRequest and EndRequest event handlers? (Tôi cũng đọc blog mvolo nhắc đến trong đó)
Mục đích là để treo thành công HttpApplication.BeginRequest trong trường hợp IHttpModule.Init (hoặc bất cứ nơi nào bên trong để các mô-đun), sử dụng một HttpModule bình thường tích hợp thông qua cấu hình system.webServer, tức là một trong những không:
- xâm Global.asax hoặc
ghi đè lên HttpApplication (mô-đun được dự định là khép kín & có thể sử dụng lại, do đó, ví dụ: Tôi có một cấu hình như thế này):
<system.webServer> <validation validateIntegratedModeConfiguration="false"/> <modules> <remove name="TheHttpModule" /> <add name="TheHttpModule" type="Company.HttpModules.TheHttpModule" preCondition="managedHandler" />
Cho đến nay, chiến lược nào tôi đã cố gắng để đính kèm một người biết lắng nghe để HttpApplication.BeginRequest kết quả trong một trong hai điều, triệu chứng 1 là BeginRequest không bao giờ cháy, hoặc triệu chứng 2 là các ngoại lệ sau đây được ném trên tất cả các yêu cầu quản lý, và tôi không thể bắt & xử lý nó từ mã người dùng:
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.PipelineModuleStepContainer.GetEventCount(RequestNotification notification, Boolean isPostEvent) +30
System.Web.PipelineStepManager.ResumeSteps(Exception error) +1112
System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb) +113
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +616
Bình luận ra app.BeginRequest += new EventHandler(this.OnBeginRequest)
trong Init dừng trừ tất nhiên. Init không tham chiếu đến các đối tượng Context hoặc Request.
Tôi đã thử:
- Removed tất cả các tài liệu tham khảo để HttpContext.Current bất cứ nơi nào trong dự án (vẫn còn triệu chứng 1)
- Tested loại bỏ tất cả các mã ra khỏi cơ thể của phương pháp OnBeginRequest của tôi, để đảm bảo vấn đề không phải là nội bộ cho phương pháp (= ngoại lệ)
- Đánh dấu theo dõi ngăn xếp và chỉ gọi ứng dụng.BeginRequest + = ... khi ngăn xếp không được khởi chạy bởi InitializeApplication (= BeginRequest không kích hoạt)
- Chỉ gọi ứng dụng.BeginRequest + = trên đường chuyền thứ hai thông qua Init (= BeginRequest không kích hoạt)
Có ai biết cách tiếp cận tốt không? Có một số chiến lược gián tiếp cho hooking Application_Start trong mô-đun (có vẻ như không)? Một sự kiện khác mà a) có thể móc từ phương thức khởi tạo của mô-đun hoặc phương thức Init và b) sau đó là một nơi an toàn để đính kèm trình xử lý sự kiện BeginRequest?
Cảm ơn nhiều
trong 'trống IHttpModule.Init (HttpApplication ứng dụng)', tôi gọi 'app.BeginRequest + = new EventHandler (this.OnApplication_BeginRequest) '. Sau đó, tôi sử dụng một bool tĩnh cấp lớp, _initted, để ngăn chặn việc thêm trình xử lý nhiều lần. Đó là một phần lý do tại sao tình hình là gõ tôi cho một vòng lặp như vậy. –
Cùng một vấn đề ở đây. Tôi cũng đăng lên một chủ đề trên trang IIS, hy vọng một người nào đó từ Microsoft có thể có câu trả lời: http://forums.iis.net/p/1164977/1972908.aspx –
Bất kỳ giải pháp nào? Tôi có thể thêm một httpModule vào bất kỳ ứng dụng ASP.NET nào. Tuy nhiên tôi nhận được lỗi chính xác tương tự khi cố gắng thêm một IHttpModule vào một trang SharePoint 2013 (dựa trên .NET 4.0). Vấn đề xảy ra ngay sau khi tôi đính kèm vào sự kiện BeginRequest. – lapsus