2009-07-31 15 views
0

1つのラベルと2つのボタンを持つWebページがあります。 1つのボタンはポストバックを行い、数字のランダムな部分集合を生成し、それをApplicationオブジェクトに保存し、Applicationオブジェクトからリストを取得してラベルに書き込むメソッドを呼び出します。もう一方のボタンはメソッドを呼び出して番号を取得し、ラベルに書き出します。ページの読み込み時に、値を取得してラベルに書き込む同じ関数を呼び出します。ASP.NETアプリケーションオブジェクトの値が失われる

私は、3つのブラウザ(IE、FF、Chrome)を同時に使用して、ウェブサイトをローカルで実行し、期待どおりに動作します。各ブラウザは同じ値を表示し、いずれかがランダム化を呼び出すと変更されます。

プロダクションサーバーでは、異なる値を取得します。IEまたはFFで値を取得できないことがあります。

ロードバランサはありません。

コード、それは醜いが、私は必死にそれが動作するために、すべての組み合わせを試してみた:

protected void Page_Load(object sender, EventArgs e) 
    { 
     show(); 
    } 
    private List<int> AllNums 
    { 
     get 
     { 
      List<int> list = new List<int>(); 
      try 
      { 
       list = (List<int>)Application["Nums"]; 
      } 
      catch 
      { 
       list = new List<int>(); 
      } 
      if (list == null) 
       list = new List<int>(); 
      return list; 

     } 
    } 
    protected void btnRandomize_Click(object sender, EventArgs e) 
    { 
     Random r = new Random(); 
     int i = r.Next(5, 15); 
     List<int> list = new List<int>(); 
     for (int k = 0; k < i; k++) 
      list.Add(r.Next(0, 100)); 
     Application.Lock(); 
     Application["Nums"] = list; 
     Application.UnLock(); 
     show(); 
    } 

    private void show() 
    { 
     StringBuilder sb = new StringBuilder(); 
     foreach (int o in AllNums) 
      sb.AppendLine(o.ToString()); 
     lblSession.Text = sb.ToString(); 
    } 
+0

これをBrowser1で開くと、値を参照してBrowser2で開き、値を表示せずに再びBrowser1で開くと、値が表示されますか? – Stilgar

答えて

0

それはおそらくのmachine.configがオフにサーバーセッション状態を設定したことだろうweb.configにオーバーライドがありませんか?

また、URLが「ゾーン」である可能性があります。イントラネット、外部サイトでは、IEの動作が異なります。それを信頼済みサイトのリストに追加して、もう一度やり直してください。

+0

セッションオプションは、Applicationオブジェクトに影響しません。 – Stilgar

関連する問題