C# 是什么过程使IIS开始通过Owin管道响应请求?
如果在Visual Studio 2013中创建空的ASP.NET Web应用程序项目,请打开包管理器控制台并安装包Microsoft.Owin.Host.SystemWeb 使用配置(IAppBuilder app)方法添加启动类,例如: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
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接管并进入OwinBuilder和OwinAppContext流,它在程序集中查找
启动
类以调用配置
方法。Microsoft.Owin.Host.SystemWeb订阅该事件。当此事件触发时,我们注册一个HttpModule,其中包含检测启动类和构建OWIN管道等的所有逻辑
看
虽然OWIN中间件组件(OMC)主要设计为在服务器无关的管道中运行,但也可以在IIS集成管道中运行OMC(不支持经典模式)。通过从package Manager控制台(PMC)安装以下软件包,可以使OMC在IIS集成管道中工作:
安装软件包Microsoft.Owin.Host.SystemWeb