1

问题 :

具有一个通用 Windows 帐户权限的 SQ 服务器设置。

客户 :

使用 EntityFramework 的 WPF 应用程序。

类似于这些:

LogonUserEx,DuplicateTokenEx 用于在 C# 中使用 ObjectContext 进行模拟

数据库连接模拟失败

这些都没有明确的解决方案。在尝试了很多不同的选项并失败后,我开始学习基础知识。

使用 MSDN 示例创建了一个控制台应用程序

http://msdn.microsoft.com/en-us/library/chf6fbt4.aspx

另外,尝试了简单的模仿

您如何在 .NET 中进行模拟?

但是,我不断收到 System.StackOverflowException 是未处理的异常 {无法评估表达式,因为当前线程处于堆栈溢出状态。}

在这一行之后:

 bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),
                LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
                out safeTokenHandle);

            Console.WriteLine("LogonUser called.");

当我尝试使用 LOGON_TYPE

using (SimpleImpersonation.Impersonation.LogonUser("domain", "user", "password", SimpleImpersonation.LogonType.Network))
{
   Console.WriteLine(WindowsIdentity.GetCurrent().Name);

        }

LogonType.Network 是唯一一个不给出异常的。它会显示新的用户名。

但是,当我尝试:

using (SimpleImpersonation.Impersonation.LogonUser("domain", "user", "password", SimpleImpersonation.LogonType.Network))
        {
            Console.WriteLine(WindowsIdentity.GetCurrent().Name);  // works as expected , correct user name
            try
            {
                model.MyEntities te = new MyEntities();
                model.PMGroup p = te.PMGroups.Where(g => g.ID == 1).FirstOrDefault();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message  + Environment.NewLine  + e.InnerException.Message);
            }

        }

我明白了:底层提供程序在打开时失败。

用户“NT AUTHORITY\ANONYMOUS LOGON”登录失败。

我会以新用户的身份连接而不是匿名。

更新:

如果项目目标是 .Net3.5 或更低版本,则模拟有效。它不适用于 .Net 4 和 .Net 4.5

也许我在处理这个问题时都错了。如果您有任何想法或建议,请分享。

谢谢

4

0 回答 0