我有一个带有简单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", "", "");
答案 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.的部分更详细。