2

現在HttpContext.Current.Items、サーバー環境で開発者のローカル環境が問題を示さない (すべて期待どおりに動作する) の使用に問題が見られます。内部に配置されたアイテムが突然失われます ( NullReferenceException.

私はいくつかのコードをスケッチし、以下を使用します:

Global.asax では、BeginRequest でファクトリを初期化します。

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext.Current.Items["Key"] = new Factory();
}

内部にBaseControlは、ファクトリを簡単に取得するためのプロパティがあります。

public Factory Factory
{
    get { return HttpContext.Current.Items["Key"] as Factory; }
}

ではUserControl、 base プロパティを介して使用します。

protected void Page_Load(object sender, EventArgs e)
{
    Product p = Factory.CreateProduct();
}

環境情報:

  • ローカル DEV は、IIS 7.5 および 8 と Sitecore 6.6 を使用して Windows 7 および 8 で実行されています。
  • サーバーは、IIS 7.5 および Sitecore 6.6 を使用して Windows Server 2008 R2 を実行しています。

すべてのローカル DEV (6 人でこのプロジェクトに取り組んでいます) については、上記のコードに問題はありません。ただし、コードをテスト サーバーにデプロイすると、Factory を使用する場所が壊れます (HttpContext.Current.Items空です) 。

4

2 に答える 2

0

あなたが説明したように動作するシナリオは1つだけ想像できます.Global.asaxファイルInheritsでは、テストサーバーのプロパティは、Sitecore.Web.Applicationコードの実行を直接省略しています。

ファイルGlobal.asax

<%@Application Language='C#' Inherits="My.Assembly.Namespace.Global" %>

これは、Global.asax開発環境で が変更されたが、テスト環境にデプロイされていない場合に発生する可能性があります。

問題がない場合はApplication_BeginRequest、テスト サーバーで が実行されているかどうかを確認してください。Factoryが に追加されないか、リクエスト処理中にHttpContext.Current.Itemsから削除されるかどうかの答えが得られます。Items

于 2013-04-11T12:20:48.920 に答える