c# – 任务/线程中的CredentialsCache.DefaultCredentials
我希望你能帮助我.
我在我的C#4.0应用程序中进行了一些需要身份验证的webrequests.我只是使用CredentialsCache.DefaultCredentials.只要我不通过Task< T> .Factory.StartNew(…)在不同的线程/任务中运行该功能,这就很有用.然后我得到401错误.我假设凭证不会传递给子线程? 如何将凭据传递给任何子任务/线程? 解决方法
我假设你正在使用模拟,问题是凭据没有流入任务.通过倾销
Windows.Identity.GetCurrent()的值来检查这一点以保存一个疯狂的追逐是值得的.在启动代码和任务体中都有名称,并确保它符合您的期望.
因此,鉴于上述情况,有两种方法(正式地说)执行上下文(或只是安全上下文)不是跨线程流动的.默认行为是上下文流动 – 所以必须影响它. 1)Something设置了ExecutionContext.SuppressFlow() – 您可以通过在任务中转储ExecutionContext.IsFlowSuppressed()的值来检查这一点. 2)有一个配置元素< legacyImpersonationPolicy> (conifguration-> runtime-> legacyImpersonationPolicy)默认为false.如果为false,则WindowsIdentity会在非同步点上流动.如果是真的那就不是.这与ExecutionContext流设置无关.这么真实会给你带来麻烦.您可以通过转储SecurityContext的值来检查这一点.IsWindowsIdentityFlowSuppressed()是您的任务.这也可以使用SecurityContext.SuppressFlowWindowsIdentity()以编程方式为每个线程设置. 最后,为了完整性,如果您使用的是非托管代码,则还有另一个设置< alwaysFlowImpersonationPolicy>它控制着非模仿凭据在非托管方案中的流动方式;描述的其他设置仅影响托管代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |