Я получаю сообщение об ошибке "Не было прослушивания конечной точки на net.pipe: // localhost", как описано в других местах, но я не могу найти настоящий ответ.
Это отличный идентификаторпроблемы: http://kennyw.com/indigo/102
При использовании WCF аутентификация Windows выполняется через SSPI-Negotiate, которое в большинстве случаев выберет Kerberos в качестве фактического механизма аутентификации.Однако если целевой SPN, переданный в SSPI, является правильно сформированным SPN для учетной записи локального компьютера (например, host / [имя компьютера dns]), тогда Negotiate будет использовать NTLM (оптимизация обратной связи), а у маркера доступа не будет SID сети (ипоэтому будет использоваться с 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, описанными встатья, но я не уверен, как обойти это.