SignalR 2.1.0:尚未建立连接

时间:2014-07-25 21:02:21

标签: 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", "", "");

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

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

更新

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

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

1 个答案:

答案 0 :(得分:13)

HubConnection.Start返回需要完成的Task,然后才能调用方法。

执行此操作的两种方法是使用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();
    // ...
}

"如何建立连接" ASP.NET SignalR Hubs API Guide for the .NET client.的部分更详细。