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) 更新されたコードが同様のキー例外を生成しないのはなぜですか?