在 WebApp 中捕获异常?

Catching exceptions in WebApp?

我们是 运行 一个 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(它是具有动态分配端口号的本地主机)与其通信。

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

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

有什么想法吗?

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