c# – 未提供所需的模拟级别,或者提供的模拟级别无效
发布时间:2020-12-15 07:54:41 所属栏目:百科 来源:网络整理
导读:我在使用WCF服务和模拟时遇到了一些问题,我已将其提炼为下面的简单方法. WCF服务目前在exe中自托管.异常消息是“未提供所需的模拟级别,或者提供的模拟级别无效”.检查错误何时抛出,Identity ImpersonationLevel设置为委托,如我的客户端上指定的,并通过Kerber
我在使用WCF服务和模拟时遇到了一些问题,我已将其提炼为下面的简单方法. WCF服务目前在exe中自托管.异常消息是“未提供所需的模拟级别,或者提供的模拟级别无效”.检查错误何时抛出,Identity ImpersonationLevel设置为委托,如我的客户端上指定的,并通过Kerberos进行身份验证.
我有点困惑,因为在我看来ImpersonationLevel和Authenticaiton的要求已经得到满足.我的想法是问题可能与域设置有关,我已经设置并认为设置正确.所以我有两个问题: >下面的操作应该成功吗? (或者它有缺陷吗?) 代码如下: [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文件内容
解决方法
>只要您使用.NET Process类,它就会有缺陷,它始终以父进程的标识开头.要在另一个身份下运行它,看起来你必须使用win32 api CreateProcessAsUser(我还没有工作). >我需要提升它(即Visual Studio作为管理员).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |