如何仅映射 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
都可以根据需要配置。
我的应用程序中有两个集线器。对于一个我需要 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
都可以根据需要配置。