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

时间:2017-10-13 09:27:59

标签: c#-4.0 owin signalr-hub

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

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

1 个答案:

答案 0 :(得分:1)

最后,我设法使用自定义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都可以根据需要进行配置。