Mar*_*cky 7 asp.net f# signalr owin
我想这会很快回答,但我今天找不到合适的答案.我尝试创建F#SignalR自我主机应用程序(我按照本教程http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-signalr-20-self-主持人)
结果是我的应用程序没有在我的localhost上映射信号器/集线器,没有错误消息(只有当它没有找到客户端时才从JavaScript文件).
namespace Program
open Owin
open Dynamic
open Microsoft.AspNet.SignalR
open Microsoft.AspNet.SignalR.Hubs
open Microsoft.Owin.Hosting
open Microsoft.Owin.Cors
open System
open System.Diagnostics
type MyHub =
inherit Hub
member x.Send (name : string) (message : string) =
base.Clients.All?addMessage name message
type MyWebStartUp() =
member x.Configuration (app :IAppBuilder) =
app.UseCors CorsOptions.AllowAll |> ignore
app.MapSignalR() |> ignore
()
module Starter =
[<EntryPoint>]
let main argv =
let hostUrl = "http://localhost:8085"
let disposable = WebApp.Start<MyWebStartUp>(hostUrl)
Console.WriteLine("Server running on "+ hostUrl)
Console.ReadLine() |> ignore
disposable.Dispose()
0 // return an integer exit code
Run Code Online (Sandbox Code Playgroud)
我首先创建了C#应用程序,它确实工作得很好,我认为我的F#代码不对,但是我找不到那个bug.这里是整个项目的参考:https://github.com/MartinBodocky/SignalRFSharp
在动作超载的情况下Start,您不必仅为启动配置创建整个类型.你也一定要使用use而不是手动处理.
let startup (a:IAppBuilder) =
a.UseCors(CorsOptions.AllowAll) |> ignore
a.MapSignalR() |> ignore
use app = WebApp.Start(hostUrl, startup)
Run Code Online (Sandbox Code Playgroud)
但这只是为了使代码更好,您的集线器代码存在问题,因为您带来的动态模块只能调用带有一个参数的方法,使用FSharp.Interop.Dynamic(在nuget中)用于强大的DLR ?运算符.
open EkonBenefits.FSharp.Dynamic
type MyHub() =
inherit Hub()
member this.Send (name : string) (message : string) =
this.Clients.All?addMessage(name,message) |> ignore
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |