2

Visual Studio 2005 と .NET 2.0 を使用して、Visual Basic で Web アプリケーションをプログラミングしています。私のコード ビハインド (Default.aspx.vb) は次のようになります。

Partial Public Class frmDefault
    Inherits System.Web.UI.Page

    Protected PageData As New Dictionary(Of String, String)

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        PageData("text") = "Hello World!"
    End Sub
End Class

Default.aspx には、

<%=PageData("text")%>

ライブ サーバー (1 日あたり約 40 の一意のヒットを取得する) に配置すると、散発的に「指定されたキーは辞書に存在しませんでした」という結果になります。次のスタック トレースのエラー:

at System.ThrowHelper.ThrowKeyNotFoundException()
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at ASP.default_aspx.__RenderContent2(HtmlTextWriter __w, Control parameterContainer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.Control.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at ASP.forms_glass_master.__Render__control1(HtmlTextWriter __w, Control parameterContainer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.Control.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.Page.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

これらは 1 日に 1 ~ 2 回ログに表示されますが、ライブ アプリケーションのデバッグ、テスト、または使用中にエラーが発生することはありませんでした。

より多くの情報をログに記録するために、これをフォーム クラスに配置してキー エラーをキャッチしようとしました。

Protected Function GetPageData(ByRef Key As String) As String
    Try
        Return PageData(Key)
    Catch Ex As Exception
        'Log the exception
    End Try
End Function

これを Default.aspx で使用します。

<%=GetPageData("text")%>

この変更を出荷してから (1 か月以上前)、重要な例外は 1 つも記録されていません。

(1) 元のコードが主要な例外を生成する原因は何ですか?

(2) 更新されたコードが同様のキー例外を生成しないのはなぜですか?

4

0 に答える 0