2012-05-10 10 views
0

私が持っているものは、サーバーへの呼び出しを行うビューのAJAXフォームです。この呼び出しは、n個のタスクを実行します.nはデータベース内のレコードによって決まる番号です(通常は10レコード以下)。各レコードはTFSのBuild Definitionに対応しているので、これらのビルド定義をすべて取得し、TFSにキューイングし、各ビルドが完了するとUIが更新され、どのビルドが完了したかが分かります。非同期タスクでMVC3を使用してUIを更新する

残念ながら、これを行うにはどうすればよいかわかりません。私はこれらの線に沿って何かを考えていた:

 foreach (var dep in builds) 
     { 
      TFS tfsServer = new TFS(TFS_SERVER_ADDRESS); 
      IBuildServer buildServer; 
      int id = tfsServer.QueuBuild(dep.TeamProject, dep.BuildDefinition); 
      string teamProject = dep.TeamProject; 
      Task.Factory.StartNew(() => GetBuildStatus(teamProject, id, tfsServer)); 

     } 

であると呼ばれているタスク:

 private void GetBuildStatus(string TeamProject, int BuildID, TFS Server) 
     { 
      Server.GetBuildStatus(TeamProject, BuildID); 
      AsyncManager.OutstandingOperations.Decrement(); 
     } 

のすべてが持って構築されるまで、ここでの問題は私の完了メソッドが呼び出されますするつもりはないということです完了しました。一度に1つのUIにデータを戻す方法についてはどうすればよいですか? GetBuildStatusメソッドは次のように見えること

また、言及する価値がある:ビルドの期間は、この問題が発生している間、あなたが待っているブラウザを離れることができないHTTPリクエストのタイムアウトよりも長くなることを考えると

 do 
     { 
      var build = buildsView.QueuedBuilds.FirstOrDefault(x => x.Id == BuildID); 
      if(build != null) 
      { 
       status = build.Status; 
       detail = build.Build;  
      } 

     } while (status != QueueStatus.Completed); 
     return detail.Status.ToString(); 

答えて

1

。ページを返し、AJAXを使用してそのページから更新をポーリングする必要があります。通常、更新されたステータス情報を取得するために、サーバーに定期的にコールバックするようにするJavaScriptを使用します。

しかし、.NETを使用しているので、長いポーリング、サーバー送信のイベントまたはWebソケットを使用してサーバーからの更新を待つことができ、実装が簡単になるように試みることも考えられます。 NETのクラスとJavascript。

関連する問題