admin
管理员
管理员
  • UID1
  • 粉丝0
  • 关注0
  • 发帖数44
  • 社区居民
阅读:704回复:1

在IIS集成管道中使用OWIN Middleware

楼主#
更多 发布于:2015-12-08 06:00


在Katana中启用Windows Authorization

OWIN的架构:
  • Host 管理OWIN pipeline上运行的进程
  • Server 打开一个network socket,,监听请求
  • Middleware 处理HTTP请求并响应
Katana当前提东两种server,都支持Windows Integrated Authentication
  • Microsoft.Owin.Host.SystemWeb 使用IIS的asp.net pipeline
  • Microsoft.Owin.Host.HttpListener 使用System.Net.HttpListener这是Katana的self-host方式的默认选择


在IIS集成管道中使用OWIN Middleware

在IIS集成管道中使用OWIN中间件,,通过将中间件注册到相应的pipeline event

using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; using System.Web; using System.IO; using Microsoft.Owin.Extensions;
[assembly: OwinStartup(typeof(owin2.Startup))] namespace owin2 { public class Startup { public void Configuration(IAppBuilder app) {
            app.Use((context, next) =>
            {
                PrintCurrentIntegratedPipelineStage(context, "Middleware 1"); return next.Invoke();
            });
            app.Use((context, next) =>
            {
                PrintCurrentIntegratedPipelineStage(context, "2nd MW"); return next.Invoke();
            });
            app.Run(context =>
            {
                PrintCurrentIntegratedPipelineStage(context, "3rd MW"); return context.Response.WriteAsync("Hello world");
            });            
        } private void PrintCurrentIntegratedPipelineStage(IOwinContext context, string msg) { var currentIntegratedpipelineStage = HttpContext.Current.CurrentNotification;
            context.Get<TextWriter>("host.TraceOutput").WriteLine( "Current IIS event: " + currentIntegratedpipelineStage
                + " Msg: " + msg);
        }
    }
}
OWIN middleware Components (OMCs)
IAppBuilder UseStageMarker()可以使用设置OMCs在指定的pipeline阶段执行

public void Configuration(IAppBuilder app)
{ app.Use((context, next) =>
    {
        PrintCurrentIntegratedPipelineStage(context, "Middleware 1"); return next.Invoke();
    }); app.Use((context, next) =>
    {
        PrintCurrentIntegratedPipelineStage(context, "2nd MW"); return next.Invoke();
    }); app.UseStageMarker(PipelineStage.Authenticate); app.Run(context =>
    {
        PrintCurrentIntegratedPipelineStage(context, "3rd MW"); return context.Response.WriteAsync("Hello world");
    }); app.UseStageMarker(PipelineStage.ResolveCache);
}
app.UseStageMarker(PipelineStage.Authenticate)使所有此处前面注册的中间件,在authentication阶段执行
OWIN Middleware component(OMC)可以一些阶段:

public enum PipelineStage {  Authenticate = 0,  PostAuthenticate = 1,  Authorize = 2,  PostAuthorize = 3,  ResolveCache = 4,  PostResolveCache = 5,  MapHandler = 6,  PostMapHandler = 7,  AcquireState = 8,  PostAcquireState = 9,  PreHandlerExecute = 10,
}
  1. 默认,OMCs运行在PreHandlerExecute
  2. OWIN pipeline和IIS pipeline是有顺序的。现在设置的pipeline阶段不能早于之后设置的pipeline阶段。否则都将在后一个设置的阶段执行。
jwsgp
侠客
侠客
  • UID88
  • 粉丝0
  • 关注0
  • 发帖数24
沙发#
发布于:2015-12-29 13:54
不错的贴,太喜欢了,大家都顶啊








游客

返回顶部