IIS栈溢出崩溃(未处理)asp.net MVC 3



我有错误的ASP行为。. NET MVC 3在iis7上的应用。我们在代码中有堆栈溢出条件,它导致一般的应用程序池崩溃而没有正确的系统。StackOveflowException扔。因此,在开始执行有问题的函数之后,w3wp.exe会出现本机代码异常

下面是HtmlHelper扩展的代码(现在-修正):

public static string Avatar( this UrlHelper helper, string fileName)
    {
        return helper.UserAvatar(fileName);
    }
public static string UserAvatar( this UrlHelper helper, string fileName)
    {
        if (string.IsNullOrEmpty(fileName))
            return EmptyPhotoImage(helper);
        var photoPath = System.Web.Hosting.HostingEnvironment.MapPath(string.Format("~/Content/avatars/{0}", fileName));
        if (!File.Exists(photoPath))
            return EmptyPhotoImage(helper);
        return Avatar(helper, fileName);
    }

下面是事件日志记录:

Faulting application name: w3wp.exe, version: 7.5.7601.17514, time stamp: 0x4ce7afa2
Faulting module name: ntdll.dll, version: 6.1.7601.17725, time stamp: 0x4ec4aa8e
Exception code: 0xc00000fd
Fault offset: 0x0000000000055d7f
Faulting process id: 0x1a6c
Faulting application start time: 0x01ce6c67c7179807
Faulting application path: c:windowssystem32inetsrvw3wp.exe
Faulting module path: C:WindowsSYSTEM32ntdll.dll
Report Id: 0dd50093-d85b-11e2-9ee7-50e549e13906

另一个:

Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0
Problem signature:
P1: w3wp.exe
P2: 7.5.7601.17514
P3: 4ce7afa2
P4: ntdll.dll
P5: 6.1.7601.17725
P6: 4ec4aa8e
P7: c00000fd
P8: 0000000000055d7f
P9: 
P10: 

我的问题:为什么它导致池崩溃没有StackOverflowException?

因为你引起了无限递归调用。

Avatar调用UserAvatar, UserAvatar在满足特定条件时调用Avatar,例如当磁盘上没有文件时。

因此产生StackOverflowException,这使得应用程序无法继续运行。这就是为什么你会得到一个本地异常(因为是CLR崩溃了)。事件0xc00000fd是一个StacokOverflowException)

相关内容

  • 没有找到相关文章

最新更新