- - PR -
Webサービスでの並行処理の制御
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-09 10:59
こんにちは。なぎと申します。
言語はVBです。 ASP.NETの2.0でWebサービスを作成しています。 そのWebサービスでは別の既製品の ライブラリを呼び出しています。 その既製のライブラリは内部でExcel起動しているため 並行処理に対応しておらず 並行処理(3つ以上)を行うとエラーが発生します。 そのためWebサービス側で処理数を制御しようと考えました。 当初、Global.asax内にPublic Sharedで変数を宣言し SyncLockを使用して制御しようと考えていましたが 実現できませんでした。 次にGlobal.asaxのApplication_OnStart内で アプリケーションオブジェクトに値を設定して制御しようと 考えましたが、これも仕様上実現できませんでした。 なぜ実現できないのか、どうすれば上記のような制御ができる様になるのか 色々調査してみましたが Webサービスについてまだまだ勉強不足な点が多く 手詰まり状態になってしまいました。 ご存知の方がいらっしゃれば 教えていただけないでしょうか。 よろしくお願いします。 | ||||
|
投稿日時: 2007-03-09 11:05
具体的にどうやったのかよく分からないのですが、 実現できなかったとはどういう状態ですか? 単一実行しかさせないなら一応はSyncLockでできるでしょうし、 同時実行数を制限するならセマフォとかでもできるでしょうし。 | ||||
|
投稿日時: 2007-03-09 11:25
なちゃさん
返信ありがとうございます。 分かりにくい説明で申し訳ありません。。。 具体的に実現できなかったというのは Webサービスの場合だと Global.asax内に変数を宣言しても 他のクラスからその変数を参照させる事ができなかったため 実現できませんでした。 Global.asax内のApplication_OnStartで アプリケーションオブジェクトに値を設定する件は 排他制御を行う際にアプリケーションオブジェクト 全体が使用できなくなるという事で 他の処理との関係上実現できませんでした。 | ||||
|
投稿日時: 2007-03-09 11:42
排他処理自体は、Application オブジェクトにフラグを入れておいて、それを Application.Lock/Applcation.Unlock して参照・更新する、などいくらでも方法があるし、大した困難はないはずです。
むしろ、そんなところよりエラー処理をきちんと考えておかないと駄目だと思いますよ。 特に、排他処理がクラッシュした後のリカバーが必要なのだとしたら、そっちの設計に心を砕くべきと思います。 | ||||
|
投稿日時: 2007-03-09 11:56
渋木宏明(ひどり)さん
返信ありがとうございます。 Application.Lock/Applcation.Unlockして参照・更新する事は アプリケーションオブジェクト全体が 使用できなくなるので他の処理との関係上、使う事ができません。 -------------------------------------------------------------------------------- むしろ、そんなところよりエラー処理をきちんと考えておかないと駄目だと思いますよ。 特に、排他処理がクラッシュした後のリカバーが必要なのだとしたら、そっちの設計に心を砕くべきと思います。 -------------------------------------------------------------------------------- ご指摘、ありがとうございます。 処理の実現ばかりに目がいってしまってました。 排他処理がクラッシュした後のリカバーなども含めて もう一度、設計から見直してみたいと思います。 [ メッセージ編集済み 編集者: なぎ 編集日時 2007-03-09 11:57 ] |
1