![w3wp - IIS 6 中托管的 aspnet_isapi.dll 的用途是什么?](https://linux22.com/image/498497/w3wp%20-%20IIS%206%20%E4%B8%AD%E6%89%98%E7%AE%A1%E7%9A%84%20aspnet_isapi.dll%20%E7%9A%84%E7%94%A8%E9%80%94%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
ASP.NET ISAPI 扩展的用途是什么aspnet_isapi.dll托管在工作进程中执行程序在 IIS 6.0 中?
在 IIS 5.0 中,我了解到此 ISAPI 扩展负责处理所有 asp.net 请求(aspx 等)。它加载在 IIS 进程中,负责将请求发送到 ASP.NET 工作进程aspnet_wp.exe使用命名管道。
使用 IIS 6.0,请求直接从内核到达 w3wp.exe,然后 ISAPI 扩展会在此工作进程中加载。
在 MSDN 文章(IIS 6.0)中这里是说Aspnet_isapi.dll - 将请求排队以供托管代码 ASP.NET 引擎处理,并执行运行状况监视。
这让我很困惑。
这些请求不是已经在内核级别排队了吗?
aspnet_isapi.dll 不是非托管代码吗?即常规 win32 dll 吗?w3wp 不是托管代码吗?
我完全迷失了 :-|
任何帮助,将不胜感激 !
答案1
根据本文,如果使用 IIS6 进程模型,aspnet_isapi.dll 不用于对请求进行排队,但它是负责初始化CLR。
当请求到达时,IIS 会检查资源类型并调用 ASP.NET ISAPI 扩展。如果启用了默认进程模型,aspnet_isapi 会将请求排队并将其分配给工作进程。任何请求数据都通过异步 I/O 发送。如果启用了 IIS 6 进程模型,请求将自动排队到处理应用程序所属的 IIS 应用程序池的工作进程 (w3wp.exe)。IIS 6 工作进程对 ASP.NET 和托管代码一无所知。它仅限于处理 *.aspx 扩展名和加载 aspnet_isapi 模块。当 ASP.NET ISAPI 在 IIS 6 进程模型下工作时,它的行为会有所不同,只会在 w3wp.exe 工作进程的上下文中加载 CLR。