IIS如何知道如何启动.NET Web应用程序

时间:2019-05-23 21:42:20

标签: c# asp.net iis

我试图了解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,是否有人对此过程有更多信息?

1 个答案:

答案 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管理器控制台处理程序映射图标中找到它。

图片如下:

enter image description here

enter image description here

IIS将根据其扩展名将请求发送到正确的http hanlder。处理程序模块(例如asp.net isapi)将加载CLR和Web应用程序(包括globalasax)来处理请求。