在F#中实现异步http处理程序的模式?

时间:2012-04-04 14:14:06

标签: asp.net f#

在F#中编写异步http处理程序时,有人能告诉我一个好的模式吗?

我必须实施IHttpAsyncHandler,该界面需要BeginProcessRequestEndProcessRequest

我是否会返回Async.StartTask?如何处理state:objAsyncCallback

2 个答案:

答案 0 :(得分: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 :(得分:1)

你到底在想做什么?如果您有能力,您可能需要考虑来自HttpMessageHandlerSystem.Net.Http及其同类。您只需覆盖

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

方法,使用async { ... } |> Async.StartAsTask很容易。您还可以通过静态类型更好地访问HTTP的各种属性。各种子类允许您通过ASP.NET,WCF(自托管)或甚至第三方平台(如OWIN)运行。