- PR -

aspnet_wpによるWebサービス停止について

1
投稿者投稿内容
kou
会議室デビュー日: 2005/10/14
投稿数: 4
投稿日時: 2007-04-23 19:08
[開発環境]
OS:Windows XP Professional
開発ツール:Visual Studio 2005 C# / Windowsフォームにて開発
DB:Oracle 10gR2 / ODP.net(2.102.2.20)
-----------------------------------------
画面フォームからWebサービスを経由し、ビジネスクラス経由のデータアクセスクラスにてDB更新という手法をとっています。
OracleConecctionを張っている場所はビジネスクラスになります。
また、TryにてOpenし、finallyにてCloseしています。

困っている点についてですが、OracleのコネクションプールをTrueにして設定しておくと、aspnet_wp.exeの接続が残ってしまいます。接続が残ってしまっているため、Webサービスが応答しなくなるということが発生しています。
しばらく放っておくと「操作はタイムアウトになりました」とエラーが表示されます。
応答しなくなったときのサーバーの状態をOracle Enterpriseマネージャーにてセッションの情報を見てみると、aspnet_wp.exeが多数接続されたままになっています。
IISサービスを再起動するとこれらのセッションが消えて、しばらくの間プログラムを動かすことができるというような状態です。
この現象は毎回同じタイミングで起こるわけではなく、同じ処理をしても一回目でだめなときもあれば、何回行っても大丈夫でもあります。(表現が悪くてすいません。)

いろいろ検索してみた結果、aspnet_wpプロセスがCPU100%になって止まってしまうなどの記事を見つけましたが、Process Explorerなどを使用して監視してみたところCPU100%にはなっていませんでした。(そのときの使用率の表示が無かったのは100%だったのでしょうか…?)

Oracleの接続文字列にてConnection Lifetime、Decr Poolなどを設定しても、aspnet_wp.exeプロセスが切断されることはありませんでした。
しかし、Connection PoolingをFalseに設定するとaspnet_wp.exe接続が残らないということまでは確認しています。
できればConnection PoolingはTrueのまま稼動させたいと思っております。

検索しつくした結果ここに投稿させていただきました。よろしくお願いします。

ここまで至る経緯で参考にした記事を載せておきます。(特に@の方とはサーバーでの現象も同じです。)
@http://forums.oracle.com/forums/thread.jspa?threadID=227838
Ahttp://forums.asp.net/thread/478215.aspx
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-24 07:02
接続文字列を、各接続ごとにログしてみて下さい。接続ごとに違うなら、プールの必要はありません。または、同じ接続文字列を使うように修正してみて下さい。
同じ接続文字列なら、なんだろう?
_________________
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-04-24 12:02
同じようなことがあってOracleConnectionをCloseでなくDisposeするようにしたらセッションが切れるようになったような覚えがある。
Connection Poolingの設定は別の人間がやってたので不明。(なので参考にならないかも)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-24 21:08
関連リンク:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38011&forum=7&4

_________________
kou
会議室デビュー日: 2005/10/14
投稿数: 4
投稿日時: 2007-04-24 22:15
Jitta様早速のレスありがとうございます。
また、日ごろから自身の調べモノについて結果的に、多々解決方法を(拝見させて)いただいているということでいつも(?)ありがとうございます。

接続文字列をデバッグ時に確認をしてみたのですが、同じ接続文字列にて接続しております。
http://support.microsoft.com/kb/899153/ja
このような記事も見つけたのですが、csc.exeが停止しているということは確認できませんでした。
続きのリンク先にあるよう、Oracleですと接続の種類が判別できるようなので一度調査してみたいと思います。

未記入様
OracleConnectionをDisposeする方法ですが、Closeした後に試してみたのですが以前aspnet_wpは接続されたままでした。
OracleConnectionをビジネスクラスのプライベート変数として使用しているのですが、ビジネスクラスごとDisposeしたらどうなるかというのを試してみたいと思います。

Connection Poolを使わないという方法は回避したいため、なんとかしたいと思っています。せっかく@itに投稿したことですし、いろいろ試してみたいと思っていますのでその都度報告させていただきます。


ちょっとした疑問なのですが、知っていればよろしくお願いします。
テストサーバーにてクリックワンスで発行するとwebサービスのプロセスはaspnet_wp.exeではなく、w3wp.exeが動作しているのですが、こちらの場合はWebサービスが止まるということはありません。
aspnet_wpに比べ、w3wp.exeのほうが性能が良いとかあるのでしょうか。。。
kou
会議室デビュー日: 2005/10/14
投稿数: 4
投稿日時: 2007-09-03 11:01
かなり日が空いてしまいましたが一応報告させていただきます。

件名の問題が起きていた点について、クライアント側からWebサービスを動作させサーバーへ問い合わせをし、サーバーから別のWebサービスの呼び出しを行なうところで発生しています。
また、この重複呼び出しのWebサービスはクライアントから呼び出されたWebサービスと同一サーバー内に存在するwebサービスであり、Oracleの接続を使いまわしています。

このようになった理由はメッセージ取得Webサービスとそれぞれの動作を行なうWebサービスを切り分け、何かしらのメッセージの取得には全て「メッセージ取得Webサービス」を通じて取得するよう行なっていたことによります。

これについて、サーバーからのメッセージの取得には「メッセージ取得Webサービス」を使用しないメソッドを用意することで対応するようにしました。


ここでひとつ気になることがあるのですが、WebサービスからWebサービスの重複呼び出しを行なうということは好ましくないことなのでしょうか?
いろいろ調べていた中で、「Webサービスを重複呼び出しした際に、重複呼び出しされた通信がいつ終わったのか分からない」というような内容があったと思ったのですが、そのようなことであれば通信が止まることに納得がいくのですが・・・記憶が定かではありません。
もし、上記問題について知っている方がいれば返答していただけると非常に勉強になります。
kou
会議室デビュー日: 2005/10/14
投稿数: 4
投稿日時: 2008-01-29 14:46
スレッドに上げさせてもらった問題は、回避策をとったため解決しているのですが、根本の原因について探していたところ、下記のようなホットフィックスが出いるようです。csc.exeの停止など現象が同じものではないかと思います。

http://d.hatena.ne.jp/Kazzz/20071022

せっかくですので是非。
1

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