2012-04-04 84 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及其同類System.Net.Http。你只需要覆蓋

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

方法,這是很容易與async { ... } |> Async.StartAsTask。通過靜態類型,您還可以更好地訪問HTTP的各種屬性。各種子類允許您通過ASP.NET,WCF(自主),甚至第三方平臺(如OWIN)運行。

+0

我正在嘗試使用包含大量統計信息的JSON請求,解析它並將其附加到Azure中的blob。 – Henrik 2012-04-05 07:20:07

+0

基本上我現在知道的唯一方法是在Azure中創建一個新的空的ASP.Net網站 - 否則我可以使用一個工作者角色?但是我怎麼用HttpMessageHandler來設置呢? – Henrik 2012-04-05 09:15:44

+0

您應該可以在此處找到更多信息:http://blogs.msdn.com/b/uscloud/archive/2012/03/22/windows-azure-for-the-asp-net-developer-series.aspx 。 'HttpMessageHandler'只是最核心的成員,但你可以使用其他選項。 – 2012-04-10 03:08:23