长时间运行Http Web请求

时间:2010-02-02 13:46:20

标签: asp.net iis-6 httpwebrequest

我有一个在IIS6服务器上运行的ASP.NET Web应用程序。该应用程序正在对远程计算机上的xml服务进行长时间运行的调用。远程计算机上的某些服务调用需要很长时间才能执行(有时长达4分钟)。长期解决方案是使调用异步,但作为短期解决方案,我们希望增加调用的超时和整个httpRequest超时。

我担心的是,长时间运行的呼叫将填满请求队列并阻止“正常”页面请求完成。如何调整服务器,IIS和应用程序设置以临时解决问题?

目前每分钟大约有200个请求,这导致270个服务请求/分钟。

  • 当前executionTimeout为360(6分钟)
  • 当前服务通话超时为2分钟

1 个答案:

答案 0 :(得分:7)

这篇关于微软知识库的文章几乎包含了你可能需要的所有信息:

* Contention, poor performance, and deadlocks when you make Web service requests from ASP.NET applications

<小时/> 我将就上面文章中处理的一些具体项目进行一些研究。以下信息适用于IIS6,适用于IIS7的注释。

将处理器工作线程池从25增加到至少100

Threadpool大小的默认值为100,因为autoConfig的默认值为 true

autoConfig 涵盖的值为

  • maxWorkerThreads
  • maxIoThreads
  • MAXCONNECTION

还有一个必须更改的值是 - ASPProcessorThreadMax,这只能在IIS6中的IIS配置数据库(通过 adsutil 工具)中设置。 [IIS7相当于processorThreadMax值]

所以我选择不更改 machine.config 设置,因为它们很好,还有其他参与者会因关闭 autoconfig 而受到影响,而是通过IIS元数据库将ASPProcessorThreadMax从25更改为100(更改此值的唯一方法)。

e.g。

cscript %SYSTEMDRIVE%\Inetpub\AdminScripts\<nowiki>adsutil.vb</nowiki>s SET W3SVC/AspRequestQueueMax 100

每台服务器的最大连接数

maxconnection autoconfig 将此值设置为12 * cpu的数量,即一次连接到的每个地址可以建立的连接数。

调试

您可以执行以下操作:

监视请求是否在队列中等待

监控以下计数器:

  • 运行 perfmon
  • 添加计数器:应用程序队列中的ASP.NET应用程序/请求

这将告诉我们,由于工人短缺,工作项目是否排队等。

检查应用程序池使用的标识

  1. 打开IIS管理器
  2. 检查您的站点在IIS管理器中使用的应用程序池。
  3. 选择应用程序池列表中使用的应用程序池,然后选择右键单击 - &gt;属性并查看正在使用的帐户标识。
  4. 默认情况下应为网络服务