gpt4 book ai didi

asp.net - Application_Error 在不同线程上触发

转载 作者:行者123 更新时间:2023-12-02 17:52:16 26 4
gpt4 key购买 nike

最近我们开始发现一个问题,即在与处理请求的线程不同的线程上调用 Application_Error 事件处理程序(对于 HttpApplication.Error )。

我们最近改变的事情:

  • 32 位到 64 位
  • 经典到集成管道模式

就其值(value)而言,这里有一些代码可能有助于解释这一点:
在一项代表性测试中,页面上显示的线程为 7,而电子邮件中的线程为 10。

//The application
public class MyApplication : HttpApplication
{
protected virtual void Application_Error(ByVal sender As Object, ByVal e As EventArgs)
{
var threadId = System.Threading.Thread.Current.ManagedThreadId;
SendEmail("There was an error on threadId " + threadId.ToString());
}

private void SendEmail(string message)
{
//snip
}
}

//Some aspx page
<%
var threadId = System.Threading.Thread.Current.ManagedThreadId;
throw new Exception("This is a test. ThreadId = " + threadID.ToString());
%>

这会给我们带来问题,因为我们将身份验证信息存储在 Thread.CurrentPrincipal 中,我们需要记录该信息(但有异常(exception))。

我怎样才能将它保留在同一个线程上,或者让 IIS 从原始线程中向我提供 CurrentPrincipal?

最佳答案

我假设您看到此行为是因为 ASP.Net 使用不同的线程来执行 ASP.Net 页面并处理错误。

您应该能够通过使用 HttpContext.Current.User 来解决您的问题。然而,它们之间可能存在细微的差异。您可以查看this文章解释了它们可以指向不同的对象(但基本上只有当你这样做时才会这样做)

关于asp.net - Application_Error 在不同线程上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12585579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com