- PR -

WebServiceでstatic変数が初期化される

投稿者投稿内容
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-11-10 21:28
引用:

あみぃさんの書き込み (2003-11-06 11:24) より:
WebServiceもASP.NETの枠組み内で動作しているのでステートレスです。
なので、shareオブジェクトの生存期間は、そのWebServiceがリクエストを受けてからレスポンスを返すまでの間だと思います。


Webサービスの実体のインスタンスはそうでしょうけど、Static なメンバはずっと生存しています(参照がなくなるまでは)。
# もちろん、ASP.NET の再起動等が発生すれば別です。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-11 09:01
引用:

なちゃさんの書き込み (2003-11-10 21:24) より:

いや、多分 VS.NET で ASP.NET のアプリを作成した場合は自動的にこうなると思います。


 Globalって、global.asaxのGlobalのこと?!


 ここのApplication_Startに

System.Diagnostics.Debug.AutoFlush = true;
System.Diagnostics.Debug.IndentLevel = 0;
System.Diagnostics.Debug.WriteLine("Global.Application_Start");

っていれておけば、いつリセットされるかわかりますよ、たぶん。
#デバッガ上で動かしてないとダメだけど。
make
会議室デビュー日: 2003/10/02
投稿数: 4
投稿日時: 2003-11-11 12:14
返信ありがとうございます。

>書き込み先のファイルは何ですか?
>Web.config あるいは、bin フォルダ内にあるファイルではないですか?
>もしそうなら、そのWebアプリケーションのアプリケーションドメインがリロードされるためだと思います。

binフォルダの中にログファイルを作成しています。
ほかのところに作って試してみます。

> Globalって、global.asaxのGlobalのこと?!
そうです。説明不足ですみません。

> ここのApplication_Startに
>
>System.Diagnostics.Debug.AutoFlush = true;
>System.Diagnostics.Debug.IndentLevel = 0;
>System.Diagnostics.Debug.WriteLine("Global.Application_Start");
>
>っていれておけば、いつリセットされるかわかりますよ、たぶん。
>#デバッガ上で動かしてないとダメだけど。

試してみます。
あみぃ
会議室デビュー日: 2003/01/20
投稿数: 8
投稿日時: 2003-11-11 13:33
引用:

なちゃさんの書き込み (2003-11-10 21:28) より:
Webサービスの実体のインスタンスはそうでしょうけど、Static なメンバはずっと生存しています(参照がなくなるまでは)。
# もちろん、ASP.NET の再起動等が発生すれば別です。



思いっきり考え違いをしていました(^^;
おっしゃるとおり、staticは生存してますね。

で、bin以外のフォルダ(試しにApplicationDataフォルダ)でやってみたところ、リセットされずにWrite、Readできました。
makeさん、ご参考までに。
やんたん
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 63
投稿日時: 2003-11-16 16:56
makeさんと同様の問題を抱えており、こちらのスレッドを参考に
調査を進めております。

なちゃさんのおっしゃるとおり、bin以外のフォルダであればリセット
されませんでした。
ただ、なちゃさんのおっしゃる「アプリケーションドメインがリロード」
という部分がよくわかっておりません。
私の場合、どうしてもbinフォルダ内のファイルに書き込みを行いたいのですが
それは不可能なのでしょうか

だれかご存知の方がおりましたら教えて頂けないでしょうか。

よろしくお願いします。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-11-17 01:20
引用:

やんたんさんの書き込み (2003-11-16 16:56) より:
ただ、なちゃさんのおっしゃる「アプリケーションドメインがリロード」
という部分がよくわかっておりません。
私の場合、どうしてもbinフォルダ内のファイルに書き込みを行いたいのですが
それは不可能なのでしょうか


表現がちょっと分かりにくかったですが、要はそのWebアプリケーションのASP.NET環境が再起動されるというか、初期化されるというか、まあそんな感じだと理解すれば良いと思います。
簡単に言うと、bin フォルダは ASP.NET において特殊な意味を持つフォルダであり、ここのファイルに更新などが発生すると、ASP.NET の環境が再起動されるようになっています(表現が微妙ですが)。
これは、Webアプリケーションが使用しているDLLなどが更新された場合に対応するためです。.NET環境では、既にロードしたアセンブリを再ロードして動作を更新することが出来ないので、環境ごと再起動(再作成?)されます。
ですので、静的なデータも含めてリセットされます。
回避方法はもしかしたらあるのかもしれませんが(私は知りません)、そういうものだと納得して別のフォルダを使用することを考慮した方が良いと思います。

スキルアップ/キャリアアップ(JOB@IT)