7

我在我的应用程序中设置了一个远程处理类型,我避免TargetInvocationExceptions并抓住了内部异常。我调用类的内部PrepForRemoting方法Exception以保留调用方法的堆栈跟踪。

这似乎正确地构造了堆栈跟踪属性:

"\r\n服务器堆栈跟踪:\r\n

在 ZBooking.Environment.Services.BookingService.<> c_DisplayClass9`1.b _5(BookingSlot p) 在 C:\dev\ZBookings\core\ZZBookings.Services\BookingService.cs:line 79\r\n

在 System.Linq.Enumerable.All[TSource](IEnumerable'1 源,Func'2 谓词)\r\n

在 C:\dev\ZBooking.Client\core\ZBookings.Services\BookingService.cs:line 79 中的 ZBookings.BookingService.MoveBooking[TBookingType](Int32 bookingId, >IEnumerable`1 bookingSlots)\r\n\r\n

在 [0] 处重新抛出异常:\r\n 在 ZBookings.BookingService.<>c_ DisplayClass9`1.b _5(BookingSlot p) in C:\dev\ZBookings\core\ZBookings.Services\BookingService.cs:line 79\ r\n

在 System.Linq.Enumerable.All[TSource](IEnumerable'1 源,Func'2 谓词)\r\n

在 C:\dev\ZBookings\core\ZBookings.Services\BookingService.cs:line 79 中的 ZBookings.BookingService.MoveBooking[TBookingType](Int32 bookingId, IEnumerable`1 bookingSlots)”

但是,当这由标准 ASP.NET 黄屏显示时,它是:

[NullReferenceException:对象引用未设置为对象的实例。] C:\dev\ZBooking\core\ZBooking.ApplicationServices\MethodMarshaller 中的 ZBooking.ApplicationServices.MethodMarshaller.Invoke(Delegate del, ZipIdentity zipIdentity, Object[] args)。 c:147 ZBooking.ApplicationServices.MethodMarshaller.Invoke(Delegate del, ZipIdentity zipIdentity, Object[] args) 在 C:\dev\ZBooking\core\ZBooking.ApplicationServices\MethodMarshaller.cs: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 中调用Server.GetLastError();Application_Error 会显示正确的堆栈跟踪。黄色屏幕堆栈跟踪来自哪里?

4

1 回答 1

7

ASP.NET's yellow screen of death gets the stack trace by constructing a StackTrace from the exception. It does this using the StackTrace(Exception, Boolean) constructor. It then dumps the stack by walking the StackFrame objects supplied by the StackTrace object. It does not use the Exception.StackTrace property.

于 2011-03-31T22:41:19.100 回答