Trư?ng h?p ngo?i l? không đư?c gây ra ?ng d?ng ASP.NET đ? b?t ng? thoát ? Khuôn kh? .NET

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 911816 - Xem s?n ph?m mà bài này áp d?ng vào.
Lưu ?Bài vi?t này áp d?ng cho Microsoft Khuôn kh? .NET 2.0 và sau đó t?t c? các phiên b?n.
Bung t?t c? | Thu g?n t?t c?

? Trang này

Tri?u ch?ng

Khi m?t ngo?i l? không đư?c ném vào m?t Microsoft ASP.NET d?a trên các ?ng d?ng đư?c xây d?ng trên Microsoft Khuôn kh? .NET 2.0 ho?c phiên b?n m?i hơn, các ?ng d?ng b?t ng? b? cu?c. Khi v?n đ? này x?y ra, không có thông tin ngo?i l? mà b?n ph?i có s? hi?u bi?t v?n đ? ghi vào Nh?t k? ?ng d?ng.

Tuy nhiên, m?t thông báo s? ki?n tương t? như sau đây có th? đư?c ghi vào Nh?t k? h? th?ng:

Lo?i s? ki?n: c?nh báo
S? ki?n ngu?n: W3SVC
Th? lo?i s? ki?n: không có
ID s? ki?n: 1009
Ngày: 9/28/2005
Th?i gian: 3:18:11
PM ngư?i dùng: N/A
Máy tính: Máy ch? IIS
Tr? chơi mô t?:
M?t ti?n tr?nh ph?c v? ngoài tr?i ?ng d?ng 'DefaultAppPool' k?t thúc b?t ng?. Id quá tr?nh là '2548'. M? thoát kh?i quá tr?nh là '0xe0434f4d'.

Ngoài ra, m?t thông báo s? ki?n tương t? như sau đây có th? đư?c ghi vào Nh?t k? ?ng d?ng:

Lo?i s? ki?n: l?i
S? ki?n ngu?n: .NET báo cáo l?i th?i gian ch?y 2.0
Th? lo?i s? ki?n: không có
ID s? ki?n: 5000
Ngày: 9/28/2005
Th?i gian: 3:18:02 PM
Ngư?i dùng: N/A
Máy tính: Máy ch? IIS
Tr? chơi mô t?:
EventType clr20r3, P1 w3wp.exe, P2 6.0.3790.1830, P3 42435be1, P4 app_web_7437ep-9, P5 0.0.0.0, P6 433b1670, P7 9, P8 a, system.exception P9, P10 NIL.

Nguyên nhân

V?n đ? này x?y ra b?i v? chính sách m?c đ?nh cho trư?ng h?p ngo?i l? không đư?c đ? thay đ?i trong Khuôn kh? .NET 2.0 và phiên b?n m?i hơn. theo m?c đ?nh, chính sách đ?i v?i trư?ng h?p ngo?i l? không đư?c là đ? k?t thúc quá tr?nh công nhân.

Trong Microsoft Khuôn kh? .NET 1.1 và trong Microsoft Khuôn kh? .NET 1.0, các ngo?i l? không đư?c vào qu?n l? ch? đ? đ? đư?c b? qua. Tr? khi b?n đính kèm tr?nh g? l?i đ? b?t ngo?i l?, b?n s? không nh?n ra r?ng b?t c? đi?u g? là sai.

ASP.NET s? d?ng chính sách m?c đ?nh cho các ngo?i l? không đư?c ? Khuôn kh? .NET 2.0 và phiên b?n m?i hơn. Khi m?t ngo?i l? không đư?c đư?c ném, ?ng d?ng ASP.NET b?t ng? b? cu?c.

