C# WIF和WCF-在关闭AspNetCompatibilityMode的情况下访问Thread.CurrentPrincipal内部服务方法

C# WIF和WCF-在关闭AspNetCompatibilityMode的情况下访问Thread.CurrentPrincipal内部服务方法,c#,silverlight,wcf,wif,claims-based-identity,C#,Silverlight,Wcf,Wif,Claims Based Identity,我有一个web应用程序,其中一个页面上有一个silverlight应用程序。该网站使用WIF进行安全保护。我正在尝试从silverlight向与我的网站位于同一appdomain中的服务进行WCF调用 如果我启用了AspNetCompatibilityMode,那么它可以正常工作。浏览器已通过身份验证,因此当进行WCF调用时,silverlight客户端将发送FedAuth Cookie,WIF将从会话Cookie(FedAuth/FedAuth1)中正确设置HttpContext.Curren

我有一个web应用程序,其中一个页面上有一个silverlight应用程序。该网站使用WIF进行安全保护。我正在尝试从silverlight向与我的网站位于同一appdomain中的服务进行WCF调用

如果我启用了AspNetCompatibilityMode,那么它可以正常工作。浏览器已通过身份验证,因此当进行WCF调用时,silverlight客户端将发送FedAuth Cookie,WIF将从会话Cookie(FedAuth/FedAuth1)中正确设置HttpContext.Current.User

不幸的是,我需要关闭AspNetCompatibilityMode。在本例中,我可以看到silverlight WCF调用仍然将FedAuth cookies传递给服务器,并且SessionAuthenticationModule正确设置了Thread.CurrentPrincipal。不幸的是,sessionauthenticationmodule似乎运行在与我尝试调用的实际WCF方法不同的线程中,因此我在WCF/WIF管道的某个位置丢失了标识

有办法解决这个问题吗?我曾尝试创建SessionAuthenticationModule的自定义实现,并覆盖SetPrincipalFromSessionToken(在其中我可以访问我的声明等),但我不确定我可以将主体存储在哪里,以便在通道处理程序将调用发送到另一个线程上的我的服务后,我可以访问它