IIS 7 and Above
Configuration & Scripting
II7 Pipelines request (or threads)
Last post Jul 08, 2015 09:50 AM by intiko81
Jul 07, 2015 02:46 PM|intiko81|LINK
Hello IIS team,
I'm doing tests trying to figure out how does IIS process requests. With my tests, it seems that calling a web service, IIS process requests differently than calling a web site (aspx). Pipelines are created randomly when calling a web service (asmx). and
I want to know is there a way to limit theses piplines, i.e 32 or 64 (enough to handle a throttle situation) ?
Jul 08, 2015 03:19 AM|Pengzhen Song - MSFT|LINK
As I know, the IIS pipeline is a state machine with the following states:
BEGIN_REQUEST AUTHENTICATE_REQUEST AUTHORIZE_REQUEST RESOLVE_REQUEST_CACHE MAP_REQUEST_HANDLER ACQUIRE_REQUEST_STATE PRE_EXECUTE_REQUEST_HANDLER
EXECUTE_REQUEST_HANDLER RELEASE_REQUEST_STATE UPDATE_REQUEST_CACHE LOG_REQUEST END_REQUEST
When a request is received, it moves through the state machine step-by-step until completion.
I think aspx and asmx has the same pipeline. For more infromation, please refer to the document:
Jul 08, 2015 03:46 AM|tweenet|LINK
An easy way to see what's happening in an IIS request pipeline is to enable
Failed Request Tracing for the request and then view the Complete Request Trace,
You can see all the handlers and modules used in the request and compare that to another request.
I don't think there is anything random going on and I think all requests are following the same rules.
If you don't need certain handlers or modules, you can remove them for your site or the server, this makes the pipeline shorter and at least in theory the request quicker. You could remove all 32bit and all asp.net 2 handlers.
Jul 08, 2015 09:35 AM|intiko81|LINK
Thanks for you two for this answer.
Let me try to explain my mentality to serve requests. From any aspx or asmx file, I return a [ThreadStatic] singleton of "RequestRelayer". It intercepets a request and take its parameters. So any new created pipeline, it has its own RequestRelayer (own
instance of the application). the RequestRelayer itself has an instance of the main entrance to the web application all the way down to the database access (which is a [ThreadStatic] singleton too and is always connected, ready to serve sqls). I must limit
the created pipelines to have a limited number of connected "DataServer" to the database.
Does anyone know if there is a real limit?
PS: I did my tests to see how many new singelon of RequestRelayer I have and yesterday I reached to 100 out of 50k requests maybe.
Jul 08, 2015 09:50 AM|intiko81|LINK
I found this interestring.
Pipeline Instance Count
The number of active request pipeline instances for the specified ASP.NET application. Because only one execution thread can run within a pipeline instance, this number represents the maximum number of concurrent requests that are being
processed for a specific application. In most circumstances, it is better for this number be low when the server is busy, because this means that the CPU is well used.