gpt4 book ai didi

c# - 任务/线程中的 CredentialsCache.DefaultCredentials

转载 作者:行者123 更新时间:2023-11-30 12:34:10 24 4
gpt4 key购买 nike

我希望你能帮助我。

我正在我的 C# 4.0 应用程序中执行一些需要身份验证的 Web 请求。我只是使用 CredentialsCache.DefaultCredentials .只要我不通过 Task<T>.Factory.StartNew(...) 在不同的线程/任务中运行功能,这就很好用。 .然后我收到 401 错误。我假设凭据没有传递给子线程?

如何将凭据传递给任何子任务/线程?

最佳答案

我假设您正在使用模拟并且问题凭据没有流入任务。值得检查这一点,以通过转储 Windows.Identity.GetCurrent().Name 的值来避免徒劳无功。在启动代码和任务主体中,并确保它符合您的预期。

鉴于上述情况,有几种方式(正式地说)执行上下文(或只是安全上下文)不会跨线程流动。默认行为是上下文流动的——所以一定是有什么东西在影响它。

1) 设置了一些东西 ExecutionContext.SuppressFlow() - 您可以通过转储 ExecutionContext.IsFlowSuppressed() 的值来检查这一点在任务中。

2) 有一个配置元素<legacyImpersonationPolicy> (configuration->runtime->legacyImpersonationPolicy) 默认为 false .当false , WindowsIdentity 流过异步点。当true不是。这与 ExecutionContext 流程设置无关。所以true这会给你带来麻烦。您可以通过转储 SecurityContext.IsWindowsIdentityFlowSuppressed() 的值来检查这一点是你的任务。这也可以通过编程方式设置每个线程 SecurityContext.SuppressFlowWindowsIdentity() .

最后,为了完整起见,如果您使用非托管代码,还有另一个设置 <alwaysFlowImpersonationPolicy>控制模拟凭证在非托管场景中的流动方式;描述的其他设置仅影响托管代码。

关于c# - 任务/线程中的 CredentialsCache.DefaultCredentials,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com