我在我的应用程序中设置了远程类型,我避免使用TargetInvocationExceptions
并获取内部异常。我在PrepForRemoting
类上调用内部Exception
方法,以保留调用方法的堆栈跟踪。
这似乎正确构造了堆栈跟踪属性:
“\ r \ n服务器堆栈跟踪:\ r \ n
在ZBooking.Environment.Services.BookingService。<> c_ DisplayClass9`1.b _5(BookingSlot p)in C:\ dev \ ZBookings \ core \ ZZBookings.Services \ BookingService.cs:第79行\ r \ n
在System.Linq.Enumerable.All [TSource](IEnumerable'1 source,Func'2谓词)\ r \ n
在ZBookings.BookingService.MoveBooking [TBookingType](Int32 bookingId,> IEnumerable`1 bookingSlots)中 C:\ dev \ ZBooking.Client \ core \ ZBookings.Services \ BookingService.cs:第79行\ r \ n \ r \ n
在[0]处重新抛出异常:\ n \ r \ n在ZBookings.BookingService。<> c_ DisplayClass9`1.b _5(BookingSlot p)in C:\ dev \ ZBookings \ core \ ZBookings.Services \ BookingService.cs:第79行\ r \ n
在System.Linq.Enumerable.All [TSource](IEnumerable'1 source,Func'2谓词)\ r \ n
在ZBookings.BookingService.MoveBooking [TBookingType](Int32 bookingId,IEnumerable`1 bookingSlots)中 C:\ dev \ ZBookings \ core \ ZBookings.Services \ BookingService.cs:第79行“
但是,当标准ASP.NET黄色屏幕显示时,它是:
[NullReferenceException:对象引用未设置为对象的实例。] C:\ dev \ ZBooking \ core \ ZBooking.ApplicationServices \ MethodMarshaller.cs中的ZBooking.ApplicationServices.MethodMarshaller.Invoke(Delegate del,ZipIdentity zipIdentity,Object [] args):147 C:\ dev \ ZBooking \ core \ ZBooking.ApplicationServices \ MethodMarshaller.cs中的ZBooking.ApplicationServices.MethodMarshaller.Invoke(Delegate del,ZipIdentity zipIdentity,Object [] args):105 ZBooking.ApplicationServices.MethodMarshaller.Call(Func'3 del,T1 arg1,T2 arg2,ZipIdentity zipIdentity)在C:\ dev \ ZBooking \ core \ ZBooking.ApplicationServices \ MethodMarshaller.cs:72
...等
在Global.asax中调用Application_Error上的Server.GetLastError();
显示正确的堆栈跟踪。黄色屏幕堆栈的痕迹来自哪里?
答案 0 :(得分:7)
ASP.NET的黄色死亡屏幕通过从异常中构造StackTrace
来获取堆栈跟踪。它使用StackTrace(Exception, Boolean)
构造函数执行此操作。然后它通过遍历StackFrame对象提供的StackTrace
对象来转储堆栈。它不使用Exception.StackTrace
属性。