【发布时间】:2018-01-03 16:02:39
【问题描述】:
我有一个 SignalR 集线器来发送组通知,我想测试 SignalR 组。 以下是 Hub 服务器代码:
[HubName("MyHubServer")]
public class HubServer : Hub
{
public override Task OnConnected()
{
// My code OnConnected
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
// My code OnDisconnected
return base.OnDisconnected(stopCalled);
}
public string JoinGroup(string connectionId, string groupName)
{
Groups.Add(connectionId, groupName).Wait();
return connectionId + " joined " + groupName;
}
public string LeaveGroup(string connectionId, string groupName)
{
Groups.Remove(connectionId, groupName).Wait();
return connectionId + " removed " + groupName;
}
public string LeaveGroup(string connectionId, string groupName, string customerId = "0")
{
Groups.Remove(connectionId, customerId).Wait();
return connectionId + " removed " + groupName;
}
}
向群组发送消息的服务器代码(加入群组后我将调用此代码向群组发送消息):
Hub.Clients.Group("Associate").BroadcastAssociateNotification(JsonConvert.SerializeObject(notifications));
现在我想测试 SignalR 服务器组以加入组并在服务器向该组发送消息时接收消息。 下面是我用来测试相同的代码,使用此代码,我在 Groups.Add(connectionId, groupName).Wait(); 行出现“任务已取消”错误
static void Main(string[] args)
{
MainAsync().Wait();
Console.ReadLine();
}
static async Task MainAsync()
{
try
{
var hubConnection = new HubConnection("http://localhost:12923/");
IHubProxy stockTickerHubProxy = hubConnection.CreateHubProxy("MyHubServer");
stockTickerHubProxy.On<string>("Associate", data => Console.WriteLine("Notification received : ", data));
hubConnection.Start().Wait();
await stockTickerHubProxy.Invoke("JoinGroup", "123456", "Associate");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
【问题讨论】:
-
您正在混合异步调用和阻塞调用 (
.Wait),这可能导致方法中的死锁。你应该等待而不是阻止它。 -
这个问题解决了吗?
标签: c# asp.net signalr signalr-hub signalr.client