我有一个Azure移动应用程序,它有一些方法可以生成500个错误,但不会在Application Insights中记录任何异常,并且我的代码中不会抛出任何异常。我已经能够确定正常的TableController方法工作正常,但自定义方法不能。此外,我可以远程调试代码并观察它完成执行,而不会抛出任何异常。还应该注意的是,当这个项目是移动服务时,我没有这个问题。这是一个失败的示例方法:
private readonly MobileServiceContext context; //Autofac injection
private readonly IUserHelper userHelper; //Autofac injection
[HttpGet, Route("api/Site/{id}/Users")]
public async Task<HttpResponseMessage> Users(string id)
{
var userId = await userHelper.GetUserIdAsync(User, Request);
var query = context.UserSiteMaps.Include(x => x.User).Where(map => map.SiteId == id);
var auth = query.FirstOrDefault(x => x.UserId == userId && x.IsAdmin);
if (auth != null)
{
return Request.CreateResponse(HttpStatusCode.OK, query.Select(map => map.User));
}
return Request.CreateUnauthorizedResponse();
}
我能够获得的最深的错误日志是IIS的详细错误页面:
模块__DynamicModule_Microsoft.Owin.Host.SystemWeb.OwinHttpModule,Microsoft.Owin.Host.SystemWeb,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35_9de2321b-e781-4017-8ff3-4acd1e48b129
通知PreExecuteRequestHandler
Handler ExtensionlessUrlHandler-Integrated-4.0
错误代码
00000000
我无法生成更详细的错误消息,我不知道Owin在这里感到沮丧,因为其他方法返回请求就好了。我在做一些我不应该做的事情吗?
非常感谢任何帮助!
我也能够缩小原因。如果我用简单的字符串替换响应中的query.Select(map => map.User)
对象,它将返回该字符串而不会抱怨。但是,如果我自己对响应进行字符串化并将其传递出来,我会再次获得500。可能是一些序列化设置问题?
答案 0 :(得分:0)
追踪问题的最佳方法是为您的应用启用异常堆栈跟踪并打开移动应用后端的日志记录。
请参阅移动应用维基中的Server Side Logging和Enable diagnostics logging for web apps in Azure App Service。您还可以远程调试服务以查看确切的错误,请参阅Remote debugging .NET server SDK。