【问题标题】:How do I get a .net web service call to stop impersonating to perform a task如何获得 .net Web 服务调用以停止模拟执行任务
【发布时间】:2023-03-04 09:49:01
【问题描述】:

我有一个运行 Windows 身份验证和模拟设置为 true 的 .net Web 服务。但是,当应用程序连接到数据库时,它需要停止模拟并作为应用程序池的服务帐户运行。

我的理解一直是停止模仿的方法是运行以下代码。

WindowsImpersonationContext ctx = WindowsIdentity.Impersonate(IntPtr.Zero);

然后当我想重新开始模仿时

ctx.Undo();

但由于某种原因,当我运行我的代码时,它永远不会停止模拟调用用户,而是继续作为该用户,并且无法连接到使用集成安全性且只有服务帐户具有数据库访问权限的 sql db。

为了让它正常工作,我在这里缺少什么?

【问题讨论】:

  • stackoverflow.com/questions/125096/… 确认您的方法。当您说“它永远不会停止模拟”时,您是从调试会话中知道的,还是仅仅通过 SQL 连接失败的事实知道这一点?在“expersonation”之后,是否肯定在同一个线程中进行了连接尝试?
  • 啊......我的错我没有检查身份的正确位置。它似乎工作正常。我正在检查 HttpContext 而不是 WIndowsIdentity。 sql 失败是由于一个单独的问题,这似乎证实了我最初的假设。

标签: c# asp.net


【解决方案1】:

看来我用的方法没问题。该错误是 sql 连接的问题,并且假设是 Impersonation 失败了。我通过使用错误的检查来验证身份来确认我的假设。我原来问题中的代码确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多