0

ファイル処理を処理するWebサービスを作成しています(これは時間がかかることがあります)。また、Webサーバーがあまりにも多くのファイルを処理しないようにすることで、ファイルを一度にメモリに保存します。長時間実行するWebサービス操作をホストする

これを達成するには、ユーザーがファイルをアップロードできるようにして、すぐにAzure BLOBストレージに入れ、そのファイルのIDをユーザーに与えます。

ファイルがバックグラウンドで処理キューに追加されると(別のアプリケーションによって処理されます)、完了したら出力ファイルを紺色に追加し、完了した操作を反映するようにデータベースを更新します。

私は、ファイルを正常にアップロードした時点で与えたIDを使用して、「自分のファイルはまだ用意されていますか?私に"。

これは許容される方法ですか?

最初は、操作全体が完了するのを待たなければならなかったので、はるかにクリーンでしたが、うまく調整できないように感じました。

私が考えていたのは、ファイル処理コンポーネントをリクエストから切り離してファイルを処理キューに入れると、すぐに処理されるかもしれませんが、数分かかることもあります。 Webサービスの取得 - 最悪の場合、自動スケーリングを実装していないと時間がかかることがあります)、Web要求を潜在的に非常に長い間ぶら下げてしまうことに懸念がありました。

私はこれを工学的に工夫していますか、これは賢明なアプローチですか?

+1

これは分かりやすいアプローチです。 –

答えて

1

これは非常に賢明なアプローチです。実際、RESTは具体的には応答コード202 Acceptedでこれに対応しています。

詳細はAsynchronous RESTを参照してください。

は、要約すると、ユーザーが元の要求を送信したときにちょうど彼らにファイルのID、リターン・ステータスコード202 Acceptedを与えていない、

  1. をし、一時的なリソースのURIにLocationヘッダを設定し、それらリクエストがコンプがあるとき、それは
  • 「進行中」であるか、単にことを完成にETAが含まれている場合があり、この一時的なリソースで要求状態に
    1. 体を得るためにポーリングすることができますそのURIは303 See Otherを返す必要があります。ロケーションヘッダーは実際にファイルを取得できるURIに設定されています。
  • 関連する問題