Sud*_*hir 13 asp.net iis azure owin katana
我试图了解OWIN和Katana ..当然,应用程序可以自托管,也可以托管在Nancy或非IIS上,这很酷.这个问题的原因是我们想要使用MVC5(VS 2013)创建一个Web应用程序,它将托管在Windows Azure的IIS上.
但是,我们收到了在mvc5应用程序中使用OWIN中间件组件/软件包的建议,以获得可插拔架构,性能等的好处.
我想了解如果我们在MVC5应用程序中使用OWIN中间件将会获得性能提升,该应用程序将托管在Windows Azure中的IIS上.我的应用程序是否会通过使用owin中间件包在IIS管道中跳过很多不必要的东西?当它在IIS上托管时,我可以通过在MVC5中使用OWIN获得任何其他好处吗?
是的,您可能能够跳过管道中的许多不必要的事情,因为您将定义管道中的组件,以及使用应用程序将使用的不一定由您创建的其他组件。这些组件是中间件,因为它们位于处理管道的中间,并且组件可以决定通过 C async/await# 语法将控制权传递给管道中的下一个组件,或者结束该组件的处理。
对象AppFunc是 Katana 中“魔法”发生的地方,因为它是组件被调用时使用的逻辑,签名是这样的:
Func<IDictionary<string, object>, Task>;
Run Code Online (Sandbox Code Playgroud)
注意:
IDictionary<string, object>代表环境值(例如Request和Response;在 ASP.NET 中思考HttpContext),OWIN 标准定义了该字典中必须存在的某些值,例如"owin.RequestBody"或"owin.ResponseBody"。Katana 是 Microsoft 对 OWIN 标准的实现,因此具有开箱即用的这些和其他字典项目。
组件的一个示例是与AppFunc( 的签名相匹配的方法Func<IDictionary<string, object>, Task>,如下所示:
public async Task Invoke(IDictionary<string, object> environment)
{
// Do processing...
// Wait for next component to complete
await _nextComponent(environment);
// Do more processing...
}
Run Code Online (Sandbox Code Playgroud)
注意:OWIN 期望该方法返回
Task或生成异常,因此return null;无效。
那么你怎么知道下一个组件是什么?
组件的构造函数需要接受 参数Func<IDictionary<string, object>, Task>,如下所示:
public class HelloWorldCOmponent
{
Func<IDictionary<string, object>, Task> _next;
public HelloWorldComponent(Func<IDictionary<string, object>, Task> next)
{
_next = next;
}
public async Task Invoke(IDictionary<string, object> environment)
{
// Do something
// Wait for next component to return
await _next(environment);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2298 次 |
| 最近记录: |