アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
ASP.NET(VS2010)に関する質問です。

あるページクラスがArrayList型変数(Public)を持っています。
----------------------------------------------------------------------
1.ボタンクリックで、
 (1)クライアントアドレスを含んだファイル名でファイルを開き、ある文字列を書き込む
 (2)前述の変数に、1で使用したファイル名をAdd

2.別のボタンクリックで、
 前述の変数値からファイル名を取得・ファイルをダウンロードして、表示等を行う
 ダウンロード時は、ファイルに含まれるクライアントアドレスと、自身のアドレスを比較
 して、合致する場合のみダウンロード
----------------------------------------------------------------------
と言う処理があります。

現在これを複数の端末から行うと、稀にユーザーから、

「明らかに自分の端末から処理した物と違うデータが表示される」

と指摘されます。

例えば、クライアントAは「AAA」「CCC」、クライアントBは「BBB」と表示されることを
期待していると、クライアントAに「AAA」「BBB」「CCC」、クライアントBに「BBB」と表
示される様です。

この様な事が起こる原因として考えられる理由には何があるでしょうか?

自分が気になっている点としては、
----------------------------------------------------------------------
1.ArrayList型変数の初期化が、宣言時にしか行われていない
2.そもそもクラス変数ではなく、Session変数を使用すべき?
3.ファイルの書き込み時にロックをしていない
----------------------------------------------------------------------
があるのですが…

以上、お詳しい方、情報頂けると幸いです。
よろしくお願いいたします。

A 回答 (2件)

あと、完全に一つのページに閉じてしまうというならビューステートを使用するという手もありますね。


(個人的にセッション変数を多用したくないのでそっちを使うことが多いです)
    • good
    • 0
この回答へのお礼

大変遅くなりましたが、さらなる情報ありがとうございます。

セッションにしろビューステートにしろ、今まで使ったこと無かったのですが、どうにも避けては通れないみたいですね…

前回もそうなのですが、この現象は一月に数回しか起きなくて、今の所もまだ起きていないのですが、起きることを前提に修正方法を吟味したいと思います。

お礼日時:2012/02/22 18:10

2ですね。


クラス変数(インスタンス変数ではなく)の場合はスコープが
「アプリケーション」になります。
クラサバなら書く端末でアプリケーションを上げてるわけですが、
Webアプリの場合はサーバーにひとつあるだけですよね。
なので、すべての変数を全ユーザーが共有している形になっているはずです。

この場合ならセッション変数を使うほうが変更点は少なくなるんじゃないかと思います。
    • good
    • 0
この回答へのお礼

遅くなりましたが、ありがとうございます。

>なので、すべての変数を全ユーザーが共有している形になっているはずです。
そうなのですか…どこかでインスタンスは接続毎に作られるような記述を見た覚えがあったのですが…
で、クラス変数でも問題ないのかなと思ってました。
Session変数はページ間で移動する場合位しか使用することは無いのかなとも。

身内的には「ロック」を疑って、今週頭にそれで修正掛けて載せちゃったいました!?
まずいな、また起こるな・・・

ちょっと、その方向で再度検討してみます。
ありがとうございました!!

お礼日時:2012/02/16 23:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!