作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 ASP.NET Web 应用程序,其中包含一个简单的 HTML 页面和一些通过 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# 代码连接到集线器?
更新
写完这篇文章后,我尝试添加 .Wait()
并且成功了!所以这样做:
var connection = new HubConnection("http://localhost:32986/");
var hub = connection.CreateHubProxy("MessageHub");
connection.Start().Wait();
hub.Invoke("SendMessage", "", "");
最佳答案
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. 的“如何建立连接”部分进入更多细节。
关于c# - SignalR 2.1.0 : The connection has not been established,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24964451/
我是一名优秀的程序员,十分优秀!