2012-04-04 22 views
1

誰かがF#で非同期のHTTPハンドラをコーディングするときに使う良いパターンを教えてもらえますか?F#で非同期のHTTPハンドラを実装するためのパターン?

IHttpAsyncHandlerを実装する必要があり、そのインターフェイスにはBeginProcessRequestEndProcessRequestが必要です。

Async.StartTaskを返信しますか? state:objAsyncCallbackを処理するにはどうすればよいですか?私の頭の上オフ

答えて

3

:非同期ワークフローを使用してハンドラを実装して、正確に、Async.AsBeginEnd

open System 
open System.Web 

type HttpAsyncHandler() = 

    let processRequestAsync (context : HttpContext) = async { 
     // TODO: implement 
     return() 
     } 

    let beginAction, endAction, _ = Async.AsBeginEnd(processRequestAsync) 

    interface IHttpAsyncHandler with 
     member this.BeginProcessRequest(context, callback, extraData) = beginAction(context, callback, extraData) 
     member this.EndProcessRequest(iar) = endAction (iar) 
     // other members omitted 
1

で何をしようとしていることを暴露?できる場合は、HttpMessageHandlerとそのilkをSystem.Net.Httpから考えてください。 async { ... } |> Async.StartAsTaskで簡単に

protected abstract Task<HttpResponseMessage> SendAsync(
    HttpRequestMessage request, 
    CancellationToken cancellationToken); 

の方法を上書きするだけで済みます。静的な型指定によって、HTTPのさまざまな属性にアクセスすることもできます。さまざまなサブクラスを使用すると、ASP.NET、WCF(自己ホスト)、またはOWINのような3部構成のプラットフォームでも実行できます。

+0

私は、多くの統計情報を含むJSONリクエストを取得しようとしています。解析し、Azureのブロブに追加します。 – Henrik

+0

私が今知っている唯一の方法は、Azureで新しい空のASP.Net Webサイトを作成することです - それ以外の場合はおそらく私はワーカーの役割を使うことができますか?しかし、どうすればHttpMessageHandlerでそれを設定できますか? – Henrik

+0

詳細については、こちらをご覧ください。http://blogs.msdn.com/b/uscloud/archive/2012/03/22/windows-azure-for-the-asp-net-developer-series.aspx 。 'HttpMessageHandler'は最も重要なメンバーですが、他のオプションも使用できます。 –

関連する問題