Signalr 2 Autofac 在一个请求中调用 Hub 两到三次
Signalr 2 Autofac calling Hub two to three times in a request
请原谅这个奇怪的标题,但在研究同一个问题几个小时后,这是我能想到的最好的!
我最初将 signalr 嵌入到我的 MVC 项目中,但将其移出到 self-hosted OWIN 应用程序中。
每当调用集线器时,在初始加载时它将加载集线器两次,后续调用将加载集线器三次。
这是我的中心,我按照文档到达发球台:
public class TestHub : Hub
{
private readonly ILifetimeScope _scope;
private ITestService _testService;
public TestHub(ILifetimeScope scope)
{
_scope = scope.BeginLifetimeScope();
_testService = _scope.Resolve<ITestService>();
}
public void SignalRTest()
{
var types = _testService.SomeMethod();
Clients.Caller.populateSignalRTest(types);
}
protected override void Dispose(bool disposing)
{
if (disposing && _scope != null)
{
_scope.Dispose();
}
base.Dispose (disposing);
}
}
这是 OWIN 配置:
var listener = (HttpListener)appBuilder.Properties[typeof(HttpListener).FullName];
listener.AuthenticationSchemes = AuthenticationSchemes.Ntlm;
appBuilder.UseCors(CorsOptions.AllowAll);
var builder = new ContainerBuilder();
// ... Other modules being imported ...
builder.RegisterModule<NLogModule>();
builder.RegisterType<TestService> ().As<ITestService> ();
builder.RegisterHubs(Assembly.GetExecutingAssembly());
var config = new HubConfiguration();
var container = builder.Build();
config.Resolver = new AutofacDependencyResolver(container);
config.EnableDetailedErrors = true;
appBuilder.UseAutofacMiddleware(container);
appBuilder.MapSignalR("/signalr", config);
Autofac 必须在 运行 任何方法之前解决所有依赖关系 - 应用程序调用多个集线器,这需要很长时间才能解决。
以下是我使用的版本:
SignalR 2.1.2 (Also tried 2.2.0)
AutoFac 3.5.2
有没有人遇到过这个或知道为什么会这样?
谢谢
一位同事在我大发雷霆的同时做了一些调试,并做了一些其他事情,发现它是其中一项服务,而不是 AutoFac 或 signalR。我们有一个索引,服务的构造方法正在验证索引是否有效。去掉就好了
请原谅这个奇怪的标题,但在研究同一个问题几个小时后,这是我能想到的最好的!
我最初将 signalr 嵌入到我的 MVC 项目中,但将其移出到 self-hosted OWIN 应用程序中。
每当调用集线器时,在初始加载时它将加载集线器两次,后续调用将加载集线器三次。
这是我的中心,我按照文档到达发球台:
public class TestHub : Hub
{
private readonly ILifetimeScope _scope;
private ITestService _testService;
public TestHub(ILifetimeScope scope)
{
_scope = scope.BeginLifetimeScope();
_testService = _scope.Resolve<ITestService>();
}
public void SignalRTest()
{
var types = _testService.SomeMethod();
Clients.Caller.populateSignalRTest(types);
}
protected override void Dispose(bool disposing)
{
if (disposing && _scope != null)
{
_scope.Dispose();
}
base.Dispose (disposing);
}
}
这是 OWIN 配置:
var listener = (HttpListener)appBuilder.Properties[typeof(HttpListener).FullName];
listener.AuthenticationSchemes = AuthenticationSchemes.Ntlm;
appBuilder.UseCors(CorsOptions.AllowAll);
var builder = new ContainerBuilder();
// ... Other modules being imported ...
builder.RegisterModule<NLogModule>();
builder.RegisterType<TestService> ().As<ITestService> ();
builder.RegisterHubs(Assembly.GetExecutingAssembly());
var config = new HubConfiguration();
var container = builder.Build();
config.Resolver = new AutofacDependencyResolver(container);
config.EnableDetailedErrors = true;
appBuilder.UseAutofacMiddleware(container);
appBuilder.MapSignalR("/signalr", config);
Autofac 必须在 运行 任何方法之前解决所有依赖关系 - 应用程序调用多个集线器,这需要很长时间才能解决。
以下是我使用的版本:
SignalR 2.1.2 (Also tried 2.2.0)
AutoFac 3.5.2
有没有人遇到过这个或知道为什么会这样?
谢谢
一位同事在我大发雷霆的同时做了一些调试,并做了一些其他事情,发现它是其中一项服务,而不是 AutoFac 或 signalR。我们有一个索引,服务的构造方法正在验证索引是否有效。去掉就好了