Либо требуемый уровень олицетворения не обеспечен, или обеспеченный уровень олицетворения является недействительным

у меня возникли некоторые проблемы с сервисом WCF и олицетворением, я перегнал это в простой метод ниже. Служба WCF в настоящее время самостоятельно размещена в exe. Сообщение об исключении "либо требуемый уровень олицетворения не обеспечен, или обеспеченный уровень олицетворения является недействительным". Проверка при возникновении ошибки уровень олицетворения идентификатора устанавливается в делегирование, как указано на моем клиенте и его аутентификация через Kerberos.

Я немного озадачен, как мне кажется, что требования уровня олицетворения и аутентичности были выполнены. Я думаю, что проблема, вероятно, связана с настройками домена, которые я установил и думаю, установлены правильно. Поэтому у меня два вопроса:--3-->

  1. должна ли операция ниже завершиться успешно? (или она испорчена?)
  2. какие настройки необходимо настроить в домене 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 ответов


  1. Он имеет недостатки, пока вы используете класс .NET Process, он всегда будет начинаться с идентификатора родительского процесса. Чтобы запустить его под другим идентификатором, похоже, вам нужно использовать win32 api CreateProcessAsUser (который у меня еще не работает).

  2. мне нужно было запустить его с повышенными правами (т. е. Visual Studio как администратор).