Is there Application_End from Global.asax in Owin?

為{幸葍}努か 提交于 2019-12-18 10:48:41

问题


Startup.cs is a new way to initialize your app instead of Application_Start in Global.asax and it's fine. But is there a place to put my teardown logic, for example this:

public class WebApiApplication : System.Web.HttpApplication
{
  protected void Application_End()
  {
    // Release you ServiceBroker listener
    SqlDependency.Stop(connString);
  }
}

Looked in Microsoft.Owin namespace but it only seems to have OwinStartupAttribute. Does this mean that application lifecycle events are still processed by System.Web.HttpApplication instance and are not supported by OWIN specification?


回答1:


AppProperties, found in Microsoft.Owin.BuilderProperties, exposes the CancellationToken for OnAppDisposing.

You can get this token and register a callback to it

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var properties = new AppProperties(app.Properties);
        CancellationToken token = properties.OnAppDisposing;
        if (token != CancellationToken.None)
        {
            token.Register(() =>
            {
                // do stuff
            });
        }
    }
}



回答2:


I packaged this up in a little helper so you can do this:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.OnDisposing(() =>
        {
            // do stuff
        });
    }
}

The helper:

static class AppBuilderExtensions
{
    public static void OnDisposing(this IAppBuilder app, Action cleanup)
    {
        var properties = new AppProperties(app.Properties);
        var token = properties.OnAppDisposing;
        if (token != CancellationToken.None)
        {
            token.Register(cleanup);
        }
    }
}


来源:https://stackoverflow.com/questions/27444924/is-there-application-end-from-global-asax-in-owin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!