ASP.NET C# Web アプリケーションは、次の環境で使用されます。
- .NET フレームワーク 4
- Silverlight 4 / ピボットビューア
- IIS7
- Windows 2008
- Visual Studio 2010 .NET IDE
- C#
- HTTPS (SSL)
Silverlight 4 / PivotViewer コントロールは、明らかに ASP.NET ページに埋め込まれています。
まれに、IIS 7 を使用するスタンドアロンの Windows 2008 サーバーで Silverlight 4 / PivotViewer モジュールをホストする ASP.NET ページをナビゲートすると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」というエラーが発生します。
また、エラーについて非常に奇妙なことがいくつかあります。第 1 に、特定のユーザー コンピューターで時々しか発生しません。詳しく説明すると、通常、ユーザーが ASP.NET Web アプリケーションに初めてアクセスするコンピューターを使用するときにのみ発生します。
さらに、ブラウザのキャッシュをクリアすると、Silverlight 4 / PivotViewer モジュールをホストする ASP.NET ページをナビゲートするときにエラーは発生しません。
このエラーに関するもう 1 つの興味深い側面は、実際には IIS 7 を使用してスタンドアロンの Windows 2008 サーバーにデプロイされているときに、エラー スタック トレースでローカルの開発用コンピューターの絶対パスを参照していることです。 IIS 7 を搭載したスタンドアロンの Windows 2008 サーバーでは、web.config などのファイル内のすべての構成パラメーターがスタンドアロン サーバー環境を参照していることを確認します。つまり、ローカルの開発用コンピューターに関連付けられている構成パラメーター値への参照をすべて削除します。
したがって、エラー スタック トレースでローカルの開発用コンピューターの絶対パスを参照する理由がわかりません。
サイトの使用中に「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」というメッセージがユーザーに表示されるのは、ユーザー エクスペリエンスに悪影響を及ぼします。エラーが表示されるたびにキャッシュします。
「/」アプリケーションでサーバー エラーが発生しました。オブジェクト参照がオブジェクト インスタンスに設定されていません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。
ソース エラー: 現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。
スタックトレース:
[NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。] C:\VisualStudioWorkSpace\VisualCSharpProjects\PerlsPivot\PivotServer\SectionBasedRelatedModules\SectionBasedPerlsViewer.aspx.cs:160 の PivotServer.SectionBasedRelatedModules.SectionBasedPerlsViewer.tailorConfigurationDetailsOfPageElementsToFallInLineWithTutorialSelection() .Page_Load(Object sender, EventArgs e) in C:\VisualStudioWorkSpace\VisualCSharpProjects\PerlsPivot\PivotServer\SectionBasedRelatedModules\SectionBasedPerlsViewer.aspx.cs:146 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +24 System.Web.UI.Control.LoadRecursive() +70 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,ブール値 includeStagesAfterAsyncPoint) +3063
バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.0.30319.272
次のコードを含む160行目を確認しました。
String coursename = HttpContext.Current.Session["courseNameAssociatedWithLoggedInUser"].ToString();
明らかに、これは HttpContext.Current.Session に変数 "courseNameAssociatedWithLoggedInUser" の値がないことを示しています。
ただし、別のコンピューターで同じ手順を実行しましたが、すべてスムーズに実行されました。また、ユーザーがログインするとすぐに HttpContext.Current.Session["courseNameAssociatedWithLoggedInUser"] に値を与えていると確信しています。
HttpContext.Current.Session["courseNameAssociatedWithLoggedInUser"] は何らかの理由で破損していますか? もしそうなら、なぜ、そしてどのようにそれを防ぐのですか?
HttpContext.Current.Session の代わりに Page.Session を使用する必要がありますか? それは役に立ちますか?