2017-04-01 59 views
1

在我的应用程序的配置中,我删除了customErrors以对难以复制的错误进行测试。尝试catch在Azure服务器中不起作用

而且在错误应该发生,我把一试:

if (ModelState.IsValid) 
     { 
      db.TarefaHoras.Add(tarefaHora); 

      try 
      { 
       db.SaveChanges(); 
      } 
      catch (DbUpdateException ex) 
      { 
       ErroDetalhe erro = new ErroDetalhe(); 
       erro.Data = tarefaHora.Data; 
       erro.UsuarioId = tarefaHora.ApplicationUserId; 
       erro.JSON = JsonConvert.SerializeObject(tarefaHora); 
       erro.Tipo = "TarefaHora"; 
       erro.Controller = "TarefaHoras"; 
       erro.Action = "Create Post"; 
       erro.Exception = ex.GetType().FullName; 

       db.ErroDetalhes.Add(erro); 
       db.SaveChanges(); 

       return RedirectToAction("ErroNaAtualizacaoDaBase", "Erros", new { id = erro.ID });       
      } 

      return RedirectToAction("Index", "Home"); 
     } 

     return View(tarefaHora); 
    } 

该错误仅发生在运行时,只有Azure的服务器上,所以我的尝试是得到错误的,并为这个更好的说明我创建了一个存放信息的表格。

但是....

的问题是,我得到了查看错误不是视图“ErrorInputUpdate”我创建和在捕捉重定向。

我得到默认的AspNET错误视图。

因此,我进入共享视图并删除了默认页面,并从web.config中删除了customErrors。

即使这时Azure仍会带来默认错误视图。

任何人有任何想法可能会发生什么?

+0

在** Debug **中构建和发布,如果您希望在Visual Studio中具有相同的错误处理体验,则不发布。 – evilSnobu

+0

你是怎么推荐我在Debug中发布的,但是我收到了一个如此普遍的错误[NullReferenceException:对象引用未设置为对象的实例。]没有显示任何其他内容。任何想法? – Neumann

+0

添加一个断点并逐步完成。您可以远程执行 - https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-dotnet-troubleshoot-visual-studio(远程调试部分)。堆栈跟踪应该已经给你足够的上下文来理解WHERE事情正在破裂。 – evilSnobu

回答

0

因此调用db.SaveChanges();会生成异常。这意味着上下文db无效,应该解决或丢弃。

但是,您正在做的是创建一个错误条目并使用相同的db上下文仍然处于故障状态。所以在你的catch块中对db.SaveChanges();的调用仍然会产生一个异常,但是这一次它不会被捕获。

解决方案是将错误写入数据库以外的其他内容,例如文件或其他内容,或者使用其他EF上下文实例。其他选项是在再次调用db.SaveChanges();之前删除或更正无效条目,或者不将错误存储在数据库中,但在重定向视图中包含所有详细信息。

+0

谢谢,我会尝试分离所有db.savechanges – Neumann