Установка SPN на адресе конечной точки для конечной точки службы NetNamedPipe

Я получаю сообщение об ошибке «Нет конечной точки, прослушивающей net.pipe: // localhost», как описано в других местах, но я не могу найти настоящего ответа.

Это отличный идентификатор проблемы: http://kennyw.com/indigo/102

При использовании WCF, проверка подлинности Windows выполняется через SSPI-Negotiate, который в большинстве случаев выберет Kerberos как фактическая аутентификация механизм. Однако, если целевой SPN передано в SSPI - это правильно сформированный SPN для учетной записи локального компьютера (например, host / [имя машины DNS]), затем Negotiate будет использовать NTLM (loopback оптимизация) и токен доступа не будет иметь идентификатор безопасности сети (и поэтому будет использоваться с NetNamedPipes).

Но он не говорит мне, как решить проблему. Я создаю свою конечную точку программно.

var binding = new NetNamedPipeBinding();
binding.Security.Mode = NetNamedPipeSecurityMode.Transport;
binding.Security.Transport.ProtectionLevel = ProtectionLevel.EncryptAndSign;

var id = EndpointIdentity.CreateSpnIdentity("host/" + Environment.MachineName);
var endpointAddress = new EndpointAddress(new Uri(serviceClientUrl), id);

var client = new ServiceClient(binding, endpointAddress);

Я предполагаю, что моя проблема заключается в CreateSpnIdentity, но я не уверен, какое значение использовать.

Дополнительная информация: Чтобы уточнить это, чтобы получить больше контекста. Служба Wcf размещается как служба Windows, работающая под учетной записью NetworkService (я пробовал локальную систему). Служба создается с использованием конструктора NetNamedPipeBinding по умолчанию:

host.AddServiceEndpoint(typeof(IService), new NetNamedPipeBinding(), "ServiceName");

Я создал веб-часть SharePoint, которая использует эту службу. Особенность заключается в том, что если сайт SharePoint настроен на проверку подлинности на основе форм или просто имя компьютера используется в URL-адресе в разделе «Проверка подлинности Windows», то проблем нет. ТОЛЬКО , если для URL-адреса при аутентификации Windows используется полное имя компьютера, я получаю указанную выше ошибку.

Я почти уверен, что это связано с проблемами NTLM Kerberos, описанными в статье, но Я не знаю, как это обойти. bare_argspec = inspect.getargspec (функция) @decorator def func2 (f1, kw = 'default'): пройти

У меня есть этот код для создания локального пользователя Windows

public static bool CreateLocalWindowsAccount(string username, string password, string displayName, string description, bool canChangePwd, bool pwdExpires)
    {

        try
        {
            PrincipalContext context = new PrincipalContext(ContextType.Machine);
            UserPrincipal user = new UserPrincipal(context);
            user.SetPassword(password);
            user.DisplayName = displayName;
            user.Name = username;
            user.Description = description;
            user.UserCannotChangePassword = canChangePwd;
            user.PasswordNeverExpires = pwdExpires;
            user.Save();


            //now add user to "Users" group so it displays in Control Panel
            GroupPrincipal group = GroupPrincipal.FindByIdentity(context, "Users");
            group.Members.Add(user);
            group.Save();

            return true;
        }
        catch (Exception ex)
        {
            LogMessageToFile("error msg" + ex.Message);
            return false;
        }

    }

Я пробовал это на своей машине, он отлично работает. но затем я поставил это на сервер Windows. и попытался создать пользователя там.

Сначала я получил сообщение об ошибке «Общий доступ запрещен» поэтому я сделал пользователя администратором

, но теперь я получаю сообщение об ошибке «Сетевой путь не найден»

, как я могу решить эту ошибку .. спасибо

10
задан user175084 16 September 2010 в 18:02
поделиться