F# で非同期 http ハンドラーをコーディングするときに使用する適切なパターンを誰か教えてもらえますか?
実装IHttpAsyncHandler
する必要があり、そのインターフェイスにはBeginProcessRequest
andが必要EndProcessRequest
です。
戻りAsync.StartTask
ますか?とをどのように処理state:obj
しAsyncCallback
ますか?
頭のてっぺんから:非同期ワークフローを使用してハンドラーを実装し、それを 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
正確に何をしようとしているのですか?HttpMessageHandler
可能であれば、からのとその同類を検討することをお勧めしますSystem.Net.Http
。オーバーライドする必要があるのは
protected abstract Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken);
メソッド、これは。で簡単async { ... } |> Async.StartAsTask
です。また、静的型付けにより、HTTPのさまざまな属性にアクセスしやすくなります。さまざまなサブクラスを使用すると、ASP.NET、WCF(セルフホスト)、またはOWINなどのサードパーティプラットフォームを介して実行できます。