SignalR:使用IHubContext发送消息不起作用,可与Hub配合使用

时间:2015-02-24 22:52:27

标签: c# asp.net signalr

我在玩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进行依赖注入并尝试了两种方法:

  1. 没有工作

    HubConfiguration configuration = new HubConfiguration
    {
        Resolver = new UnitySignalRDependencyResolver(UnityContainer)
    };
    
    app.MapSignalR(configuration);
    
  2. WORKS

    GlobalHost.DependencyResolver = new UnitySignalRDependencyResolver(UnityContainer);
    
    app.MapSignalR(configuration);
    
  3. 如果有人能解释原因,我会非常高兴。

0 个答案:

没有答案