2015-10-01 3 views
0

Мы запускаем консольное приложение 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.

Любые идеи?

+0

Вы проверили журналы событий Windows? Если вы не поймаете исключение, оно обычно появляется там – thab

ответ

0

Зарегистрировать необработанные исключения, используя событие AppDomain.UnhndledException. Он должен фиксировать любое исключение, которое не обрабатывается вами.

Смежные вопросы