Asp.net MVC在不同的应用程序域中请求

时间:2012-04-19 17:13:36

标签: .net asp.net-mvc visual-studio-2010 appdomain

有人能解释一下MVC如何处理请求吗? 我有一个MVC Web应用程序,我遇到了一些问题,直到我尝试检查哪个AppDomain运行每个请求。有一些奇怪的事情(对我而言)有时会在一个AppDomain中创建控制器,有时在另一个AppDomain中创建控制器。我将AppDomain.CurrentDomain.GetHashCode()添加到控制器的构造函数中,并且不同请求的值不同。(但不是每个请求,有时值已经使用过)这意味着它以某种方式创建并运行另一个控制器应用程序域。

我使用visual studio 2010开发Web服务器进行调试。

这里有一个callstack: Callstack to the Controller

Appdomain Transition和我的代码在不同的AppDomain中运行的事实肯定会创建不同的AppDomain,但我如何控制它呢? 我对这些东西不太熟悉,所以有人能给我一些建议如何改变它吗?我需要我的代码在一个AppDomain中运行。

谢谢。

更新1:它可能有点混乱,我的意思是我的代码在MVC中的不同AppDomain中运行,但WebServer创建了AppDomain并将调用包装在其中。那么,为什么会这样呢?谁能解释一下?

更新2:我发现并发布了为什么它会为每个请求创建AppDomain。 我们管理过C#dll“PEngineCSharp”,它通过名为“PEngine”的C ++库的DllImport在内部使用非托管方法“Process”。

在我的控制器中,我有几种方法,在其中一种方法“PEngineProcess”中,方法被调用如下:

PEngineCSharp.PEngine.Process(ProcessInfo info);

每次调用控制器的“PEngineProcess”方法后,每个请求都在单独的AppDomain中启动。如果我不调用此方法,而是调用其他纯粹的托管方法,则它们都在一个AppDomain中运行。在评论调用“PEngineCSharp.PEngine.Process(ProcessInfo info);”之后调用控制器的方法“PEngineProcess”不会创建新的AppDomain,一切都在一个AppDomain中运行。为了测试,我刚刚添加了“PEngineCSharp.PEngine.Process(ProcessInfo info);”到另一个控制器的方法之后,请求开始在新的AppDomain中重新开始。 所以我找到了这种行为的原因,我也尝试了VisualStudio WebServer,IIS Express 7.5和IIS 7.0上的所有内容 - 所有这些行为都是一样的。

拜托,有谁能解释一下那里发生了什么?谢谢!

0 个答案:

没有答案