为什么 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
        }

这反过来会触发应用程序重新启动,从而触发对配置方法的后续调用!