为什么 SignalR Startup class 的 Configuration 方法被调用了两次
Why is the Configuration method of the SignalR Startup class invoked twice
我正在 运行在 SignalR 使用的 Startup class 中使用一些初始化代码。代码在 Configuration 方法中调用(这是在 ASPNET MVC 应用程序中)。
初始化代码需要 运行 恰好一次,并放置在 Startup class 的 Configuration(IAppBuilder app)
方法中,如下所示:
public void Configuration(IAppBuilder app)
{
//Call some custom pre initialization code
ConfigureAuth(app);
//Call some custom post initialization code
}
我注意到 public void Configuration(IAppBuilder app)
方法在应用程序启动时恰好被调用了两次。
问题是为什么?
这是 运行 前信号器初始化代码和 post 信号器初始化代码的正确位置吗?还是应该出现在其他位置。我的需要是确保 pre 和 post 自定义初始化代码 运行 恰好一次。
更新:
以下是导致第二次调用 "Configuration" 的调用堆栈。在 Web 应用程序呈现默认页面后,该调用似乎立即在后台线程上发生。
> MyWebApp.dll!MyWebApp.Startup.Configuration(Owin.IAppBuilder app) Line 45 C#
[Native to Managed Transition]
Microsoft.Owin.Host.SystemWeb.dll!Owin.Loader.DefaultLoader.MakeDelegate.AnonymousMethod__b(Owin.IAppBuilder builder) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Owin.Loader.DefaultLoader.LoadImplementation.AnonymousMethod__0(Owin.IAppBuilder builder) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinHttpModule.InitializeBlueprint.AnonymousMethod__0(Owin.IAppBuilder builder) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinAppContext.Initialize(System.Action<Owin.IAppBuilder> startup) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinBuilder.Build(System.Action<Owin.IAppBuilder> startup) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinHttpModule.InitializeBlueprint() Unknown
mscorlib.dll!System.Threading.LazyInitializer.EnsureInitializedCore<System.__Canon>(ref System.__Canon target, ref bool initialized, ref object syncLock, System.Func<System.__Canon> valueFactory) Unknown
mscorlib.dll!System.Threading.LazyInitializer.EnsureInitialized<Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineBlueprint>(ref Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineBlueprint target, ref bool initialized, ref object syncLock, System.Func<Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineBlueprint> valueFactory) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init(System.Web.HttpApplication context) Unknown
System.Web.dll!System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(System.IntPtr appContext, System.Web.HttpContext context, System.Reflection.MethodInfo[] handlers) Unknown
System.Web.dll!System.Web.HttpApplication.InitSpecial(System.Web.HttpApplicationState state, System.Reflection.MethodInfo[] handlers, System.IntPtr appContext, System.Web.HttpContext context) Unknown
System.Web.dll!System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(System.IntPtr appContext, System.Web.HttpContext context) Unknown
System.Web.dll!System.Web.Hosting.PipelineRuntime.InitializeApplication(System.IntPtr appContext) Unknown
[AppDomain Transition]
在预初始化调用中,我在 bin 文件夹中生成一个程序集。
public void Configuration(IAppBuilder app)
{
//Call some custom pre-initialization code which generates an
//assembly in the bin folder
ConfigureAuth(app);
//Call some custom post initialization code
}
这反过来会触发应用程序重新启动,从而触发对配置方法的后续调用!
我正在 运行在 SignalR 使用的 Startup class 中使用一些初始化代码。代码在 Configuration 方法中调用(这是在 ASPNET MVC 应用程序中)。
初始化代码需要 运行 恰好一次,并放置在 Startup class 的 Configuration(IAppBuilder app)
方法中,如下所示:
public void Configuration(IAppBuilder app)
{
//Call some custom pre initialization code
ConfigureAuth(app);
//Call some custom post initialization code
}
我注意到 public void Configuration(IAppBuilder app)
方法在应用程序启动时恰好被调用了两次。
问题是为什么?
这是 运行 前信号器初始化代码和 post 信号器初始化代码的正确位置吗?还是应该出现在其他位置。我的需要是确保 pre 和 post 自定义初始化代码 运行 恰好一次。
更新: 以下是导致第二次调用 "Configuration" 的调用堆栈。在 Web 应用程序呈现默认页面后,该调用似乎立即在后台线程上发生。
> MyWebApp.dll!MyWebApp.Startup.Configuration(Owin.IAppBuilder app) Line 45 C#
[Native to Managed Transition]
Microsoft.Owin.Host.SystemWeb.dll!Owin.Loader.DefaultLoader.MakeDelegate.AnonymousMethod__b(Owin.IAppBuilder builder) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Owin.Loader.DefaultLoader.LoadImplementation.AnonymousMethod__0(Owin.IAppBuilder builder) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinHttpModule.InitializeBlueprint.AnonymousMethod__0(Owin.IAppBuilder builder) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinAppContext.Initialize(System.Action<Owin.IAppBuilder> startup) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinBuilder.Build(System.Action<Owin.IAppBuilder> startup) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinHttpModule.InitializeBlueprint() Unknown
mscorlib.dll!System.Threading.LazyInitializer.EnsureInitializedCore<System.__Canon>(ref System.__Canon target, ref bool initialized, ref object syncLock, System.Func<System.__Canon> valueFactory) Unknown
mscorlib.dll!System.Threading.LazyInitializer.EnsureInitialized<Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineBlueprint>(ref Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineBlueprint target, ref bool initialized, ref object syncLock, System.Func<Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineBlueprint> valueFactory) Unknown
Microsoft.Owin.Host.SystemWeb.dll!Microsoft.Owin.Host.SystemWeb.OwinHttpModule.Init(System.Web.HttpApplication context) Unknown
System.Web.dll!System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(System.IntPtr appContext, System.Web.HttpContext context, System.Reflection.MethodInfo[] handlers) Unknown
System.Web.dll!System.Web.HttpApplication.InitSpecial(System.Web.HttpApplicationState state, System.Reflection.MethodInfo[] handlers, System.IntPtr appContext, System.Web.HttpContext context) Unknown
System.Web.dll!System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(System.IntPtr appContext, System.Web.HttpContext context) Unknown
System.Web.dll!System.Web.Hosting.PipelineRuntime.InitializeApplication(System.IntPtr appContext) Unknown
[AppDomain Transition]
在预初始化调用中,我在 bin 文件夹中生成一个程序集。
public void Configuration(IAppBuilder app)
{
//Call some custom pre-initialization code which generates an
//assembly in the bin folder
ConfigureAuth(app);
//Call some custom post initialization code
}
这反过来会触发应用程序重新启动,从而触发对配置方法的后续调用!