捕获WebApp中的异常?

时间:2015-10-01 14:47:23

标签: c# signalr owin

我们正在运行一个Windows控制台应用程序,它通过SignalR背板向多个浏览器发送SignalR消息。我们通过使用OWN.WebApp托管SignalR服务器来实现这一目的:

public class SignalRWebApp : IDisposable
{
    public readonly string signalRUrl;
    private IDisposable webApp;

    public SignalRWebApp()
    {
        this.signalRUrl = String.Format("http://localhost:{0}", getFreePort());
        this.webApp = null;
    }

    private static int getFreePort()
    {
        var listener = new TcpListener(IPAddress.Loopback, 0);
        listener.Start();
        var port = ((IPEndPoint) listener.LocalEndpoint).Port;
        listener.Stop();
        return port;
    }

    public bool started { get { return this.webApp != null; } }
    public void start(string signalRBackplaneConnectionString)
    {
        if (this.webApp != null)
            return;

        Action<IAppBuilder> startAction = app =>
        {
            app.UseCors(CorsOptions.AllowAll);
            GlobalHost.DependencyResolver.UseSqlServer(signalRBackplaneConnectionString);
            app.MapSignalR();
        };

        this.webApp = WebApp.Start(this.signalRUrl, startAction);
    }

    #region IDisposable

    public void Dispose()
    {
        this.dispose(true);
        GC.SuppressFinalize(this);
    }

    ~SignalRWebApp()
    {
        this.dispose(false);
    }

    private bool alreadyDisposed;

    protected virtual void dispose(bool disposing)
    {
        if (!this.alreadyDisposed)
        {
            if (disposing)
            {
                // dispose managed objects
                if (this.webApp != null)
                {
                    this.webApp.Dispose();
                    this.webApp = null;
                }
            }

            // free unmanaged objects
            // set large fields to null.

            this.alreadyDisposed = true;
        }
    }

    #endregion
}

基本上,我们创建一个SignalRWebApp对象,然后调用start(),将连接字符串传递给SqlServer背板数据库。 OWIN在后台线程中启动一个网站,我们的代码通过signalRUrl(具有动态分配的端口号的localhost)与之通信。

我的问题:这在我们的开发和QA环境中有效,但是在我们的演示环境中它没有解释就崩溃了。

我正在尝试确保我们至少捕获并记录可能发生的任何异常。事情就是这样 - 我无法看到如何捕获和记录OWIN WebApp可能抛出的任何异常。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用AppDomain.UnhndledException事件记录未处理的异常。它应该捕获任何未由您处理的异常。