每个请求asp.net单线程

时间:2013-09-29 02:52:11

标签: asp.net multithreading transactions distributed-transactions

是否有人知道IIS 7中的任何设置会强制它为每个请求使用一个线程,并且不允许它在请求期间切换线程?或者回到传统的线程模型?

我们的问题是整个请求,从头到尾使用多个连接到不同的数据库,我们希望通过使用TransactionScope保证数据的完整性(TransactionScope作为轻量级事务启动,然后提升为分布式事务,一旦第二次连接成立)。

我们需要每个请求一个线程的原因是,当您尝试在不同于启动它的线程的线程上处理事务时,它会抛出一个异常,指出它必须放在启动它的同一个线程上。然后事务泄漏,没有任何东西被提交,它慢慢地使机器停止运转。

2 个答案:

答案 0 :(得分:1)

我们支持的.net版本(当时为4.0)无法执行此操作。所以我们被迫放弃了分布式交易的覆盖范围。

理论上你可以用.net 4.5.1 TransactionScopeAsyncFlowOption

来做

答案 1 :(得分:0)

要限制每个asp.net工作进程的线程数,可以设置maxWorkerThreads,它根据每个CPU配置进程使用的最大工作线程数。我不建议每个asp.net工作进程只配置一个线程。这显然会影响表现。

为应用程序池配置工作线程似乎有几种方法。第一种是在web.config文件中设置processModel元素:

http://msdn.microsoft.com/en-us/library/7w2sway1.aspx

第二个是设置aspnet.config文件(你可以找到路径为“c:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727”或“C:\ Windows \ Microsoft”的aspnet.config文件.NET \ Framework64 \ v4.0.30319" ):

http://msdn.microsoft.com/en-us/library/dd560842.aspx

最后一种方法,你可以检查你在初始帖子中提到的第一个参考,下面的参考是有用的补充:

http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add

信用:http://forums.iis.net/t/1188351.aspx