共有ホスティングでは、IIS / WCFの下にスレッド/プロセスを発射するための最良のアプローチ

StackOverflow https://stackoverflow.com/questions/673402

質問

シナリオ:WCFサービスは、クライアントからXDocumentを受け取り、それを処理し、MS SQLテーブルの行を挿入

複数のクライアントが同時にWCFサービスを呼び出すことができます。コールは、通常は長い(数秒)を取ることはありません。

今、私はの何かのSQL表をポーリングし、非同期な方法でプロセスの別のセットを実行する必要があります。 第二のプロセスは何かをコールバックする必要はありませんも任意の方法でWCFに関連しています。それだけで(もちろん、レコードがある場合)表を読んで、一連のメソッドと、おそらくWebサービスの呼び出しを実行する必要がありますが、それがすべてです。 上記のサービスを消費するWCFサービスのクライアントは、このの見当がつかないし、それを気にしないでください。

私はについて読みましたStackOverflowのとIで、この質問はまた、(Windowsサービスが理想的であるが、このWCFサービスは、共有ホスティング(discountaspまたは類似の)上でホストされるため、Windowsサービスをインストールすることは選択肢ではないだろうことを知っています私の知る限りでは)。

/プロセスにこの表をポーリングするためにあなたの提案であるもの、(私はテーブルを変更することはできません、それは従来の形式から来て、またWCFサービスの仕組みを変更するIE)

アーキテクチャは固定されていることを考えると? >

私はそれが10分ごとかそこらを確認する必要があると思います。それはインスタントである必要はありません。

感謝します。

役に立ちましたか?

解決

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

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

他のヒント

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

一部のアプリケーションでは、最近実行された唯一のこと、何かを特定の間隔で実行されていることは全く重要ではありません。それはあなたのアプリケーションのためのケースであれば、あなただけのテーブルが最後にポーリングされたときを追跡することができ、そしてテーブルが再びポーリングするためにすべての要求のチェックのために十分な時間が経過している場合。

あなたは、データベースを管理するアクセス権を持っている場合は、

、SQL Server内のスケジューラがあります。これは、クエリ、ストアドプロシージャを実行し、さらにはあなたが(ただし、共有ホスティングではほとんどありません)権限を持っている場合のプロセスを開始することができます。

あなたが特定の間隔でコードを必要とし、あなたがそれをスケジュールするか、またはサービスとしてそれを実行するサーバーにアクセスすることができない、またはSQL Serverスケジューラを使用することができない場合は、

、それは単になんとかではありません。

あなたのアプリケーションプール「常にアクティブ」作成し、あなたのスレッドをやりたい。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top