Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IIS7-一次只能提供一页。它';这让我发疯!_Iis_Iis 7_Asp Classic - Fatal编程技术网

IIS7-一次只能提供一页。它';这让我发疯!

IIS7-一次只能提供一页。它';这让我发疯!,iis,iis-7,asp-classic,Iis,Iis 7,Asp Classic,情景:经典ASP应用程序,使用自定义应用程序池。默认设置 在一些IIS7机器上,IIS决定一次只提供一页。因此,如果多个用户从一个站点加载任何页面,每个页面都必须连续加载 e、 g.如果我从一个浏览器加载,从另一台机器加载,第一台必须在另一台加载之前完成。这几乎就像w3p进程是单线程的 注意,在IIS的高级设置中有一个名为maxprocess的设置,它说“将此设置为大于1以创建Web花园”(不管是什么)。这并不能解决问题,因为这会产生多个进程,它们有自己的会话状态等,并且当您加载时,无法保证您被

情景:经典ASP应用程序,使用自定义应用程序池。默认设置

在一些IIS7机器上,IIS决定一次只提供一页。因此,如果多个用户从一个站点加载任何页面,每个页面都必须连续加载

e、 g.如果我从一个浏览器加载,从另一台机器加载,第一台必须在另一台加载之前完成。这几乎就像w3p进程是单线程的

注意,在IIS的高级设置中有一个名为maxprocess的设置,它说“将此设置为大于1以创建Web花园”(不管是什么)。这并不能解决问题,因为这会产生多个进程,它们有自己的会话状态等,并且当您加载时,无法保证您被分配到同一进程

这个问题暴露了出来,因为我们有一个用ASP编写的诊断页面,该页面创建一个ActiveX控件,该控件在网站上加载一个url并返回结果

因此,diagnostics.asp将加载,并在服务器端的代码中创建一个小型web控件,在同一服务器上加载(想想XMLHTTP控件)default.asp

此页面永远不会完成加载,因为服务器正在等待diagnostics.asp页面完成,然后才提供default.asp页面。死锁

这在每个IIS6机器上都能正常工作,我相信有些IIS7服务器也能正常工作

我已经证实这也不是我们古怪诊断的结果。从一台机器加载多个选项卡,甚至从单独的机器加载多个选项卡,将显示web进程一次只处理一个选项卡



正确答案由AnthonyWJones提供:服务器端调试已在IIS7中打开。这使IIS进入单线程模式。

IIS7肯定是多线程的,所以我猜你的应用程序有问题

您提到过ActiveX从同一服务器加载一个页面-可能这个ActiveX不是自由线程,这会导致使用它的每个页面都运行单个实例

顺便说一句:Web Garden-同一服务器使用多个进程-无法使用进程内会话
Web场-多个Web服务器确保asp.net配置为使用多个工作线程。说明如何设置此配置选项。

首先:确保使用多个客户端测试此选项。一台计算机在同一时间仅向同一服务器发出两个HTTP请求(IP地址)。(这是一个RFC规范。)

如果这不能解决您的问题,请查看IIS7->ASP->Services->COM Plus Properties->Execute in MTA。尝试将此设置设置为“True”


希望这有帮助。

您确定代码中没有导致死锁的依赖项吗。我以前见过日志记录、sql连接等创建依赖项的情况。使用perfmon并检查硬盘读/写队列、内存读/写队列,以查看是否正在备份

我强烈推荐博客,以获得更多的见解和了解正在发生的事情的方法。苔丝对这件事的遗忘比大多数人所知道的还要多

我认为您的问题与IIS无关,而是应用程序中的某些内容,可能是ActiveX组件中的某些内容。确保在ActiveX组件之后进行清理。下面是我在使用Excel(另一个Com组件)后用来清理的一段代码。请记住,Com是不受管理的

    Private Sub ShutDownExcel()
    If objExcel IsNot Nothing Then
        objExcel.DisplayAlerts = True
        objExcel.Quit()
        System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel)
        objExcel = Nothing
    End If

    ' Clean up memory so Excel can shut down. 
    GC.Collect()
    GC.WaitForPendingFinalizers()

    ' The GC needs to be called twice in order to get the 
    ' Finalizers called - the first time in, it simply makes 
    ' a list of what is to be finalized, the second time in, 
    ' it actually the finalizing. Only then will the 
    ' object do its automatic ReleaseComObject. 
    GC.Collect()
    GC.WaitForPendingFinalizers()
End Sub

希望这有帮助。

在IIS管理器中,单击树中的应用程序

双击IIS部分下的ASP

展开“调试属性”

确保“启用客户端调试”和“启用服务器端调试”都设置为false

启用调试后,ASP仅限于以单线程方式一次处理一个请求。

是否已将应用程序池上的“托管流水线模式”更改为“经典”(默认为“集成”)?如果没有,请尝试经典

我不知道这是否有任何帮助。我很久以前就停止了让经典ASP应用程序与IIS7协同工作的斗争。(我不能说,这些应用程序确实很好,也很正确,但它们在早期版本中工作正常。)

并尝试关闭测试页面的缓冲,让它们在每次迭代中吐出一些东西。在IIS7中,缓冲(和缓存)可能已经改变。也许它们毕竟是并发处理的,只是缓冲区太大了,看不出有什么区别

我现在想到的就是这些



我假设您正在使用非常简单的案例进行测试。你的应用程序(无论是测试页面还是global.asa)都没有使用任何对两个请求都很常见的奇怪对象,因此需要锁定。

只是一个想法,但是如果你在IIS中访问该网站,请单击限制。。。左侧的链接,连接限制设置为什么?这里有最大带宽和最大并发连接选项


我还会转到应用程序池并单击高级设置。。。并检查CPU和内存限制。甚至可能从头开始创建一个新的应用程序池,而不选择托管代码来消除它。

如果调试设置没有问题,我发现在IIS 8中的ASP中使用会话变量时,您可能会遇到类似的行为

我不知道这是IIS8特有的,但是“ASP保证在任何时候都只执行来自会话的一个请求。”

当您创建两个包含循环的asp页面时,问题仍然存在(所以它们会执行一段时间)。IIS7在第一页完成之前不会显示第二页,所以这不是应用程序的问题。这并不能消除应用程序的问题,更可能是应用程序的问题。您是否尝试过同时手动点击两个URL?在此处交叉张贴您能写出所选答案的哪一部分有帮助吗?问题背后的原因是什么?我会知道的。我还不知道,因为我不能在我的机器上重新编程,只有一个客户(他在vaca上)