在 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 事件记录未处理的异常。它应该捕获您未处理的任何异常。
我们是 运行 一个 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 事件记录未处理的异常。它应该捕获您未处理的任何异常。