【问题标题】:How does SignalR map a request to the hub?SignalR 如何将请求映射到集线器?
【发布时间】:2013-09-12 14:30:03
【问题描述】:

我很好奇 SignalR 如何将请求映射到 Hub?

它如何选择要使用的集线器?请求中的中心名称在哪里?

此外,它如何选择集线器中的哪个操作来处​​理请求?那是请求 url 的一部分吗?

最后有没有办法利用这个管道(例如,IActionFilter、IHubSelector、IActionSelector)?

【问题讨论】:

    标签: c# .net signalr signalr-hub signalr.client


    【解决方案1】:

    SignalR 是开源的。您可以在此处找到您要查找的大部分内容: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Core/Hubs

    从该行开始输入通道:

    https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Core/Hubs/HubDispatcher.cs#L145

    祝你好运!

    【讨论】:

    • 这是一个很好的提示 +1,但仍然没有完全回答问题。
    【解决方案2】:

    它通过以下方式获取集线器的类型:

    IAssemblyLocator,返回相关程序集。

    SignalR 询问所有通过的类型的程序集:

    private static bool IsHubType(Type type)
        {
          try
          {
            return typeof (IHub).IsAssignableFrom(type) && !type.IsAbstract 
                     && (type.Attributes.HasFlag((Enum) TypeAttributes.Public) 
                     || type.Attributes.HasFlag((Enum) TypeAttributes.NestedPublic));
          }
          catch
          {
            return false;
          }
        }
    

    然后使用通过上述条件的类型创建IHubDescriptors,然后通过依赖解析器解析其类型属性。

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      相关资源
      最近更新 更多