gpt4 book ai didi

c# - asp.net mvc 4,线程被模型绑定(bind)改变了吗?

转载 作者:行者123 更新时间:2023-11-30 18:32:32 24 4
gpt4 key购买 nike

我在 MVC 4 应用程序中使用自定义 ModelBinder,但它是在与 global.asax 中的请求事件处理程序不同的线程上调用的,这使得在 ThreadLocal 中设置性能分析上下文失败。

threadId在每行开头的括号中,可以看到调用model binding时线程发生了变化,也就是controller action(Index)执行的线程。

[33] | ERROR | MyApp.MvcApplication | Application_BeginRequest 
[33] | ERROR | MyApp.MvcApplication | Application_AuthenticateRequest
[33] | ERROR | MyApp.MvcApplication | Application_AuthorizeRequest
[33] | ERROR | MyApp.MvcApplication | Application_ResolveRequestCache
[33] | ERROR | MyApp.MvcApplication | Application_AcquireRequestState
[33] | ERROR | MyApp.MvcApplication | Application_PreRequestHandlerExecute
[52] | ERROR | Binders.MyModelBinder | ModelBinder
[52] | ERROR | MyApp.Controllers.MyController | Index

知道为什么会这样吗?我的期望是 Controller 方法将始终在与 global.asax 中的应用程序事件处理程序相同的线程上调用

最佳答案

原来我的核心假设是不正确的—— Controller Action 不是在与事件处理程序相同的线程上调用的。

这是来自 Environment.StackTrace 的片段,显示了异步进程(在另一个线程上)调用的 Controller 操作。

at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

看起来我将改为在 session 中存储我的性能分析上下文。

关于c# - asp.net mvc 4,线程被模型绑定(bind)改变了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18577014/

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