ASP.NET的一次奇遇:UserControl寫成Control引發的w3wp進程崩潰


 昨天在寫代碼中一不小心將UserControl寫成了Control,將原來應該繼承自System.Web.UI.UserControl的用戶控件,比如下面的BlogStats:

<%@ Control Language="c#" Inherits="CNBlogs.Web.BlogStats" %>
public class BlogStats : UserControl
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);  
    }
}

變成了繼承自System.Web.UI.Control:

public class BlogStats : Control
{
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);  
    }
}

由於UserControl與Control本身就存在着繼承關系(UserControl->TemplateControl->Control),所以編譯不會有任何錯誤。

但是在運行時,訪問站點竟然出現503錯誤。

Service Unavailable

HTTP Error 503. The service is unavailable.

打開IIS管理工具一看,應用程序池自動停止運行了。

然后打開Windows事件日志,發現了下面的錯誤日志:

Faulting application name: w3wp.exe, version: 8.0.9200.16384, time stamp: 0x50108835 Faulting module name: KERNELBASE.dll, version: 6.2.9200.16864, time stamp: 0x531d34d8 Exception code: 0xe0434352 Fault offset: 0x0000000000047b8c Faulting process id: 0xc9c Faulting application start time: 0x01cf985d408fdb6b Faulting application path: c:\windows\system32\inetsrv\w3wp.exe Faulting module path: C:\Windows\system32\KERNELBASE.dll Report Id: 85f21051-0450-11e4-9407-c2c3c27bfd35 Faulting package full name: Faulting package-relative application ID:

原來是w3wp進程崩潰了。

實在想不明白,UserControl與Control存着着繼承關系,為什么將UserControl寫成Control會造成如此嚴重的后果,難道與ASP.NET用戶控件的動態編譯機制有關?

期待有經驗的朋友幫忙解惑一下。

【附】

BlogStats.ascx的代碼:

<%@ Control Language="c#" Inherits="CNBlogs.Web.BlogStats" %>
<div class="BlogStats">
    隨筆 - <asp:Literal ID="PostCount" runat="server" />, 
    文章 - <asp:Literal ID="StoryCount" runat="server" Visible="True" />, 
    評論 - <asp:Literal ID="CommentCount" runat="server" />, 
    引用 - <asp:Literal ID="PingTrackCount" runat="server" />
</div>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM