Article ID: 316451
Using ServerXMLHTTP or WinHTTP objects to make recursive Hypertext Transfer Protocol (HTTP) requests to the same Internet Information Server (IIS) server is not recommended. More specifically, the calling Active Server Page (ASP) should not send requests to an ASP in the same virtual directory or to another virtual directory in the same pool or process. This can result in poor performance due to thread starvation.
If the ServerXMLHTTP or WinHTTP component must send a request to another ASP on the same server, the target ASP must be located in a different virtual directory and set to run in high isolation. Avoid using ServerXMLHTTP or WinHTTP to send a request to an ASP that is located in the same virtual directory.
A finite number of worker threads (in the Inetinfo.exe or Dllhost.exe process) is available to execute ASP pages. If all of the ASP worker threads send HTTP requests back to the same Inetinfo.exe or Dllhost.exe process on the server from which the requests are sent, the Inetinfo.exe or Dllhost.exe process may deadlock or stop responding (hang), because the pool of worker threads to process the incoming requests will be exhausted. This is by design.
If a single recursive request causes IIS to deadlock, the typical cause is that ASP script debugging is enabled. When debugging is enabled, only one ASP worker thread is available to process the incoming requests for ASP pages. The workaround is to either disable debugging or separate all of the ASP pages into isolated virtual directories and processes.
For additional information, click the article numbers below to view the articles in the Microsoft Knowledge Base:
(https://support.microsoft.com/kb/216580/EN-US/ )Blocking/Serialization When Using InProc Component (DLL) from ASP
(https://support.microsoft.com/kb/290761/EN-US/ )Frequently Asked Questions about ServerXMLHTTP
Article ID: 316451 - Last Review: June 22, 2014 - Revision: 2.0