我在玩SignalR。首先它工作正常,但当我将我调用客户端的代码移动到另一个类(使用IHubContext)时,不再在客户端触发消息。
例如,我创建了一个简单的集线器:
public class EventHub : Hub
{
public EventHub()
{
Do();
}
private async Task Do()
{
while (true)
{
await Task.Delay(2000);
await Clients.All.foo2("BAR2");
}
}
}
但是我在另一个课堂上尝试了同样的事情。它不再适用了。
public class EventHubTester
{
private readonly Lazy<IHubContext> context = new Lazy<IHubContext>(() => GlobalHost.ConnectionManager.GetHubContext<EventHub>());
public EventHubTester()
{
Do();
}
private async Task Do()
{
while (true)
{
await Task.Delay(2000);
await context.Value.Clients.All.foo("BAR");
}
}
}
我在浏览器日志中看到,foo2被触发,foo不被触发。有任何想法吗?我使用的是signalR 2.2。
此致 塞巴斯蒂安
编辑:
我发现了问题。我做了一个非常小的例子并测试了帖子中的两个代码。然后我认识到它工作正常。所以我逐步删除了我的应用程序中的所有代码,直到找到解决方案:
我使用unity进行依赖注入并尝试了两种方法:
没有工作
HubConfiguration configuration = new HubConfiguration
{
Resolver = new UnitySignalRDependencyResolver(UnityContainer)
};
app.MapSignalR(configuration);
WORKS
GlobalHost.DependencyResolver = new UnitySignalRDependencyResolver(UnityContainer);
app.MapSignalR(configuration);
如果有人能解释原因,我会非常高兴。