未提供所需的模拟级别,或者提供的模拟级别无效
我在使用WCF服务和模拟时遇到了一些问题,我已将其提炼为下面的简单方法。 WCF服务目前在exe中自托管。 exception消息是“未提供所需的模拟级别,或者提供的模拟级别无效”。 检查错误何时抛出,Identity ImpersonationLevel设置为委托,如我的客户端上指定的,并通过Kerberos进行身份validation。
我有点困惑,因为在我看来ImpersonationLevel和Authenticaiton的要求已经得到满足。 我的想法是问题可能与域设置有关,我已经设置并认为设置正确。 所以我有两个问题:
- 下面的操作应该成功吗? (或者它有缺陷吗?)
- 需要在Win2k8域上配置哪些设置才能使其正常工作? 我正在使用两个属于同一个Win2k8域的成员(它是一个新域和非常香草,旨在测试模拟)。
代码如下:
[OperationBehavior(Impersonation = ImpersonationOption.Required)] public string Test() { WindowsIdentity identity = ServiceSecurityContext.Current.WindowsIdentity; using (identity.Impersonate()) { ProcessStartInfo pi = new ProcessStartInfo(@"c:temptest.bat"); pi.UseShellExecute = false; pi.RedirectStandardOutput = true; Process p = Process.Start(pi); // exception thrown here! p.WaitForExit(); string o = p.StandardOutput.ReadToEnd(); return o; } }
例外细节:
Win32Exception occurred: Either a required impersonation level was not provided, or the provided impersonation level is invalid at System.Diagnostics.Process.CreatePipeWithSecurityAttributes(SafeFileHandle& hReadPipe, SafeFileHandle& hWritePipe, SECURITY_ATTRIBUTES lpPipeAttributes, Int32 nSize) at System.Diagnostics.Process.CreatePipe(SafeFileHandle& parentHandle, SafeFileHandle& childHandle, Boolean parentInputs) at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at System.Diagnostics.Process.Start() at System.Diagnostics.Process.Start(ProcessStartInfo startInfo) at MonetEnterprise.Service.SecurityService.Test()
Test.bat文件内容
echo%username%
-
只要您使用.NET Process类,它就会有缺陷,它始终以父进程的标识开头。 要在另一个身份下运行它,看起来你必须使用win32 api CreateProcessAsUser(我还没有工作)。
-
我需要提升它(即Visual Studio作为管理员)。
上述就是C#学习教程:未提供所需的模拟级别,或者提供的模拟级别无效分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/983422.html