SignalR 2.1.0:尚未建立连接

Nic*_*sen 12 c# signalr

我有一个带有简单HTML页面的ASP.NET Web应用程序和一些通过SignalR进行通信的JavaScript.这很好.现在我试图从另一个项目(在同一个解决方案中)调用Hub上的方法,并使用.NET Signalr Client Api:

        var connection = new HubConnection("http://localhost:32986/");
        var hub = connection.CreateHubProxy("MessageHub");
        connection.Start();
        hub.Invoke("SendMessage", "", "");
Run Code Online (Sandbox Code Playgroud)

最后一行导致InvalidOperationException: The connection has not been established.但我可以从我的JavaScript代码连接到集线器.

如何使用C#代码连接到Hub?

UPDATE

写完这篇文章后的那一刻,我试着添加.Wait()并且它有效!所以这将做:

        var connection = new HubConnection("http://localhost:32986/");
        var hub = connection.CreateHubProxy("MessageHub");
        connection.Start().Wait();
        hub.Invoke("SendMessage", "", "");
Run Code Online (Sandbox Code Playgroud)

hal*_*r73 13

HubConnection.StartTask在调用方法之前返回需要完成的内容.

执行此操作的两种方法是使用await,如果您使用的是异步方法,或者Task.Wait()如果您使用非异步方法则使用:

public async Task StartConnection()
{
    var connection = new HubConnection("http://localhost:32986/");
    var hub = connection.CreateHubProxy("MessageHub");
    await connection.Start();
    await hub.Invoke("SendMessage", "", "");
    // ...
}

// or

public void StartConnection()
{
    var connection = new HubConnection("http://localhost:32986/");
    var hub = connection.CreateHubProxy("MessageHub");
    connection.Start().Wait();
    hub.Invoke("SendMessage", "", "").Wait();
    // ...
}
Run Code Online (Sandbox Code Playgroud)

.NET ClientASP.NET SignalR Hubs API指南的"如何建立连接"部分.进一步详细说明.