簡體   English   中英

F#中的SignalR和SelfHost

[英]SignalR and SelfHost in F#

我想這會很快回答,但我今天找不到合適的答案。 我嘗試創建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

我首先創建了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)

但這只是為了使代碼更好,你的集線器代碼存在問題,因為你帶來的動態模塊只能調用一個帶有一個參數的方法,使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM