场景:经典ASP应用程序,使用自定义应用程序池。默认设置.
在 * 某些 * IIS 7机器上,IIS决定一次只服务一个页面。因此,如果多个加载任何网页从一个网站,每一个都必须连续加载。
例如,如果我从一个浏览器加载http://foo.com/default.asp,从另一台机器加载http://foo.com/differenturl.asp,第一台必须在另一台加载之前完成。这几乎就像w3 p进程是单线程的。
请注意,在IIS的高级设置中有一个名为MaxProcesses的设置,它说“将此设置设置为大于1以创建Web Garden”(不管它是什么)。这并不能解决问题,因为这会产生多个具有自己会话状态等的进程,当你加载http://foo.com/default.asp时,没有办法保证你被分配到同一个进程。
这个问题暴露了自己,因为我们有一个诊断页面,它是用ASP编写的,它创建了一个ActiveX控件,可以在网站上加载一个URL并返回结果。
因此,diagnostics.asp加载并在服务器端的代码中创建一个小的Web控件,该控件在同一服务器上加载(想想XMLHTTP控件)default.asp。
此页永远不会完成加载,因为服务器正在等待diagnostics.asp页完成,然后才提供default.asp页。僵持!
这在每台IIS 6机器上都能正常工作,我相信有些IIS 7服务器也能正常工作。
我已经证实这也不是我们古怪诊断的结果。从一台机器加载多个选项卡,甚至是从不同的机器加载多个选项卡将表明Web进程一次处理一个选项卡。
正确答案由安东尼·琼斯:在IIS 7中打开了服务器端调试。这会使IIS进入单线程模式。
8条答案
按热度按时间esyap4oy1#
在IIS管理器中,单击树中的应用程序。
双击IIS部分下的ASP。
展开“搜索属性”
确保“启用客户端调试”和“启用服务器端调试”都设置为false。
启用调试时,ASP仅限于以单线程方式一次处理一个请求。
pgx2nnw82#
首先:确保你用多个客户端测试这个。一台计算机在同一时间只向同一服务器(IP地址)发出2个HTTP请求。(这是一个RFC规范。)
如果这不能解决您的问题,请查看IIS 7-> ASP -> Services -> COM Plus Properties -> Execute in MTA。尝试将此设置设置为“True”。
希望这对你有帮助。
rseugnpd3#
你确定你的代码中没有导致死锁的依赖项吗?我以前见过这种情况,日志记录,sql连接等创建了一个依赖。使用perfmon并检查硬盘读/写队列,内存读/写队列,看看是否正在备份。
我强烈推荐Tess Ferrandez's (ASP.NET Escalation Engineer - Microsoft)博客,因为它有很多见解和方法来了解正在发生的事情。泰丝忘记的东西比大多数人知道的要多。
我认为你的问题不是IIS相关的,而是你的应用程序中的一些东西,可能是你的ActiveX组件。请确保您清理后,您的ActiveX组件。下面是我在使用Excel(另一个COM组件)后用来清理的一段代码。请记住,COM不是管理的。
希望这对你有帮助。
ldxq2e6h4#
您是否已将应用程序池上的“托管管道模式”更改为“经典”(默认值为“集成”)?如果没有,试试经典。
我不知道这是否会有任何帮助。我很久以前就停止了争取让经典的ASP应用程序与IIS 7一起工作。(我不能说,这些应用程序真的很好很正确,但它们在早期版本中是有效的。
试着关闭测试页面的缓冲,让它们在每次迭代中吐出一些东西。缓冲(和缓存)可能在IIS 7中发生了变化。也许它们毕竟是并发处理的,只是缓冲区太大,看不出区别。
我现在只想到这个
我想你是在用非常简单的案例进行测试。您的应用程序不会(测试页面和阿萨)使用任何两个请求共有的奇怪对象,因此需要锁定。
j8ag8udp5#
IIS 7是最多线程的,所以我猜你的应用程序有问题。
你提到ActiveX从同一个服务器加载一个页面-也许这个ActiveX不是自由线程,这导致每个页面使用它运行单个示例?
顺便说一句:Web Garden -同一服务器使用多个进程-无法使用进程内会话Web Farm -多个Web服务器
68bkxrlz6#
确保将asp.net配置为使用多个工作线程。This msdn article说明如何设置此配置选项。
wsewodh27#
只是一个想法,但如果你去网站在IIS中,点击 * 限制. * 链接在左边,什么是连接限制设置?这里有最大带宽和最大并发连接选项。
我也会去应用程序池,点击 * 高级设置. *,并检查CPU和内存限制。甚至可能从头开始创建一个新的应用程序池,并选择“无托管代码”来消除它。
bjp0bcyl8#
如果这不是调试设置的问题,我发现在IIS 8中使用ASP中的会话变量时,您可能会遇到类似的行为。
我不知道这是不是IIS 8特有的,但是“ASP保证在任何时候只有一个来自Session的请求会被执行。”http://msdn.microsoft.com/en-us/library/ms972335.aspx