Hành vi này không áp d?ng cho trư?ng h?p ngo?i l? x?y ra trong b?i c?nh c?a m?t yêu c?u. Các lo?i trư?ng h?p ngo?i l? v?n đư?c x? l? và b?c b?i m?t đ?i tư?ng HttpException . Trư?ng h?p ngo?i l? x?y ra trong b?i c?nh c?a m?t yêu c?u không gây ra quá tr?nh nhân viên đ? k?t thúc. Tuy nhiên, không đư?c các trư?ng h?p ngo?i l? bên ngoài b?i c?nh c?a m?t yêu c?u, ch?ng h?n như trư?ng h?p ngo?i l? trên m?t ch? đ? b? đ?m th?i gian ho?c trong m?t ch?c năng g?i l?i, gây ra quá tr?nh nhân viên đ? k?t thúc.

Gi?i pháp

Đ? gi?i quy?t v?n đ? này, s? d?ng m?t trong nh?ng phương pháp sau đây.

Phương pháp 1

S?a đ?i m? ngu?n cho các đ?i tư?ng IHttpModule đ? nó s? đăng thông tin ngo?i l? vào Nh?t k? ?ng d?ng. Thông tin kí nh?p s? bao g?m nh?ng đi?u sau đây:
  • Đư?ng d?n m?c tin thư thoại ?o mà trong đó exceptionoccurred
  • Tên ngo?i l?
  • Tin thư thoại
  • Theo d?i stack
Đ? s?a đ?i các đ?i tư?ng IHttpModule , h?y làm theo các bư?c sau.

Lưu ? M? này s? đăng m?t thư có lo?i s? ki?n l?i và s? ki?n ngu?n c?a ASP.NET 2.0.50727.0 Nh?t k? ?ng d?ng. Đ? ki?m tra các mô-đun, yêu c?u m?t trang ASP.NET s? d?ng phương pháp ThreadPool.QueueUserWorkItem đ? g?i m?t phương pháp ném m?t ngo?i l? không đư?c.
  1. Đ?t đo?n m? sau trong m?t t?p tin là namedUnhandledExceptionModule.cs.
    using System;
    using System.Diagnostics;
    using System.Globalization;
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Text;
    using System.Threading;
    using System.Web;
     
    namespace WebMonitor {
        public class UnhandledExceptionModule: IHttpModule {
    
            static int _unhandledExceptionCount = 0;
    
            static string _sourceName = null;
            static object _initLock = new object();
            static bool _initialized = false;
    
            public void Init(HttpApplication app) {
    
                // Do this one time for each AppDomain.
                if (!_initialized) {
                    lock (_initLock) {
                        if (!_initialized) { 
    
                            string webenginePath = Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "webengine.dll"); 
    
                            if (!File.Exists(webenginePath)) {
                                throw new Exception(String.Format(CultureInfo.InvariantCulture,
                                                                  "Failed to locate webengine.dll at '{0}'.  This module requires .NET Framework 2.0.", 
                                                                  webenginePath));
                            } 
    
                            FileVersionInfo ver = FileVersionInfo.GetVersionInfo(webenginePath);
                            _sourceName = string.Format(CultureInfo.InvariantCulture, "ASP.NET {0}.{1}.{2}.0",
                                                        ver.FileMajorPart, ver.FileMinorPart, ver.FileBuildPart);
    
                            if (!EventLog.SourceExists(_sourceName)) {
                                throw new Exception(String.Format(CultureInfo.InvariantCulture,
                                                                  "There is no EventLog source named '{0}'. This module requires .NET Framework 2.0.", 
                                                                  _sourceName));
                            }
     
                            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException);
     
                            _initialized = true;
                        }
                    }
                }
            }
    
            public void Dispose() {
            }
    
            void OnUnhandledException(object o, UnhandledExceptionEventArgs e) {
                // Let this occur one time for each AppDomain.
                if (Interlocked.Exchange(ref _unhandledExceptionCount, 1) != 0)
                    return;
    
                StringBuilder message = new StringBuilder("\r\n\r\nUnhandledException logged by UnhandledExceptionModule.dll:\r\n\r\nappId=");
    
                string appId = (string) AppDomain.CurrentDomain.GetData(".appId");
                if (appId != null) {
                    message.Append(appId);
                }
                
    
                Exception currentException = null;
                for (currentException = (Exception)e.ExceptionObject; currentException != null; currentException = currentException.InnerException) {
                    message.AppendFormat("\r\n\r\ntype={0}\r\n\r\nmessage={1}\r\n\r\nstack=\r\n{2}\r\n\r\n",
                                         currentException.GetType().FullName, 
                                         currentException.Message,
                                         currentException.StackTrace);
                }           
    
                EventLog Log = new EventLog();
                Log.Source = _sourceName;
                Log.WriteEntry(message.ToString(), EventLogEntryType.Error);
            }
    
        }
    }
  2. Lưu các t?p tin UnhandledExceptionModule.cs đ? followingfolder:
    C:\Program Files\Microsoft Visual Studio 8\VC
  3. M? Microsoft Visual Studio 2005 CommandPrompt.
  4. Lo?i SN.exe -k key.snk, và thenpress ENTER.
  5. Lo?i CSC /t:library /r:system.web.dll,system.dll/keyfile:key.snk UnhandledExceptionModule.cs, và sau đó pressENTER.
  6. Lo?i gacutil.exe /ifUnhandledExceptionModule.dll, và sau đó nh?n ENTER.
  7. Lo?i NGEN installUnhandledExceptionModule.dll, và sau đó nh?n ENTER.
  8. Lo?i gacutil /lUnhandledExceptionModule, và sau đó nh?n ENTER đ? hi?n th? thestrong tên cho các t?p tin UnhandledExceptionModule .
  9. 9. Thêm m? sau vào t?p tin Web.config c?a yourASP.NET d?a trên ?ng d?ng.
    <add name="UnhandledExceptionModule" 
    	type="WebMonitor.UnhandledExceptionModule, <strong name>" />

