2017-05-30 51 views
0

我正在使用Azure移動應用程序表控制器。獲得語法Azure移動應用程序表控制器中的異常處理

public IQueryable<Employee> GetAllEmployee() 
    { 
     try 
     { 
     return Query(); 
     } 
     catch(Exception ex) 
     { 
      throw; 
     } 
    } 

現在,這裏的問題是,由於回報率的方法是IQueryable的,我不能夠捕捉異常的catch塊,我明白了IQueryable的是從客戶的不同要求(在我的情況下,機器人) 。但是我想在catch塊中記錄錯誤。目前我的調試器從未登陸catch塊。因爲Azure移動應用sdk處理異常並形成http異常,我可以看到的只有500異常。我想記錄數據庫中的錯誤,我如何實現這一目標?

回答

1

正如您所說的,返回類型是IQueryable,所以您無法捕獲GetAllEmployee方法中的異常。

這是一個解決方法。

我建議你可以使用web api global error handling來處理異常。更多細節,你可以參考這個article及以下代碼。

在Startup.MobileApp.cs:

加入這個類:

public class TraceSourceExceptionLogger : ExceptionLogger 
    { 
     private readonly TraceSource _traceSource; 

     public TraceSourceExceptionLogger(TraceSource traceSource) 
     { 
      _traceSource = traceSource; 
     } 

     public override void Log(ExceptionLoggerContext context) 
     { 
      //in this method get the exception details and add it to the sql databse 
      _traceSource.TraceEvent(TraceEventType.Error, 1, 
       "Unhandled exception processing {0} for {1}: {2}", 
       context.Request.Method, 
       context.Request.RequestUri, 
       context.Exception); 
     } 
    } 

更改ConfigureMobileApp方法如下:

public static void ConfigureMobileApp(IAppBuilder app) 
     { 
      HttpConfiguration config = new HttpConfiguration(); 

      config.Services.Add(typeof(IExceptionLogger), 
    new TraceSourceExceptionLogger(new 
    TraceSource("MyTraceSource", SourceLevels.All))); 


      new MobileAppConfiguration() 
       .UseDefaultConfiguration() 
       .ApplyTo(config); 

      // Use Entity Framework Code First to create database tables based on your DbContext 
      Database.SetInitializer(new MobileServiceInitializer()); 

      MobileAppSettingsDictionary settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings(); 

      if (string.IsNullOrEmpty(settings.HostName)) 
      { 
       app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions 
       { 
        // This middleware is intended to be used locally for debugging. By default, HostName will 
        // only have a value when running in an App Service application. 
        SigningKey = ConfigurationManager.AppSettings["SigningKey"], 
        ValidAudiences = new[] { ConfigurationManager.AppSettings["ValidAudience"] }, 
        ValidIssuers = new[] { ConfigurationManager.AppSettings["ValidIssuer"] }, 
        TokenHandler = config.GetAppServiceTokenHandler() 
       }); 
      } 

      app.UseWebApi(config); 
     } 
+0

正是我一直在尋找for.thank你! –

相關問題