2009-08-06 11 views
1

[OK]を、ので、私はいくつかの処理をやって起動するbacgroundワーカースレッドを開始しますが、経由して、元のワーカースレッドを監視する別のコール(Call2)を持っていると思いWebサービスでCall1を持っています参照?背景ワーカースレッド

これを行う方法に関するご提案はありますか?私は本当に私の処理を行うためにWinServiceから離れたいと思っています。よりリアルタイムにするために必要なので。

+0

私は、Call2がスレッドを「監視」することをあなたが理解しているかどうか分かりません。 Call2が、スレッドが行っているタスクに関連する進行状況を確認し、呼び出し元に報告することを意味しますか? – AnthonyWJones

+0

それは私が必要としていることをexacly。私は私がここで答えを見つけたと思う... http://stackoverflow.com/questions/228775/net-web-service-backgroundworker-threads –

+0

これは動作しますが、Call2からそのスレッドをチェックする良い仕掛けをハイブにしません。 。 –

答えて

2

なぜサービスアプリケーションを使用するのが問題なのか分かりません。サービスは常に実行され、リアルタイムで監視することができます。

しかし、あなたが本当にその道を行くにしたくない場合は、他のオプションがあります。新しいスレッドを開始するには、ThreadPoolを使用するか、新しいスレッドを手動で開始します。そのスレッドは、Webサービスが実行されているアプリケーションプールのバックグラウンドで実行されます。

このためにタスクスケジューラライブラリを使用できます。これについてはQuartz.netをチェックしてください。

はIISがそれを決定した場合、Webサービスの実行はいつでも殺さすることができるアプリケーションドメインが必要なので、ジョブが完了するという保証がないことに注意してください。サービスアプリケーションを使用するとこれが修正されます。

+0

私はアプリのドメインの問題については考えていませんでした。あなたは正しいのですが、これはまったく節約されません...新しい仕事のためにDBをチェックするタイマーに頼るのではなく、Windowsサービスにダイレクトイベントを送るのはいかがですか? –

+1

.NET 3.5の場合は、WCFを使用してサービスアプリケーションで直接Webサービスをホストすることができます。そうすれば、サービスと直接関係するメソッドを直接公開することができます。それがオプションでない場合は、Remotingを使用してWebサービスからサービスアプリケーションと通信できます。これはあまり難しくありませんが、WCFのアプローチよりも不器用です。 –