C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: スレッド内でアプリケーション変数の変更について


(過去ログ 43 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■22614 / inTopicNo.1)  スレッド内でアプリケーション変数の変更について
  
□投稿者/ たろ (20回)-(2008/07/28(Mon) 15:15:16)

分類:[.NET 全般] 

お世話になっております。

環境は、visual Studio2005 FrameWork2.0 で
C#(asp.net)によるWEBの開発をおこなっております。

現在のシステムは、ログイン情報をアプリケーション変数で保持しています。(客先仕様)

で、その情報をスレッドをたてて5分おきにチェックして古い情報を削除する動きを作成したいのです。

ですが、スレッド内からアプリケーション変数を取得、また削除する方法がわかりません。
そもそも可能なのかどうかもわかりません。

色々やってはいるのですが、うまくいきません。

何か良い方法はありますか?


ちなみにスレッドは以下の方法でたてています。
System.Threading.Thread ConnectInfoThread = new System.Threading.Thread(new System.Threading.ThreadStart(スレッド処理));
ConnectInfoThread.Start();


また、アプリケーション変数は以下の方法で取得しています。(スレッド以外では)
System.Web.HttpContext.Current.Application["スレッド名"]
引用返信 編集キー/
■22615 / inTopicNo.2)  Re[1]: スレッド内でアプリケーション変数の変更について
□投稿者/ 黒龍 (116回)-(2008/07/28(Mon) 15:27:43)
全体のログイン状況を見たいからなのかな?
別スレッドを立てて監視という方法があまりよいように思えないこととスレッドに習熟せずにThreadStartでのスレッドを使うのは若干敷居が高いように感じます。
ログインの保持などはASP.NETであればカスタムプリンシパルを構築してスレッドの情報と差し替えるなどがよくやる手段だと思われるのですが・・・。
取得で例示されているコードでのスレッドの部分に混同がありそうに感じたのですが・・・。

セッションスコープじゃなくアプリケーションスコープでの保持している点などを明らかにしたほうがよりよい回答がもらえそうな気がします。

引用返信 編集キー/
■22617 / inTopicNo.3)  Re[2]: スレッド内でアプリケーション変数の変更について
□投稿者/ やじゅ (501回)-(2008/07/28(Mon) 15:37:25)
やじゅ さんの Web サイト
2008/07/28(Mon) 15:41:27 編集(投稿者)

JavaScriptを使って、5分おきに更新すればいいのではなくて?

または・・・
ASPでTimerの機能はありますか?
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2067992&SiteID=7

引用返信 編集キー/
■22670 / inTopicNo.4)  Re[2]: スレッド内でアプリケーション変数の変更について
□投稿者/ たろ (22回)-(2008/07/29(Tue) 16:02:43)
お世話になっております。
たろです。

ご回答ありがとうございます。

そうですね!
やりたいことは、画面処理時に裏でログイン情報をチェックして一定のログイン時間が過ぎている
ログイン情報を削除することです。

なので、非同期で裏でアプリケーション変数をいじれればスレッドじゃなくてもいいんですけどね・・・。
でも、実際に今動いている非同期の処理がスレッドを使用しているので、お客様からは極力同じやり方でと言われています。

アプリケーション変数を使用しているのは、セッションがきれても接続情報を保持するため。
アプリケーションエラーやIISのリサイクル時には、一度外部ファイルに出力するって処理もいれています。

ということで非同期でアプリケーション変数をいじりたいのです。

スレッド内からメイン処理のアプリケーション変数ってみれないんですかね?
また、スレッド以外の非同期処理って何かありますかね?




No22615 (黒龍 さん) に返信
> 全体のログイン状況を見たいからなのかな?
> 別スレッドを立てて監視という方法があまりよいように思えないこととスレッドに習熟せずにThreadStartでのスレッドを使うのは若干敷居が高いように感じます。
> ログインの保持などはASP.NETであればカスタムプリンシパルを構築してスレッドの情報と差し替えるなどがよくやる手段だと思われるのですが・・・。
> 取得で例示されているコードでのスレッドの部分に混同がありそうに感じたのですが・・・。
>
> セッションスコープじゃなくアプリケーションスコープでの保持している点などを明らかにしたほうがよりよい回答がもらえそうな気がします。
>
引用返信 編集キー/
■22671 / inTopicNo.5)  Re[3]: スレッド内でアプリケーション変数の変更について
□投稿者/ たろ (23回)-(2008/07/29(Tue) 16:05:57)
お世話になっております。
たろです。

