- - PR -
Webサービス内での情報保持方法
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-21 14:17
Webサービスで非同期処理を実現したいと考えています。
WebサービスからDLLを呼び出し、DLLでの処理経過をコールバックしてWebサービス内で保持する仕様を考えています。 ここで、壁にぶち当たりました。 コールバックで返された情報をWebサービス内で保持するいい方法はないでしょうか? 他のスレッドでも議論されているように、static変数を使用して情報を保持するとあるタイミングで初期化されてしまいます。(確認済み) また、static変数を使用せずにApplicationオブジェクトを使用する方法が提示されていますが、staticメソッド(コールバック関数)からApplicationオブジェクトにアクセスすることができません。 このような場合、Webサービス内で情報を保持するには、ファイルやDBなどの外部媒体で行うべきなのでしょうか? パフォーマンスなどを考えると、あまりやりたくありません。 いい方法をご存知の方、アドバイスしていただけないでしょうか。 以上、よろしくお願い致します。 | ||||||||
|
投稿日時: 2006-11-21 15:01
この時点で既に無謀。IISがWEBサービスのインスタンスをいつ生成して、いつ破棄するのか完全に把握しているか、あるいは制御できない限り、スレッドを安全に動作させる事は出来ませんよね。それとも私が知らないだけで、何処かにそのような資料があるのでしょうか?
DLL内のスレッドを安全に実行できるなら、同様の方法でデータを管理したら良いのでは?MemoryMappedFileとか、方法はいろいろあると思う。 | ||||||||
|
投稿日時: 2006-11-23 00:01
DBに保存すると、何かとおトクです。 Javaの場合ですと、「EJBを使う」という方法もあるのですが、DLLと書かれていることは .NETなのでしょう。(J2EEのEJBに相当する機能は.NETにあるのでしょうか?>識者の方) Webサービスということは、XMLに変換したり、XMLをParseするオーバーヘッドが かかりますので、そのことを考えると、10万件のデータの処理をする等でなければ DBアクセスでのパフォーマンスの低下はそんなに気にならない程度と思います。 staticやApplicationオブジェクトなどメモリに保持する方法の場合、セッションが 増えればその分メモリが圧迫されてしまいます。32bitIAサーバの場合、プログラムの 作りを慎重に考えながらでないと、わりとすぐにOutofMemoryになってしまいます。 DBに保持する場合、解析したXMLをDBに渡したり、DBからXMLに変換するだけですので メモリはあまり必要としません。それに、Webサービスを行うサーバを複数たてて ロードバランスやフェールオーバーを行うようなことも容易にできます。 セッションIDをキーとしてDBにワークファイルとして書きに行けば良いだけですから。 |
1