Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是什么过程使IIS开始通过Owin管道响应请求?_C#_Asp.net_Iis_Owin_Katana - Fatal编程技术网

C# 是什么过程使IIS开始通过Owin管道响应请求?

C# 是什么过程使IIS开始通过Owin管道响应请求?,c#,asp.net,iis,owin,katana,C#,Asp.net,Iis,Owin,Katana,如果在Visual Studio 2013中创建空的ASP.NET Web应用程序项目,请打开包管理器控制台并安装包Microsoft.Owin.Host.SystemWeb 使用配置(IAppBuilder app)方法添加启动类,例如: public class Startup { public void Configuration(IAppBuilder app) { app.Run(context => context.Response.WriteA

如果在Visual Studio 2013中创建空的ASP.NET Web应用程序项目,请打开包管理器控制台并安装包Microsoft.Owin.Host.SystemWeb

使用配置(IAppBuilder app)方法添加启动类,例如:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.Run(context => context.Response.WriteAsync("hello"));
    }
}
然后运行,您将看到hello显示在浏览器中。但是,如果您查看该项目,则不会对任何文件(即web.config)进行任何更改,这表明正在使用Owin管道。更重要的是,如果您有Startup类,但没有安装Microsoft.Owin.Host.SystemWeb包,则启动的配置方法将永远不会运行

我怀疑有一个自定义模块和处理程序参与了所有这一切的实现,但找不到任何关于它的文档。我能找到的唯一稍微触及这个主题的东西是


如何通过引用某些DLL来更改处理请求的方式?

从ASP.NET 4开始,您现在可以使用特定约定在代码(引用的DLL或源代码)中定义自定义类,并在管道的早期由ASP.NET系统调用

只需要在上面标记

Microsoft.Owin.Host.SystemWeb程序集利用了此功能,如果我们仔细思考代码,就会发现此启动方法注册了Owin模块:

public static class PreApplicationStart
{
    private const string TraceName = "Microsoft.Owin.Host.SystemWeb.PreApplicationStart";

    /// <summary>
    /// Registers the OWIN request processing module.
    /// </summary>
    public static void Initialize()
    {
        try
        {
            if (OwinBuilder.IsAutomaticAppStartupEnabled)
            {
                HttpApplication.RegisterModule(typeof(OwinHttpModule));
            }
        }
        catch (Exception exception1)
        {
            Exception exception = exception1;
            ITrace trace = TraceFactory.Create("Microsoft.Owin.Host.SystemWeb.PreApplicationStart");
            trace.WriteError(Resources.Trace_RegisterModuleException, exception);
            throw;
        }
    }
}
公共静态类预应用程序启动
{
private const string TraceName=“Microsoft.Owin.Host.SystemWeb.PreApplicationStart”;
/// 
///注册OWIN请求处理模块。
/// 
公共静态void Initialize()
{
尝试
{
如果(OwinBuilder.isAutomatic已启用)
{
注册表模块(typeof(OwinHttpModule));
}
}
捕获(异常1)
{
异常=异常1;
ITrace trace=TraceFactory.Create(“Microsoft.Owin.Host.SystemWeb.PreApplicationStart”);
WriteError(Resources.trace\u RegisterModuleException,exception);
投掷;
}
}
}

从那时起,OwinHttpModule接管并进入OwinBuilderOwinAppContext流,它在程序集中查找
启动
类以调用
配置
方法。

Microsoft.Owin.Host.SystemWeb订阅该事件。当此事件触发时,我们注册一个HttpModule,其中包含检测启动类和构建OWIN管道等的所有逻辑

看 虽然OWIN中间件组件(OMC)主要设计为在服务器无关的管道中运行,但也可以在IIS集成管道中运行OMC(不支持经典模式)。通过从package Manager控制台(PMC)安装以下软件包,可以使OMC在IIS集成管道中工作: 安装软件包Microsoft.Owin.Host.SystemWeb