我的应用程序中有两个集线器。对于那个我需要NTLM身份验证,另一个需要基于IP的过滤。为此,我需要将HttpListener.AuthenticationSchemes
设置为AuthenticationSchemes.Ntlm
作为第一个,而对于另一个则保持匿名。这意味着我不能让两个集线器在同一个侦听器连接上运行。
我有OwinMiddleware
来处理身份验证,我正在尝试为这两个集线器(两个不同的端口)设置两个不同的端点。
我的问题是,当我不知道如何告诉SignalR只将特定的集线器映射到特定的IAppBuilder
,而不是它可以找到的所有集线器。有什么想法吗?
答案 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
都可以根据需要进行配置。