我试图了解IIS如何知道如何启动ASP.Net Web应用程序到目前为止,我的理解是,在创建Web应用程序时,我们创建了一个Web.Config,它定义了IIS如何启动进程。
所以我们有一个Web配置
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="LogRequests" type="BDBPayroll.Apps.API.Web.Shared.HttpModules.LogRequestsHttpModule, BDBPayroll.Apps.API.Web.Shared" />
<add name="MiniProfiler" type="BDBPayroll.Apps.API.Web.Shared.HttpModules.MiniProfilerHttpModule, BDBPayroll.Apps.API.Web.Shared" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
和全球Asax:
public class WebApiApplication : WebApiHttpApplication<WebModule>
{
protected override void Configure(HttpConfiguration config)
{
config.Filters.Add(new Filters.ContextResolverFilter());
config.Filters.Add(new ValidateModelAttribute());
config.Filters.Add(new PaginationFilter());
GlobalContext<JsonFormatterRule>.Instance.SetDefaultJsonFormatter(config);
}
//...
}
由于IIS可以运行多个应用程序(例如php,.net等),因此IIS如何从Web配置中知道如何运行全局Asax。
我的猜测是,它会从Web配置中查找应用程序类型,然后搜索WebApiHttpApplication,是否有人对此过程有更多信息?
答案 0 :(得分:1)
由于IIS可以运行多个应用程序(例如php,.net等),因此IIS如何从Web配置中知道如何运行全局Asax。
我的猜测是,它会从Web配置中查找应用程序类型,然后搜索WebApiHttpApplication,是否有人对此过程有更多信息?
据我所知,如果使用,则将请求发送到IIS。
在通过http.sys处理http请求之后,IIS会将此请求移至w3wp.exe进行处理。
由于IIS只能处理htm或html静态页面,所以IIS将使用ISAPI来处理IIS无法处理的页面。
ISAPI是一种扩展处理程序,用于处理php,aspx,cshtml或其他类型的不同页面。
您可以从IIS管理器控制台处理程序映射图标中找到它。
图片如下:
IIS将根据其扩展名将请求发送到正确的http hanlder。处理程序模块(例如asp.net isapi)将加载CLR和Web应用程序(包括globalasax)来处理请求。