首页 文章

OWIN和Katana - 中间件究竟是什么?

提问于
浏览
3

与Katana项目合作时,我们经常处理中间件 . 在ASP.NET网站上他们说

如前所述,当服务器接受来自客户端的请求时,它负责将其传递给OWIN组件管道,这些组件由开发人员的启动代码指定 . 这些管道组件称为中间件 .

那没关系,但我完全不明白 . 起初我认为中间件是ASP.NET组件,如WebAPI,SignalR和所有这些 . 但是,在学习身份验证时,我看到了Cookie身份验证中间件 . 这个不是像WebAPI这样的整个框架,因此它不适合我最初的中间件概念 .

那么Katana中间件到底是什么?它们只是可以集成在执行管道上并在环境字典上工作的代码片段?因此,它们可以是简单的组件,如身份验证中间件或与WebAPI等整个框架进行通信的接口?

2 回答

  • 2

    中间件就像思考数学函数组合一样简单 . OWIN (nearly) spec'd signatureFunc<AppFunc, AppFunc> ,其中 using AppFunc = Func<IDictionary<string, object>, Task> .

    如果从功能构成的角度考虑,目的就明确了:

    val f : int -> int
    let f x = x*x
    
    val g : int -> int
    let g x = x+x
    

    你可以手动调用它们:

    val result1 : int -> int
    let result1 x = g(f(x))
    

    或者您可以编写函数来创建新函数:

    val result1 : int -> int
    let newFunc = g • f
    // or in F#
    let newFunc = g << f
    

    回到OWIN,再次使用F#表示法来保持简单:

    type AppFunc = IDictionary<string, obj> -> Task
    val app : AppFunc
    val middleware : AppFunc -> AppFunc
    

    将我的 app 应用于 middleware 会创建一个新的 app'

    let app' : AppFunc = middleware app
    

    一个具体的例子是记录中间件 . 在组合之后,您会发现请求的流程如下:

    request -> loggingMiddleware -> app -> loggingMiddleware -> response
    

    让您有机会记录传入请求和传出响应 . 这实际上与Web API的 HttpMessageHandler 相同 .

    Katana通过 IAppBuilder.Use 扩展使C#开发人员更容易,以及每个中间件库暴露快捷方式扩展方法,例如 .UseWebApi.UseSignalR .

    此外,Katana使用中间件来安装框架,以便它可以使用基于404响应状态代码的直通机制来尝试使用另一个框架处理请求 . 您可以通过mounting frameworks at different paths以不同方式处理此问题,但如果您希望使用不同的框架在统一路径下处理应用程序的不同部分,则此机制可以正常工作 .

  • 6

    如果您熟悉ASP.NET应用程序生命周期及其处理管道,

    http://www.iis.net/learn/application-frameworks/building-and-running-aspnet-applications/how-to-take-advantage-of-the-iis-integrated-pipeline

    您可能会得到一些关于什么是中间件的基本想法 . 管道本身(主要是System.Web中的类型)是一个中间件,它将ASP.NET应用程序(WebForms,MVC)桥接到底层主机(Web服务器,如IIS,IIS Express,Cassini,selfhost等) .

    然而,经典的System.Web是高度耦合的,然后是OWIN和Katana . 如果你深入了解Katana的代码库,你会发现自己是一个管道 . 它更加灵活,可高度自定义,因此将其称为中间件现在比以往更加简洁 .

    ASP.NET vNext完全摆脱了System.Web,因此您可以看到Katana在未来几个月中扮演重要角色 .

相关问题