情况WCF,WebAPI和OWIN IIS集成管道。跳过基于路线的OWIN
我有一个使用WCF后端的Silverlight应用程序。展望未来,我们已经转向使用WebAPI的JS客户端。
我有几个WebAPI控制器,我想从Silverlight客户端使用,因此他们加载了承载WCF服务的ASP.Net应用程序。
从“所有服务都可用”的角度来看,这可以正常工作,但是对于WCF调用,将多次调用授权;从OWIN和通过WCF ServiceAuthorizationManager
在WCF端,我的ServiceAuthorizationManager实现验证AuthHeader中的令牌,然后转换该令牌(在System.IdentityModel声明转换意义上)。在WebAPI方面,我使用的是Thinktecture.IdentityModel,它提供OWIN中间件来执行令牌验证和声明转换。
问题是,OWIN中间件被调用了所有请求(包括WCF请求)。所以在WCF请求的情况下,我会执行两次验证和转换。我不能只删除ServiceAuthorizationManager并让中间件处理它,因为WCF不知道OWIN,ServiceAuthorizationManager的最后一步是设置操作上下文主体(与ClaimsPrincipal.Current不同)。
问题
有没有人有这样的问题之前,WCF和的WebAPI并肩而坐?最好的办法是在WCF调用的很早之前以某种方式退出OWIN管道,如果可以的话,通过OMC如何做到这一点?或者我可以以某种方式使用IAppBuilder.Map方法仅注册API路径的标记验证和转换组件(在这种情况下,任何启动/ api)?
如果有人可以解释为什么'app.Mapp'版本不起作用,将不胜感激? –
我有同样的问题:MapWhen与显式匹配谓词工作,而Map没有。 –