2016-10-19 3 views
2

私はメソッドに投稿された内容からデータベースにデータを挿入するWebAPIメソッドを作成しました。WebAPI:リクエストを処理しないように処理をプッシュするにはどうすればよいですか?

私の質問は、リクエスタが応答のためにぶら下がっていないように処理をオフにするにはどうすればいいですか?例えば

:私は作品を持って何

[HttpPost] 
[Route("MyTest/ImportData")] 
public HttpResponseMessage AddData([FromBody] XElement xmlBody) 
{ 
    try 
    {    
     // Verify that I can read the XML.. 

     // Push XML off to another process to insert into database. 
     UpdateDataBase(xmlBody); 

     // Notify requester that I accepted the file. 
     return Request.CreateResponse(HttpStatusCode.OK); 
    } 
    catch (Exception ex) 
    { 
     return Request.CreateResponse(HttpStatusCode.InternalServerError); 
    } 
} 

。ただし、すべてのデータを挿入するのに最大4分かかることがあります。私はXMLを読んで、何とかプロセスをプッシュして、ユーザーにOK応答を与えることを確認したいと思います。

+1

関連、デュープ選ぶだろう:http://stackoverflow.com/questions/36335345/web-api-fireを-and-forget – vcsjones

+0

もう1つの一般的な方法は、データをキューに送信して、メソッドが非常に迅速に戻るようにすることですが、キューを監視するプロセスには常に必要な時間があります。 – Crowcoder

+1

200 OKではなく、HTTP 202 Acceptedステータスコードを返すべきだとコメントしています。 202は作業がまだ完了していないが、ある時点で完了したことを示している。 – juunas

答えて

2

他のプロセスに作業を委任します。

あなたが望むものであれ、サービスであれ、コマンドラインアプリであれ、何でもよい。

私はメッセージングシステムをセットアップし、webapiにこれらのすべての作業アクションをキューに送信させ、次にこのキューを処理するWindowsサービスを用意します。これにより、apiの圧力が解放され、長時間実行されるタスクが完了するのを待たずに他のリクエストを処理させます。これ以上複雑である必要はありません。提案として

は、RabbitMQのはまっすぐ前方かなりですが、私はあなたの周り見てください、あなたが好きな

+0

どのタイプのキューですか? – PrivateJoker

+0

は、メインの応答に提案を追加しました –

関連する問題