私はあなたが私の別の質問のいくつかで読むかもしれない長期実行オペレーションを持っています(あなたの参照のためにここに最初と2番目があります)。
取引全体の最初に、プロジェクトは、ユーザーが XML ファイルに関するすべての必要な情報を指定し、XML ファイル自体をアップロードする必要があるフォームを公開します。その方法では、すべてのユーザー入力データがキャッチされ、そのようなファイルのキングを処理する WCF サービスに送られました。コントローラは、そのような処理のタスク ID のみを取得しました。その後、ユーザーは進行状況バーのページにリダイレクトされ、タスクの完了状況を定期的に取得し、進行状況バーを更新します。
だからここに私の問題があります。XML ファイルの処理が終了した場合、結果を取得してユーザーに表示するにはどうすればよいですか?
HTTP がステートレス プロトコルであることは知っていますが、この状況で役立つ Cookie メカニズムがあります。もちろん、処理結果を一時的な場所 (WCF サーバーの静的クラスなど) に保存することもできますが、サービスの負荷が高いため、提供されたメモリがすべて消費されます。
つまり、タスクを (netNamedPipeBinding を使用して) WCF サービスに渡し、できるだけ早く結果を受け取りたいと考えています。一時的な保存結果をいくつかのバッファーにエスケープし、クライアントがそれを収集するまで待ちます。
私が行っている限り、サービス側ではなくクライアント側で一時バッファを使用しています:
using (XmlProcessingServiceClient client = new XmlProcessingServiceClient())
{
client.AnalyzeXmlAsync(new Task { fileName = filePath, id = tid });
client.AnalyzeXmlCompleted += (sender, e) =>
{
System.Web.HttpContext.Current.Application.Lock();
// here is I just use single place for all clients. I know it is not right, it is just for illustrating purposes.
System.Web.HttpContext.Current.Application["Result"] = e;
System.Web.HttpContext.Current.Application.UnLock();
};
}