2017-06-18 12 views
0

私は2つのWebページを持っています。あるページでは、ファイルをアップロードしてそのデータを処理しているため、完了までに時間がかかります。他のページでは、データをデータベースにレンダリングするだけです。 私はこのアプリケーションをC#mvcで実装しました。 私の要件は、ユーザーがファイルをアップロードするとファイルの処理がバックグラウンドで開始され、ユーザーが他のページをナビゲートできることです。非同期コントローラ

これを非同期コントローラで実現できますか?

答えて

0

データの処理には多くの時間がかかります。非同期コントローラを使用すると、Webサーバーを解放して他の要求を処理できますが、要求は同期的に呼び出されるのと同じ時間に完了します。 (ソース:https://msdn.microsoft.com/en-us/library/ee728598%28v=vs.100%29.aspx

待機する必要がない場合は、ジョブキューをスタックに追加し、ファイルを受け入れたことをユーザーに通知して処理を行い、操作が完了したら通知します。

.NETで利用可能なジョブキューの実装はたくさんあります。具体的な提案は、「フル」.NETまたは.NET Coreで実行しているかどうかによって異なります。

+0

リクエストが非同期コントローラの実装によって処理されている間に、ユーザーは他のページをナビゲートできますか?この時点で疑問があります。ユーザーが他のページにナビゲートするかどうか分かりますが、他のコントローラの別のアクションメソッドにヒットしますので、処理は非同期コントローラから停止されます。 –

+1

修正。あなたがしたいことは、非同期コントローラではできません。ジョブキューの種類には1つのオプションがあります。あるいは、Mattが上に書いたように、別のサービスがフォルダ/データベースの内容を確認し、処理することがあります。これは実質的にジョブキューの一種です。 –

0

ここでは、非同期コントローラを使用することはできませんが、最初のステップとして使用する必要があります。非同期コントローラは、より多くのリクエストを処理できるように、サーバースレッドを解放するだけです。非同期なしでは、長時間実行される操作は、使用しているスレッドをブロックし、処理中の他の要求を停止します。実行時間の長いスレッドが十分にある場合、他のクライアント要求は拒否されます。

また、ファイルを処理するための別のメカニズムを調べる必要があります。たとえば、APIアクションではファイルをフォルダに格納し、別の(Web以外の)プロセスではそのフォルダを監視できます処理する新しいファイルを取得します。キューイングまたはメッセージバスの技術を見ることもできますが、複雑さが増すだけでなく、キュー処理に関する安全性も向上します。

検証の問題やエラーをアップロードクライアントに報告する方法は、APIアクションでいくつかのチェックを行うことができますが、エラーの発生時にクライアントに通知する方法を検討する必要がありますファイルの処理。これを最もうまくいく方法は、システムによって異なります。

+0

はい、私は別の非ウェブサービスを使ってさらに処理することができます。しかし、私は可能ならば他の選択肢も探していました。 dot net mvcの同じWebプロジェクト内で他の実装を提案できるかどうか教えてください。また、あなたの質問に答えるために、私がエラーについてどのように通知するかは、エラーと成功の場合にユーザーにメールを送信していることです –

関連する問題