2012-03-29 11 views
0

私は重要なサーバー側のデータ操作と作業を含むアプリケーションを開発中です。私は、この仕事に関連して更新された一定のステータスとエラー報告をクライアントに提供したいと思います。MSoftは、MVC3アプリケーションで使用するサーバー側エラープラグインまたはツールの永続的なクライアント側エラー報告を提供していますか?

クライアントは、たとえば、アップロードしたデータに基づいて、サーバー側を実行しているジョブまたはジョブのバッチを起動できない可能性があります。その後、彼は仕事が引き続き実行されている間に、サイト上で他の作業を進めるかもしれません。

MSoftはステータス更新とエラーレポートをクライアントに表示するための素晴らしいツールを提供していますか?私は何かのポーリングjavascriptアプリ、またはおそらくあらかじめ定義されたサブフォームなどを想像してください。これはフッターに座ったり、適切なときに画面の角に動的にロードされたりする可能性があります。

これを考えると、この種のツールの他の実装は、最新であり、活発なサポートがある限り、おそらく私はうれしいでしょう。

+0

ASP.NET MVC3には、バックグラウンドプロセスをスピンアップして実行を継続できるという点で非同期サポートはありません。 aspnetワーカープロセスは、すべての非同期プロセスが完了するまでブロックされます。ただし、要求を登録してWindowsサービスで処理し、データベースに状態を記録させることができます。 MVCアプリケーションは要求IDに基づいてステータスをポーリングできます。 – tawman

答えて

1

レポートを更新するのと同様の要件がありましたが、制限が実現するまで非同期コントローラのルートがダウンしました。私は、ASP.NET MVC3アプリケーションからレポートの最新表示を登録し、処理のために2分ごとに要求をポーリングするWindowsサービスを作成するソリューションを実装することに決めました。

ビュー

$("#btnRefresh").live("click", function(e) { 
    $.ajax({ 
      type: "POST", 
      url: '@Url.Action("Refresh")', 
      data: "[email protected]" 
     }) 
     .done(function(message) { 
      alert(message); 
     }) 
     .fail(function(serverResponse) { 
      alert("Error occurred while processing request: " + serverResponse.responseText); 
     }); 

    e.preventDefault(); 
}); 

コントローラーアクション

[HttpPost, VerifyReportAccess] 
public ActionResult Refresh(Guid reportId) 
{ 
    string message; 

    try 
    { 
     message = _publisher.RequestRefresh(reportId); 
    } 
    catch(Exception ex) 
    { 
     HttpContext.Response.StatusCode = (Int32)HttpStatusCode.BadRequest; 
     message = ex.Message; 
    } 

    return Json(message); 
} 

リポジトリ

public string RequestRefresh(Guid reportId) 
{ 
    var scheduledReport = _repository.GetScheduleForReport(reportId); 

    if (scheduledReport.CompanyId == Guid.Empty) 
     throw new Exception("Requested Report Not Found"); 

    if(_repository.CheckPendingRefresh(scheduledReport)) 
     return "A request to refresh this report is already pending."; 

    _repository.ScheduleReportRefresh(scheduledReport); 

    return "A request to refresh the report has been submitted. The report will appear online when available."; 
} 

Windowsサービスは、レポートをリフレッシュするために毎晩ETLプロセスと同じクラスライブラリのコードを実行します。

+0

websyncはどのように仕事をしていますか? – blueberryfields

関連する問題