Я настраиваю простое приложение Giraffe с одной или двумя конечными точками и концентратором SignalR.Вот что у меня получилось:
type JsonBlob = JsonProvider<"Blob.json">
type Message =
| GetBlobs of AsyncReplyChannel<JsonBlob.Root list>
| PostBlob of JsonBlob.Root
type JsonBlobHub(agent : MailboxProcessor<Message>) =
inherit Hub()
member self.RespondToClient() =
let blobs = agent.PostAndReply(GetBlobs)
self.Clients.All.SendAsync("ReceiveBlobList", blobs)
let agentFactory(serviceProvider : IServiceProvider) =
let thing = serviceProvider.GetService<Thing>()
MailboxProcessor.Start(fun (inbox : MailboxProcessor<Message>) ->
/* loop implementation */
)
// other stuff
let configureApp (app : IApplicationBuilder) =
app.UseSignalR(fun routes -> routes.MapHub<JsonBlobHub>(PathString "/blobhub")) |> ignore
app.UseGiraffe webApp // webApp defined elsewhere, not important
let configureServices (services : IServiceCollection) =
services.AddSingleton<MailboxProcessor<Message>>(agentFactory) |> ignore
services.AddGiraffe() |> ignore
services.AddSignalR() |> ignore
let main argv =
WebHostBuilder() =
.UseKestrel()
.UseWebRoot("WebRoot")
.Configure(Action<IApplicationBuilder> configureApp)
.ConfigureServices(configureServices)
.ConfigureLogging(configureLogging)
.Build()
.Run
0
Когда клиент SignalR подключается к /blobhub
, соединение неожиданно закрывается, поскольку приложению не удается разрешить MailboxProcessor<Message>
при попытке активировать класс BlobHub
.
Однако я немного озадачен, потому что я четко зарегистрировал тип MailboxProcessor<Message>
в контейнере в функции configureServices
.Кто-нибудь видит проблему в этом коде?Или, может быть, я предполагаю, что эти вещи должны работать, и есть какая-то причина, по которой они не должны, о которых я не знаю?