Либо требуемый уровень олицетворения не обеспечен, или обеспеченный уровень олицетворения является недействительным
у меня возникли некоторые проблемы с сервисом WCF и олицетворением, я перегнал это в простой метод ниже. Служба WCF в настоящее время самостоятельно размещена в exe. Сообщение об исключении "либо требуемый уровень олицетворения не обеспечен, или обеспеченный уровень олицетворения является недействительным". Проверка при возникновении ошибки уровень олицетворения идентификатора устанавливается в делегирование, как указано на моем клиенте и его аутентификация через Kerberos.
Я немного озадачен, как мне кажется, что требования уровня олицетворения и аутентичности были выполнены. Я думаю, что проблема, вероятно, связана с настройками домена, которые я установил и думаю, установлены правильно. Поэтому у меня два вопроса:--3-->
- должна ли операция ниже завершиться успешно? (или она испорчена?)
- какие настройки необходимо настроить в домене 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()
1 ответов
Он имеет недостатки, пока вы используете класс .NET Process, он всегда будет начинаться с идентификатора родительского процесса. Чтобы запустить его под другим идентификатором, похоже, вам нужно использовать win32 api CreateProcessAsUser (который у меня еще не работает).
мне нужно было запустить его с повышенными правами (т. е. Visual Studio как администратор).