我在我的C#4.0应用程序中进行了一些需要身份验证的webrequests.我只是使用CredentialsCache.DefaultCredentials.只要我不通过Task< T> .Factory.StartNew(…)在不同的线程/任务中运行该功能,这就很有用.然后我得到401错误.我假设凭证不会传递给子线程?
如何将凭据传递给任何子任务/线程?
解决方法
因此,鉴于上述情况,有两种方法(正式地说)执行上下文(或只是安全上下文)不是跨线程流动的.默认行为是上下文流动 – 所以必须影响它.
1)Something设置了ExecutionContext.SuppressFlow() – 您可以通过在任务中转储ExecutionContext.IsFlowSuppressed()的值来检查这一点.
2)有一个配置元素< legacyImpersonationPolicy> (conifguration-> runtime-> legacyImpersonationPolicy)默认为false.如果为false,则WindowsIdentity会在非同步点上流动.如果是真的那就不是.这与ExecutionContext流设置无关.这么真实会给你带来麻烦.您可以通过转储SecurityContext的值来检查这一点.IsWindowsIdentityFlowSuppressed()是您的任务.这也可以使用SecurityContext.SuppressFlowWindowsIdentity()以编程方式为每个线程设置.
最后,为了完整性,如果您使用的是非托管代码,则还有另一个设置< alwaysFlowImpersonationPolicy>它控制着非模仿凭据在非托管方案中的流动方式;描述的其他设置仅影响托管代码.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。