ご回答ありがとうございます。

できればアプリケーションが起動している間(画面が表示されていない場合でも)
非同期で処理を行いたいです。

ちなみにAJAXは使用できません。。

No22617 (やじゅ さん) に返信
> 2008/07/28(Mon) 15:41:27 編集(投稿者)
>
> JavaScriptを使って、5分おきに更新すればいいのではなくて?
>
> または・・・
> ASPでTimerの機能はありますか?
> http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2067992&SiteID=7
>
引用返信 編集キー/
■22674 / inTopicNo.6)  Re[3]: スレッド内でアプリケーション変数の変更について
□投稿者/ 黒龍 (117回)-(2008/07/29(Tue) 16:23:20)
なんかいろいろ涙ぐましい・・・。

セッションをDBでやってリクエスト毎に最終アクセス時刻的なものをDBなりクッキーなりでやってやるのが正攻法かなぁ。
今の流れのままというのであればちょっと状況が見えないのでなんともいえないです。ASP.NETなので外からやってやるのは難しいでしょうね。泥臭かろうと何でもいいというのであれば専用ページを作ってローカルなりから定期リロードすることでタイマー代わりにサーバ側処理出来るでしょうけど・・・。
引用返信 編集キー/
■22692 / inTopicNo.7)  Re[4]: スレッド内でアプリケーション変数の変更について
□投稿者/ なちゃ (152回)-(2008/07/29(Tue) 19:29:55)
Application_StartでもApplicationインスタンスは取れたような気がするので、
staticに保持しといて、タイマーでコールバックでチェックしたらいけそうな気がしないでもない。

引用返信 編集キー/
■22729 / inTopicNo.8)  Re[1]: スレッド内でアプリケーション変数の変更について
□投稿者/ Jitta (498回)-(2008/07/30(Wed) 20:28:47)
Jitta さんの Web サイト
No22614 (たろ さん) に返信
> 色々やってはいるのですが、うまくいきません。
> また、アプリケーション変数は以下の方法で取得しています。(スレッド以外では)
> System.Web.HttpContext.Current.Application["スレッド名"]
 どんなことを試みましたか?

> ですが、スレッド内からアプリケーション変数を取得、また削除する方法がわかりません。
 あなたが「スレッド以外では」とおっしゃっている箇所も、スレッドで動いているのですが、そういう知識面は、大丈夫ですか?


> 現在のシステムは、ログイン情報をアプリケーション変数で保持しています。(客先仕様)
 お客様は、なぜ、ログイン情報をアプリケーション変数で保持しているのでしょう?
 「お客様がこういうから」ではなく、あなた(が所属する会社)が持つ知識で、どういうメリットとデメリットがあるのかを提案し、了解を得てください。

 今ここに提示されている情報からは、1つの問題があるのではないかと思います。
セッション情報は、どこにしまわれているのでしょう?もし、InProc モードであれば、アプリケーションが再起動したときにセッション情報は失われます。それは大丈夫ですか?
もし、InProc 以外であれば、アプリケーションが再起動したときに、セッションは続いているのにログイン情報は失われてしまいます。それは検討されて、仕様として認められている動作でしょうか?

引用返信 編集キー/
■22806 / inTopicNo.9)  Re[4]: スレッド内でアプリケーション変数の変更について
□投稿者/ たろ (24回)-(2008/08/01(Fri) 19:10:11)
ご回答ありがとうございます。

そうですね。
最終手段として、ローカルからのリロードを検討しています。


No22674 (黒龍 さん) に返信
> なんかいろいろ涙ぐましい・・・。
>
> セッションをDBでやってリクエスト毎に最終アクセス時刻的なものをDBなりクッキーなりでやってやるのが正攻法かなぁ。
> 今の流れのままというのであればちょっと状況が見えないのでなんともいえないです。ASP.NETなので外からやってやるのは難しいでしょうね。泥臭かろうと何でもいいというのであれば専用ページを作ってローカルなりから定期リロードすることでタイマー代わりにサーバ側処理出来るでしょうけど・・・。
引用返信 編集キー/
■22807 / inTopicNo.10)  Re[5]: スレッド内でアプリケーション変数の変更について
□投稿者/ たろ (25回)-(2008/08/01(Fri) 19:11:55)
ご回答ありがとうございます。

