いくつかのレガシーASMXIISホストサービスがあります。クライアントアプリケーションは、Webサービスをサブスクライブまたはサブスクライブ解除します。Webサービスロジックの内部を介して、サブスクライブされたアプリケーションに定期的にメッセージを送信する必要があります。
長時間実行されるタスクの一部を実行するための最良の方法は何ですか?長時間実行されるタスクでスレッドを開くことは、IISで行うのは得策ではないことを理解しています。
ASMXサービスは、要求されていることを実行できません。クライアントにメッセージを送信することを決定することはできません。彼らができることは、クライアントがそれを要求した場合に応答することだけです。
ハックして、実行時間の長いタスクを開始する1つの方法と、タスクのステータスをポーリングする別の方法を考え出すことができます。これは機能しますが、高額になる可能性があります。
より良いモデルは、別のWindowsサービスで長時間実行されるタスクを実行することです。そのサービスに、メインサービス(クライアントと通信するサービス)によってのみ使用される単純なWCFサービスをホストさせます。メイン(WCF)サービスは、デュプレックスチャネルを使用してクライアントと通信します。そうすれば、実行時間の長いタスクの1つに関するニュースがあるときはいつでも、クライアントに「電話をかける」ことができます。
通常、結果をプッシュバックする方法がない場合は、長時間実行タスクの一意のIDを作成してクライアントに送り返し、その後、タスクを実行してデータベースなどにテーブルを作成します。タスクのステータスを保存します。クライアントは定期的にサービスをプルして、指定されたIDでタスクのステータスを確認します。タスクが完了すると、結果を取得します。また、IIS内でスレッドを実行してその役割を果たしてもまったく問題ありません。