Phương pháp 2

Thay đ?i chính sách ngo?i l? không đư?c quay l?i ch? đ? m?c đ?nh x?y ra NET Framework 1.1 và Khuôn kh? .NET 1.0.

Lưu ? Chúng tôi không khuyên r?ng b?n thay đ?i ch? đ? m?c đ?nh. N?u b?n b? qua ngo?i l?, các ?ng d?ng có th? r? r? tài nguyên và b? khóa.

Đ? kích ho?t ch? đ? m?c đ?nh này, thêm m? sau đây đ? các t?p tin Aspnet.config đư?c đ?t trong c?p sau:
%WINDIR%\Microsoft.NET\Framework\v2.0.50727
<configuration>
    <runtime>
        <legacyUnhandledExceptionPolicy enabled="true" />
    </runtime>
</configuration>

T?nh tr?ng

Hành vi này là do thi?t k?.

Thông tin thêm

Đ? bi?t thêm chi ti?t v? nh?ng thay đ?i trong Khuôn kh? .NET 2.0, h?y vào web site Microsoft Developer Network (MSDN) sau đây:
http://msdn2.Microsoft.com/en-US/netframework/aa570326.aspx

Thu?c tính

ID c?a bài: 911816 - L?n xem xét sau cùng: 09 Tháng Mười 2013 - Xem xét l?i: 3.0
Áp d?ng
  • Microsoft .NET Framework 4.5
  • Microsoft .NET Framework 4.0
  • Microsoft .NET Framework 3.0
  • Microsoft .NET Framework 2.0
T? khóa: 
kbtshoot kbfix kbprogramming kbprb kbmt KB911816 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài viết này được d?ch b?ng phần mềm dịch thu?t của Microsoft và có thể được Cộng đồng Microsoft chỉnh sửa l?i thông qua công nghệ CTF thay vì một biên dịch viên chuyên nghiệp. Microsoft cung c?p các bài vi?t đư?c c? biên d?ch viên và ph?n m?m d?ch thu?t th?c hi?n và c?ng đ?ng ch?nh s?a l?i đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng nhi?u ngôn ng? Tuy nhiên, bài vi?t do máy d?ch hoặc thậm chí cộng đồng chỉnh sửa sau không ph?i lúc nào c?ng hoàn h?o. Các bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này: 911816

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com