I have an ASP page the has session state disabled. This page creates an instance of a COM component written in C++ (threading model is BOTH, using ATL-FREE_THREADED macro in stdafx.h, supports free threaded marshaller). The COM component streams files to the ASP response buffer.
This component was created to support downloads of multi-gigabyte files. (Yes.. I know not the best answer but what the client requested.) I added a throttle in the COM component so as not to cause the ASP DLL to use up too much memory.
SO.... when testing, I've discovered that while this page is executing, ALL requests from ALL browsers are blocked. It appears the entire thread pool is blocked. After response.end, queued requests are serviced.
No other page uses this download component. However, I do have another free threaded component that every other page uses. I haven't test this possibility yet, but I'm wondering if IIS is trying to marshall all COM interface requests for both my components through the free threaded "apartment" (basically queuing them to a single thread used to execute free threaded components). That would explain how all requests would be blocked. However having the threading model set to BOTH and support for the free threaded marshaller should prevent this... right? Any suggestions?