私の ASP .NET MVC2 アプリケーションには、次の 2 つのコントローラー メソッドがあります。
public class MyController : Controller{
public ActionResult Optimization(...){
//long running optimization
//this method writes to the Session
}
public void StopOptimization(){
//user wants to stop the optimization
//no access to Session needed
}
}
したがって、長時間実行されている最適化を停止するには、「最適化」メソッドの実行中に ASP .NET MVC によって「停止」メソッドを通過させる必要があります。
コントローラ クラス全体で SessionSate が少なくとも「ReadOnly」に設定されている場合にのみ、リクエストを並列処理できることはわかっています。このブログ投稿の手順は既に実行しています。ただし、これは、データをセッションに書き込むことができなくなったことを意味します。これは、Optimization-Method で必要となります。
このため、このコントローラーから「停止」メソッドを削除し、追加のコントローラーに配置して、SessionState を「ReadOnly」に設定することにしました。
...
using Microsoft.Web.Mvc;
...
[ControllerSessionState(ControllerSessionState.ReadOnly)]
public class StopController: Controller
{
public void Stop()
{
//Stop long running optimization
}
}
ただし、停止要求は、他のコントローラーでの最適化が完了した後にのみ処理されます。さらに、各 ActionMethodのセッション状態を個別に定義できるカスタム コントローラー ファクトリを実装しようとしました。これについては、こちらで説明しています。私は ASP .NET MVC 3 を使用しておらず、ASP .NET MVC 2 と MVC Futures ライブラリを組み合わせて使用しているだけなので、これはうまくいきませんでした。
ユーザーが長時間実行されているメソッドをクライアント側から停止できるようにする Stop-Method を実装する方法を知っている人はいますか?