2012-04-04 5 views
1

Kann jemand mir ein gutes Muster erklären, das benutzt wird, wenn asynchrone HTTP-Handler in F # kodieren?Muster zum Implementieren von asynchronen HTTP-Handlern in F #?

Ich muss IHttpAsyncHandler implementieren und diese Schnittstelle erfordert eine BeginProcessRequest und EndProcessRequest.

Gibt ich zurück Async.StartTask? Wie gehe ich mit state:obj und AsyncCallback um?

Antwort

3

Aus der Spitze von meinem Kopf: implementieren Handler Asynchron-Workflow und dann setzen Sie es mit 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

Was versuchen Sie, genau das zu tun? Wenn Sie in der Lage sind, können Sie die HttpMessageHandler und ihre Art von System.Net.Http betrachten. Sie müssen nur die

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

Methode außer Kraft zu setzen, die mit einem async { ... } |> Async.StartAsTask einfach. Sie erhalten auch besseren Zugriff auf die verschiedenen Attribute von HTTP durch statische Typisierung. Mit verschiedenen Unterklassen können Sie entweder ASP.NET, WCF (Self-Host) oder sogar Drittanbieterplattformen wie OWIN ausführen.

+0

Ich versuche eine JSON-Anfrage zu erstellen, die viele Statistiken enthält, sie analysieren und an einen Blob in Azure anhängen. – Henrik

+0

Grundsätzlich ist die einzige Möglichkeit, die ich jetzt kenne, eine neue leere ASP.Net-Website in Azure zu erstellen - sonst könnte ich vielleicht eine Arbeiterrolle verwenden? Aber wie stelle ich das mit HttpMessageHandler auf? – Henrik

+0

Weitere Informationen finden Sie hier: http://blogs.msdn.com/b/uscloud/archive/2012/03/22/windows-azure-for-the-asp-net-developer-series.aspx . 'HttpMessageHandler' ist nur das Kernelement, aber Sie können andere Optionen verwenden. –

Verwandte Themen