如何仅映射 SignalR 中的特定集线器

How can I map only specific hubs in SignalR

我的应用程序中有两个集线器。对于一个我需要 NTLM 身份验证,另一个需要基于 IP 的过滤。为此,我需要首先将 HttpListener.AuthenticationSchemes 设置为 AuthenticationSchemes.Ntlm,而另一个保持匿名。这意味着我不能在同一个侦听器连接上同时拥有两个集线器 运行。 我有 OwinMiddleware 来处理身份验证,我正在尝试为这两个集线器(两个不同的端口)设置两个不同的端点。

我的问题是,当我不知道如何告诉 SignalR 仅将特定集线器映射到特定 IAppBuilder,而不是它可以找到的所有集线器时。有什么想法吗?

最后,我设法使用自定义 IAddemblyLocator 解决了这个问题。我写了一篇关于这个的文章:https://www.codeproject.com/Tips/1237940/One-Possible-Way-of-Selectively-Assigning-Hubs-to

基本思路是这样的:

using (WebApp.Start("http://*:8080", (app) => {
     var resolver = new DefaultDependencyResolver();
     var locator = new SingleAssemblyLocator(typeof(MyFirstHub).Assembly);

     resolver.Register(typeof(IAssemblyLocator), () => locator);
     app.MapSignalR(new HubConfiguration { Resolver = resolver });
   }))
{
    Console.WriteLine("Server running on {0}", url);
    Console.ReadLine();
}

其中 SingleAssemblyLocator.GetAssemblies() 仅返回传递给构造函数的程序集。当然每个WebApp都可以根据需要配置。