staticに保持して、タイマーでコールバックですかぁ。。
やってみますね。。


No22692 (なちゃ さん) に返信
> Application_StartでもApplicationインスタンスは取れたような気がするので、
> staticに保持しといて、タイマーでコールバックでチェックしたらいけそうな気がしないでもない。
>
引用返信 編集キー/
■22808 / inTopicNo.11)  Re[2]: スレッド内でアプリケーション変数の変更について
□投稿者/ たろ (26回)-(2008/08/01(Fri) 19:14:08)
ご回答ありがとうございます。

アプリケーションが再起動した場合の対応は、アプリケーションエンドで一度外部ファイルに保持して、
スタートで設定しなおす方法で対応しています。




No22729 (Jitta さん) に返信
> ■No22614 (たろ さん) に返信
>>色々やってはいるのですが、うまくいきません。
>>また、アプリケーション変数は以下の方法で取得しています。(スレッド以外では)
>>System.Web.HttpContext.Current.Application["スレッド名"]
>  どんなことを試みましたか?
>
>>ですが、スレッド内からアプリケーション変数を取得、また削除する方法がわかりません。
>  あなたが「スレッド以外では」とおっしゃっている箇所も、スレッドで動いているのですが、そういう知識面は、大丈夫ですか?
>
>
>>現在のシステムは、ログイン情報をアプリケーション変数で保持しています。(客先仕様)
>  お客様は、なぜ、ログイン情報をアプリケーション変数で保持しているのでしょう?
>  「お客様がこういうから」ではなく、あなた(が所属する会社)が持つ知識で、どういうメリットとデメリットがあるのかを提案し、了解を得てください。
>
>  今ここに提示されている情報からは、1つの問題があるのではないかと思います。
> セッション情報は、どこにしまわれているのでしょう?もし、InProc モードであれば、アプリケーションが再起動したときにセッション情報は失われます。それは大丈夫ですか?
> もし、InProc 以外であれば、アプリケーションが再起動したときに、セッションは続いているのにログイン情報は失われてしまいます。それは検討されて、仕様として認められている動作でしょうか?
>
引用返信 編集キー/
■22809 / inTopicNo.12)  Re[3]: スレッド内でアプリケーション変数の変更について
□投稿者/ 渋木宏明(ひどり) (838回)-(2008/08/01(Fri) 20:41:07)
渋木宏明(ひどり) さんの Web サイト
> アプリケーションが再起動した場合の対応は、アプリケーションエンドで一度外部ファイルに保持して、
> スタートで設定しなおす方法で対応しています。

それちゃんと動作してます?
Application_End イベントってあまりあてにならなかったような気がするけど。

引用返信 編集キー/
■22903 / inTopicNo.13)  Re[4]: スレッド内でアプリケーション変数の変更について
□投稿者/ たろ (27回)-(2008/08/05(Tue) 15:54:52)
お世話になっております。
たろです。

検証した結果、web.config更新時もサーバーでのリサイクル時も問題なく動作しています。
あてにならないとは、イベントが発生しない場合があるってことですかね?


No22809 (渋木宏明(ひどり) さん) に返信
>>アプリケーションが再起動した場合の対応は、アプリケーションエンドで一度外部ファイルに保持して、
>>スタートで設定しなおす方法で対応しています。
>
> それちゃんと動作してます?
> Application_End イベントってあまりあてにならなかったような気がするけど。
>
引用返信 編集キー/
■22931 / inTopicNo.14)  Re[5]: スレッド内でアプリケーション変数の変更について
□投稿者/ 渋木宏明(ひどり) (842回)-(2008/08/05(Tue) 23:50:33)
渋木宏明(ひどり) さんの Web サイト
> あてにならないとは、イベントが発生しない場合があるってことですかね?

そうです。

あったような気がするんですけど。。。
勘違いなのかもしれません。お騒がせして申し訳ありません。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -