Мы запускаем консольное приложение Windows, которое отправляет сообщения SignalR в несколько браузеров через объединительную плату SignalR. Мы делаем это, хостинг сервер SignalR с помощью OWN.WebApp:Ловля исключений в WebApp?
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, затем вызовите заводится(), передавая ему строку подключения к базе данных SqlServer объединительной платы. OWIN запускает веб-сайт в фоновом потоке, и наш код взаимодействует с ним через signalRUrl (который является локальным хостом с динамически выделенным номером порта).
Моя проблема: это работает в наших средах разработчиков и QA, но в нашей демонстрационной среде это рушится без объяснения причин.
Я пытаюсь убедиться, что мы, по крайней мере, поймаем и запишите любое исключение, которое может произойти. И вот что - я не вижу, как поймать и занести в журнал любые исключения, которые может выбросить OWIN WebApp.
Любые идеи?
Вы проверили журналы событий Windows? Если вы не поймаете исключение, оно обычно появляется там – thab