あなたは合理的な解決策を提案しますが、私は代替策を考えることができます。スレッドを扱うことは、ASP.NETアプリケーションで苦労する可能性があります。不可能ではないが痛み。タスクを独立したアイデンティティーで実行できるようにスレッドを作成していますか、タスクが長時間実行される可能性があるか、またはその両方ですか?もう一つ考慮すべき点は、ユーザーを認証する方法です。 ASP.NETで別のユーザーアカウントを偽装する方法を知る必要があります。
負荷やその他の要因によっては、キューをアプリケーション(データベース内、またはMSMQ、Rhinoキューなどを使用する)に導入する方がよい場合があります。リクエストが有効になったとき。 OKであれば、それをキューにダンプし、相関IDをクライアントに返します。クライアントは、このIDを使用してタスクのステータスを確認できます。
キューをデータベースに格納することも、特定のキューイングAPI /システムを使用することもできます。スケジュールされたジョブまたはWindowsサービスとして実行される個別のアプリケーションを作成します。このアプリケーションは、Webサービスを呼び出すクライアントとは別のIDで実行され、他のスレッドで行う作業を行います。キューに入れられた作業が完了すると、データベースはステータスで更新されます。
このようにすることで、ASP.NETアプリケーションに特別なコードを作成することを避けることができます。タスクが失敗した場合、設定しているサードパーティのアプリケーションがオフラインであるとしたら、操作を再試行することができます。私はこの方法も監視しやすくなっています。アプリケーションがオフラインの場合、アプリケーションをあまりにも難なく受け入れ続けることができます。
ブライアン私はこれが移動するための方法かもしれないと思っていたコメントに基づいて:ASP.NETのWeb UI <-> WCFサービス<->キュー<->サービス(プロセス・タスク)非常に良い提案のように聞こえる – ServerMonkey