- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在 Katana (OWIN) 实现中实现全局异常捕获器-处理程序的正确方法是什么?
在作为 Azure 云服务( worker 角色)运行的自托管 OWIN/Katana 实现中,我将这段代码放在中间件中:
throw new Exception("pooo");
然后我将这段代码放在 Startup 类的 Configuration 方法中,在事件处理程序中设置断点:
AppDomain.CurrentDomain.UnhandledException +=
CurrentDomain_UnhandledExceptionEventHandler;
和同一个类中的事件处理程序(在第一行设置断点):
private static void CurrentDomain_UnhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs e)
{
var exception = (Exception)e.ExceptionObject;
Trace.WriteLine(exception.Message);
Trace.WriteLine(exception.StackTrace);
Trace.WriteLine(exception.InnerException.Message);
}
当代码运行时,断点未命中。但是,Visual Studio 输出窗口确实包含以下内容:
A first chance exception of type 'System.Exception' occurred in redacted.dll
A first chance exception of type 'System.Exception' occurred in mscorlib.dll
我也尝试将接线和处理程序移动到 Worker Role OnStart 方法,但仍然没有命中断点。
我根本没有使用 WebAPI,但确实查看了关于那里所做的事情的帖子,但我没有发现任何明确的地方,所以我来了。
在 .NET Framework 4.5.2、VS 2013 上运行。
感谢所有想法。谢谢。
最佳答案
尝试编写自定义中间件并将其作为第一个中间件:
public class GlobalExceptionMiddleware : OwinMiddleware
{
public GlobalExceptionMiddleware(OwinMiddleware next) : base(next)
{}
public override async Task Invoke(IOwinContext context)
{
try
{
await Next.Invoke(context);
}
catch(Exception ex)
{
// your handling logic
}
}
}
将其作为第一个中间件:
public class Startup
{
public void Configuration(IAppBuilder builder)
{
var config = new HttpConfiguration();
builder.Use<GlobalExceptionMiddleware>();
//register other middlewares
}
}
当我们将这个中间件注册为第一个中间件时,其他中间件中发生的任何异常(沿着堆栈跟踪)将向上传播并被该中间件的 try/catch
block 捕获。
并不一定要把它注册为第一个中间件,如果你不需要对某些中间件进行全局异常处理,只需在这个中间件之前注册这些中间件即可。
public class Startup
{
public void Configuration(IAppBuilder builder)
{
var config = new HttpConfiguration();
//register middlewares that don't need global exception handling.
builder.Use<GlobalExceptionMiddleware>();
//register other middlewares
}
}
关于c# - OWIN/Katana 未处理的异常全局处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30918649/
我是 ASP.net、Katana 等的新手,但学得很快。最佳实践之一是为 Controller 使用版本。例如: http://localhot.com:7301/api/v1/ { Control
在 Katana (OWIN) 实现中实现全局异常捕获器-处理程序的正确方法是什么? 在作为 Azure 云服务( worker 角色)运行的自托管 OWIN/Katana 实现中,我将这段代码放在中
我下载了 katana 项目,想在沙箱项目中尝试客户端/服务器。 我在 OAuthValidateClientAuthenticationContext 遇到了一个问题: public bool Tr
我有一个自托管的 Owin 应用程序,需要访问 Azure blob 存储,但是,在尝试访问该存储时遇到安全异常。我可以从控制台应用程序访问 blob 存储。我怀疑这个问题与我执行 Owin 代码时的
我是 OWIN 和 Katana 的新手。我真的不明白为什么我应该使用 OWIN,而我可以使用 IIS。简单来说,我的问题是:如果我跳过学习 OWIN 并在网站上使用 IIS,我会失去什么? 我用谷歌
我希望对内部 ADFS 2 服务使用 WsFederation 身份验证并使用 OWIN 身份验证管道。 什么是中间件应该挂接的顺序,以及在各种场景中需要哪些模块以最少的代码? 例如,看起来 UseW
我已经使用 Owin 自托管控制台应用程序建立了一个网站。我提供的静态文件没有问题,网站静态部分的“根”工作正常,Web API 路由也工作正常。 如果我浏览到: http://localhost/i
我的理解是,目前您可以使用 Katana 自行托管 WebAPI,MVC 将在未来版本中具备此功能。从本质上讲,Katana 将成为 MVC 和 WebAPI 都可用的托管选项。 Kestrel 已经
我不太明白这一点.. 当然,能够自行托管应用程序很酷,而且这可能会很好,因为如果 IIS 由于任何原因出现故障...那么您的所有站点都会崩溃.. 但如果它们是 self 托管的,然后他们在自己的环境中
在与 Katana 项目合作时,我们经常处理中间件。在 ASP.NET 网站上他们说 As previously mentioned, when the server accepts a reques
我在 Microsoft Owin 项目中的此类文件中看到正在调用记录器 https://github.com/aspnet/AspNetKatana/blob/dev/src/Microsoft.O
我已经阅读了很多关于 OWIN 和 Katana 项目的文章,但我无法了解它的全貌。 对于使用 ASP.NET 的普通 Web 开发人员: OWIN 到底是什么以及它解决了什么问题(简单来说)。它与
实际上我知道有关于 KATANA 好处的主题和问题,我知道它们,但我的问题是 Katana 在业务方面可以为我做什么?比如为什么我应该使用 WEB API 作为一个单独的模块(中间件)?它可以与哪个中
如何拒绝一个身份?我的类继承自 OAuthBearerAuthenticationProvider 并且我有 ValidateIdentity 的覆盖? 我试过设置 context.Rejected(
我有一个使用 OWIN 提供基本 Web 服务器的自托管应用程序。配置的关键部分是以下行: appBuilder.UseFileServer(new FileServerOptions { F
IOwinContext 中似乎没有 HTTP Referrer,我需要捕获它。获取该特定变量的正确方法是什么? IOwinContext 有几个 Typed PEM,但我没有特别看到 referer
我正在开发一个使用 Katana 公开自托管 WebAPI 服务的应用程序。我想以类似于 IIS 允许单个网站下的多个应用程序的方式来管理内容。 例如,我可能有三个包含 web api 内容的文件夹:
网上有很多示例使用 OWIN/Katana 根据用户名/密码组合在数据库中查找用户并生成声明主体,例如... var userManager = context.OwinContext.GetUser
我正在尝试在 Azure 中运行的基于 OWIN/Katana 的 ASP.NET MVC 网站上实现密码重置。 它在本地运行时工作正常,但在生产中失败。 我创建一个 UserToken 提供程序 u
有没有办法强制 Katana 身份验证管理器从 IdentityServer3 调用注销端点?使用 HttpPost 而不是 HttpGet 方法? 我目前使用此方法从 IdentityServer3
我是一名优秀的程序员,十分优秀!