これが私の謝罪の前に尋ねられ、これが .NET 2.0 ASMX Web サービスである場合、再び私の謝罪 = D
Web サービスのみを公開する .NET アプリケーション。1 日あたり約 1,000 万のメッセージが、複数の IIS サーバー間で負荷分散されます。各受信メッセージは XML であり、送信メッセージは XML です。(XMLElement) (ステロイドで動作する強力なサーバーがあります)。
すべてのメッセージが X 秒以内に処理されるという SLA があります。
処理中の 1 つの関数 Linking Methods に 10 ~ 20 秒かかるようになりました。これはすべてのトランザクションで必要ですが、Web サービスが結果を返す前に実行することは重要ではありません。このため、別のスレッドに投稿することを提案しましたが、私の言葉とその背後にいる熱心な開発者がこれを十分に考えていなかった可能性があることに気付きました.
以下の例は、左側に現在の流れを示しています。右側に何が試みられているか
事実上、私が探しているのは、Web サービスが完了した後でも実行される長時間実行 (10 ~ 20 秒) のスレッドを Web サービスに生成させることです。
これは、事実上、起こっていることです:
Thread linkThread= new Thread(delegate()
{
Linkmembers(GetContext(), ID1, ID2, SomeOtherThing, XMLOrSomething);
});
linkThread.Start();
これを使用して、開発ボックスでの時間を 19 秒から 2.1 秒に短縮しました。これは非常に重要です。
私たちが得るトラフィックの量を考えると、ベンダー/外部の当事者が私たちを抑制しようと決めた場合、IIS は処理が完了する前にそれらのスレッドをリサイクル/強制終了することを決定する可能性があるのではないかと心配しています. 私たちのソリューションが「最善」ではないかもしれないことに同意しますが、これを処理するためにキュー システムや別の Windows サービスを構築する時間がありません。
これを行うより良い方法はありますか?考慮すべき注意事項はありますか?
ありがとう。