- - PR -
webサービスの非同期メソッドの実装について
«前のページへ
1|2|3
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-05-28 11:58
渋木宏明(ひどり)様、
かめたろ様 ご回答ありがとう御座います。 当方、SQLSERVER2000に対する知識が、VS(VSも全くですが・・・) に対する知識よりも更に浅く、 お二人のおっしゃる、ジョブ登録について理解できておりません。 (コードから行う方法など) ジョブ登録について調べてみようと思います。 渋木宏明(ひどり)様のおっしゃる、
についてですが、 クライアントから非同期でWEBサービスメソッドを呼出す ↓ 呼出されたWEBサービスメソッド内で、ExecuteNonQuery() を行うThread を作成 ↓ ExecuteNonQuery()の結果を待たずに、応答をクライアントへ返す。 ↓ ExecuteNonQuery()の結果を記録するテーブルを作成し、記録 ↓ クライアントから定期的にその結果テーブルを参照し結果を得る。 以上の部分のThreadがWindowsサービスに置き換わるイメージでしょうか? 皆様、親切に回答していただき、本当に助かります。 WEBサービス・IIS・SQLSERVEERに対する知識不足を痛切に感じております・・・ | ||||||||||||
|
投稿日時: 2007-05-28 12:19
そうです。 thread は必要な処理を実行し終わる前に制終了されてしまう可能性があるので、IIS とは別のプロセスで処理を実行する、というのが趣旨です。 個人的には、それを行うのには Windows サービスが妥当と考えたので「Windws サービス」を挙げました。 | ||||||||||||
|
投稿日時: 2007-05-28 14:04
あ、誤解してるかもしれないです。 私が言っている「ジョブを登録」ってのは、ジョブ管理テーブル(自前のテーブルです)に"依頼を受付けた"って情報をINSERTするだけのことです。んで、後の事はデータベースの機能を使って、定期的に"依頼を受付けた"ってのをSELECTしてHITしたのを処理すればいいかなと考えました。 1レコードをINSERTするだけならそんなに時間はかからないだろうから、サーバ側を非同期にするまでもないのかなぁと。 その時間すら許容できないほどシビアなのであれば、このやり方は使えませんが。 「データベースのジョブスケジュール」ってのは、SQLSERVER2000のSQLServerエージェントのジョブに相当するモノのつもりで書きました。上のジョブとは全くの別物です。 分かりにくい書き方になっちゃってすみません。
あー・・・。確かにそうですね。クライアント側・サーバ側がごっちゃになっちゃってました。ごめんなさい。
別threadで時間の掛かる処理をしてる箇所があるのを思い出しました・・・。やべぇ・・・。 | ||||||||||||
|
投稿日時: 2007-05-28 22:09
ご指摘ありがとうございます。 どうやら以下にも、ASP.NET でマニュアルでのスレッド作成は避けるべきとありました。 http://msdn2.microsoft.com/en-us/library/ms998549.aspx 「Threading Explained」「Threading Guidelines」の項。 周辺を拾い読みしたところ、代わりに Thread Pool を使用すればよいとあるようです。これがプロセスの再起動に対処できるのかどうかは分かりませんが。 _________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2007-05-28 22:50
現在ストアドのパラメータ(sqlcommand)
としてWEBサービスメソッドにパラメータを持たせていますが、 Windowsサービスでは整数値以外のパラメータを受け取る事ができない ようですので(間違えた認識かも・・・)、 Windowsサービス内でExecuteNonQuery() を行うように実装 する場合、パラメータをどのように渡すかを考えなければいけないようですね。 またひとつ悩みどころが・・・ |
«前のページへ
1|2|3