- - PR -
Webサービスに対する同時リクエストの問題
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-04-03 01:51
Webサービスの開発をしていますが、クライアントから同時に複数のリクエストを受けた場合に、不具合が発生して大変困っています。
プログラムは、一部省略しますが以下のようになります。 01: [WebMethod] 02: public string SampleMethod(string clientID) 03: { 04: DataSet ds = new DataSet(); 05: (データ取得処理 〜省略します) 06: DataView dv = ds.DefaultView; 07: string filter = "ClientID=" + clientID; 08: dv.RowFilter = filter 09: 10: (dv を使った処理 〜省略します) 11: 12: if ( !dv.RowFilter.Equals(filter) 13: Deubug.WriteLine("Error"!") 14: 15: (以下、省略します) 14: } この処理に対して、同時にリクエストを投げると、想定外の動きをしたり、エラーが発生したりします。どうやら、8行目で設定したRowFilter条件が、それ以後の処理で他のリクエストのRowFilter条件になっていました。 そこで念のため、12〜13行目の処理を追加したのですが、条件を満たして、13行目を処理してしまいます。 おそらくこれはマルチスレッドにおける問題?と思います。とはいえ、いろいろなサンプルを見ますが、特にそのような考慮をしているものも見かけません。 クライアントからの要求毎に、インスタンスを生成するのか、あるいはマルチスレッドとして動作するのか、などイマイチ概念を理解していなかったのがいけないのですが...。 皆さんはこのような現象が発生した事はないでしょうか。また、何かこの件に対する対策など、何でも構いませんので情報を頂ければ助かります。 これにあわせ、Webサービス(Webアプリケーション)のリクエストに対して、サーバー側のインスタンスとスレッドの関連について、情報がありましたらあわせてご教授いただけると幸いです。 | ||||
|
投稿日時: 2005-04-03 11:13
そんなことがおきちゃうのですか。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwebhttpapplicationstateclasslocktopic.asp これは役に立ちますでしょうか。 | ||||
|
投稿日時: 2005-04-03 16:44
ここ、コンパイルが通らないと思いますけど? インスタンスの怪しいところはここだけなので、DefaultViewManagerを使わず、ViewManagerの新規インスタンスを生成するようにしてみてはどうでしょう? _________________ | ||||
|
投稿日時: 2005-04-03 18:03
提示されていないコードで、Applicationオブジェクトを使ってたりしてない?
_________________ たつごろー codeseek こみゅぷらす | ||||
|
投稿日時: 2005-04-07 17:47
皆様、いろいろとご指示いただいてたのに、返信が遅れすみません。
たつごろーさんのおっしゃる通り、実は Application オブジェクトを使用していました。サンプルで掲載したソースコードでは複雑になるので省略していたのですが、DBへアクセスしてDataSet を取得するクラスを使っていました。 このクラスでは、アクセス頻度の高いデータは、Application オブジェクトに DataSet を格納し、2度目以降にリクエストでは、この DataSet の参照を戻していました。 ですので、結果的に複数のリクエストがあると、それぞれのリクエストで同一の DataSet を参照していたので、Filter 条件がおかしくなっても当然でした。 この独自のキャッシュもどきの処理をやめたら、まったく問題なく動作するようになりました。 皆様のおかげで大変助かりました。 今後もよろしくお願いします。 | ||||
1
