Signalr 信号器-OWIN-多个端点
我有一个这样的场景 派生模块的基类。Signalr 信号器-OWIN-多个端点,signalr,owin,startup,Signalr,Owin,Startup,我有一个这样的场景 派生模块的基类。 每个模块都有自己的信号集线器。 我想在单个主机中承载所有模块,并用模块名称分隔。 某些模块将共享中心名称 namespace domain.com.base { public class BaseClass { public string ApplicationName; } } namespace domain.com.billing { public class Billing : BaseClass
每个模块都有自己的信号集线器。
我想在单个主机中承载所有模块,并用模块名称分隔。
某些模块将共享中心名称
namespace domain.com.base
{
public class BaseClass
{
public string ApplicationName;
}
}
namespace domain.com.billing
{
public class Billing : BaseClass
{
ApplicationName = "Billing";
}
public class NotificationHub : Hub
{
public void Credit(decimal amount)
{
Clients.All.Notify(amount);
}
}
}
namespace domain.com.reporting
{
public class Reporting : BaseClass
{
ApplicationName = "Reporting";
}
public class ReportingHub : Hub
{
public Report GetReport(int Id)
{
return ReportModule.RetrieveReport(Id);
}
}
}
在OWIN.Startup.Configuration(IAppBuilder)中,是否可以执行类似的操作
namespace domain.com.external_access
{
public void Configuration(IAppBuilder app)
{
var asmList = GlobalResolver.Applications();
foreach(var asm in asmList)
{
app.MapSignalR(asm.ApplicationName,false);
}
}
}
实际上给了你这样的东西
实际上,这是可行的,即使它需要一些繁重的工作来解决信号器在
GlobalHost
周围的紧密耦合问题
下面的答案基于我的记忆,我现在无法访问我的代码。如果有错误,我会尽快更新答案 编辑:昨天晚上我做对了。照下面写的做
您需要实现自己的
IHubDescriptorProvider
和IHubActivator
,以便控制为每个“端点”找到的Hub
。此外,您需要为每个端点提供其自己的HubConfiguration
(继承自ConnectionConfiguration
)实例,该实例不使用全局主机依赖项解析程序。这可能是这样的:
class CustomSignalRConnectionConfiguration : HubConfiguration
{
public CustomSignalRConnectionConfiguration()
{
this.Resolver = new DefaultDependencyResolver();
// configure your DI here...
var diContainer = new YourFavouriteDi();
// replace IHubActivator
this.Resolver.Register(
typeof(IHubActivator),
() => diContainer.Resolve<IHubActivator>());
// replace IHubDescriptorProvider
this.Resolver.Register(
typeof(IHubDescriptorProvider),
() => diContainer.Resolve<IHubDescriptorProvider>());
}
}
祝你好运 您是否尝试过:
app.mapsigner(“/Reporting/signal”);app.mapsigner(“/Billing/signal”)代码>?那太好了,但是,它不会在两个端点解析相同的集线器吗?谢谢!我一定会尝试实现这一点。让你知道!
app.Map("/endpointName", mappedApp =>
{
var config = new CustomSignalRConnectionConfiguration();
mappedApp.MapSignalR(config);
});