我有一个带有简单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 Client的ASP.NET SignalR Hubs API指南的"如何建立连接"部分.进一步详细说明.