2009-03-23 16 views
1

シナリオ:WCFサービスは、クライアントからXDocumentを受け取り、それを処理し、MS SQLテーブルに行を挿入します。共有ホスティングのIIS/WCFでのスレッド/プロセスの最適なアプローチ

複数のクライアントが同時にWCFサービスを呼び出す可能性があります。通話には通常時間がかかりません(数秒)。

何か SQLテーブルをポーリングし、別のプロセスセットを非同期で実行する必要があります。 2番目のプロセスは何もコールバックする必要はなく、WCFには何らかの関係がありません。テーブルを読み込んで一連のメソッドを実行したり、Webサービスコール(レコードがあれば)を実行するだけですが、それだけです。 上記のサービスを利用するWCFサービスクライアントはこれを知らず、気にもなりません。

私はthis question in StackOverflowについて読んだことがありますが、Windowsサービスも理想的ですが、このWCFサービスは共有ホスティング(discountaspなど)でホストされるため、Windowsサービスのインストールはオプションになりません(私の知る限りでは)。

アーキテクチャが固定されている(I.E.:テーブルを変更することはできません。レガシーフォーマットからもWCFサービスのメカニズムを変更することもできます)、このテーブルをポーリング/処理するための提案は何ですか?

10分ごとに確認する必要があると思います。それは即座にする必要はありません。

ありがとうございました。

+0

私は共有ホスティング環境でこのようなことについて好奇心をそそられました。良い質問です! –

+0

解決策は、ブローダートが示唆したものと思われる。ほとんどの共有ホスティングでは、X分ごとに特定のURLを「起動」することができます。 –

答えて

3

チート。このプロセスを別のWCFサービスとして公開し、予定された時間にコントロール下のボックスからgoコマンドを起動します。

WCFでバックグラウンドスレッドを起動したり、キャッシュの有効期限を貧弱な人のスケジューラとして使用したりすると、Webサイトの次のヒットまでアプリプールがリサイクルされ、アプリプールが再びスピンアップするまで停止します。あなたがコントロールするマシンから少なくともリクエストを発したということは、リクエストがその方向で送られてきたため、10分ごとにアプリケーションプールが復旧することを意味します。

+0

何度か読んだ後、私はこのアイデアがうまくいかなかったと思っていました... WCFを公開して小さなアプリを持っていると自動的にプロセスが起動します:S私はそれが "クレイジー" –

1

Webアプリケーションは、一定の間隔で何かを実行するにはまったく適していません。要求が入っていない場合、アプリケーションにコードが実行されておらず、アプリケーションがしばらくの間アクティブでない場合、IISは次の要求が入るまで完全にシャットダウンすることができます。

アプリケーションによっては、何かが特定の間隔で実行されていることが重要ではなく、最近実行されたことだけです。これがアプリケーションの場合であれば、テーブルが最後にポーリングされた日時と、要求が繰り返されるたびにテーブルが再びポーリングされるのに十分な時間が経過したかどうかを確認することができます。

データベースの管理にアクセスできる場合は、SQL Serverにスケジューラがあります。アクセス権がある場合は、クエリ、ストアドプロシージャ、さらにはプロセスを起動することもできます(ただし、共有ホスティングではほとんどありません)。

特定の間隔でコードが必要で、サーバーにアクセスしてスケジュールを設定したり、サービスとして実行したり、SQL Serverスケジューラを使用できない場合は、単に実行できません。

0

アプリケーションプールを「常にアクティブ」にして、スレッドで何でもしてください。

関連する問題