- PR -

ASP.NETのDBセッション管理について

1
投稿者投稿内容
まさ.NET
会議室デビュー日: 2002/06/20
投稿数: 13
投稿日時: 2002-06-24 16:58
ASP.NET(VB)+Oracle816で悩んでいます。
ページを表示した後に、OleDBConnection.Close()で接続を切っているつもり
なのですが、「Instance Manager」で確認すると「aspnet_wp.exe」として
セッションが存在しています。

ページの表示後、DBからセッションを切断するためには、何か特別な方法が
あるのでしょうか?
ちなみに、タスクマネージャで「aspnet_wp.exe」を終了するとセッションは
切れます。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-06-25 03:21
その現象は、OLEDB.NETデータプロバイダの接続プールが有効になっているためだと思われます。以下のような接続文字列を使えば、接続プールを無効に出来ます。

Provider=SQLOLEDB;OLE DB Services=-4;Data Source=localhost;Integrated Security=SSPI;

接続プールが有効になっている場合にはコネクションがクローズされても、接続プールがセッションを保持します。詳しくはヘルプで調べてみてください。

もしくは、OleDbConnection.Disposeメソッドを用いれば、リソースが解放されますのでセッションも落ちることだと思います。


_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
まさ.NET
会議室デビュー日: 2002/06/20
投稿数: 13
投稿日時: 2002-06-25 09:09
うりゅうさんありがとうございました。

ちなみに、OleDbConnection.Disposeするタイミングがどこが適当なのでしょうか?
 プロジェクト内のComponent1のOleDbConnectionをWebForm1,2,3で使用しています。
 フォームは「1⇒2⇒3」の順で遷移します。

どのタイミングで実行するのが一般的なのでしょうか?
(初歩的な質問ですみません)
まりり
ぬし
会議室デビュー日: 2001/12/05
投稿数: 329
投稿日時: 2002-06-25 10:20
どこで切ったらいいのかを考える前に、なぜ「明示的に」接続を切りたいのかを
はっきりしましょう。

コネクションをプールする理由は、接続・切断にコストがかかるためであったり、
限られたりソースを有効に利用するためです。
このメリットを捨ててでも行いたい理由がないのなら、無理に切断することは
考えないほうが良いと思います、個人的には。
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2002-06-25 11:07
>どのタイミングで実行するのが一般的なのでしょうか?

まりりさんのおっしゃるとおり、コネクションをプールするほうがサーバの負荷は大幅に下がります。ユーザーがブラウザを閉じるなどの操作を行った後、しばらくたつと自動的にリソースは解放されますので、一般的にはプールしっぱなしでも問題ないはずです。

もし特別な理由を推測するならばDB側で同時接続に関する制限があるとか、WEBアプリの使用でユーザ認証に関してなにかしらの制限を設けてるというところでしょうか。

最初に書きましたが、接続プールを使うほうが負荷がかからりませんから、もし明示的にDisposeするのならば、

*3のページの最後の段階でDisposeする
が望ましく、
*各ページから次のページへの遷移直前でDisposeする
が、もっとも負荷がかかるということになります。これは、まりりさんのおっしゃるとおり、なぜ「明示的に」接続を切りたいのかとの兼ね合いになると思われます。
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
まさ.NET
会議室デビュー日: 2002/06/20
投稿数: 13
投稿日時: 2002-06-25 13:00
確かに、おっしゃるとおりです。

セッションが切れないので、「なんとか切ろう」としか考えていませんでした。
明示的にセッションを切断する理由なんてありません。
「なぜセッションが切れないのだろう?」と考えるべきでした。

一人でもんもんと考えていると、一点しか見えなくなってしまいます。
みなさん、ありがとうございました。
1

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