Настройка имени участника-службы на конечной точке для конечной точки службы NetNamedPipe - PullRequest
6 голосов
/ 16 сентября 2010

Я получаю сообщение об ошибке "Не было прослушивания конечной точки на 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, описанными встатья, но я не уверен, как обойти это.

Ответы [ 2 ]

3 голосов
/ 11 января 2011

Установка идентификатора конечной точки на стороне клиента вам не поможет, поскольку проблема заключается в контексте безопасности, в котором выполняется код вашего клиента, а не в конфигурации конечной точки. Как объясняет Кенни * , если вы обращаетесь к приложению SharePoint, используя полное доменное имя компьютера, маркер олицетворения в процессе веб-сервера (который обеспечивает вашу идентификацию пользователя SharePoint при аутентификации Windows) будет получен через Kerberos и иметь членство в группе NETWORK USERS. Если вы используете только имя компьютера, то, на что ссылается Кенни, вы получаете токен входа через NTLM, который не входит в группу NETWORK USERS и поэтому ему не запрещен доступ через ACL, которые WCF помещает как в канал, так и в объект общей памяти. где сервер публикует фактическое имя канала.

Ошибка There was no endpoint listening at net.pipe://localhost... не обязательно означает, что не существует службы WCF, прослушивающей такую ​​конечную точку именованного канала: это также может (и в этом случае означает), что, хотя она есть, у вас нет достаточного доступа права знать об этом, потому что у вас есть удаленный вход.

2 голосов
/ 16 сентября 2010

После затвердевания NamedPipe возникла боль в задней части: http://msdn.microsoft.com/en-us/library/bb757001.aspx Это фактически заставило меня перейти с NamedPipe на TCP, когда мне нужно было общаться на той же машине.

Теперь это не значит, что это ваша проблема. Если вы работаете под одной учетной записью и пытаетесь подключиться под другой учетной записью, это обычно не удается, поскольку именованные каналы больше не создаются как глобальные (если это не LocalSys).

Мое предложение:

1) Устранить всю безопасность от вашего обслуживания. В конце концов, NamedPipe работает на той же машине, и я считаю, что обычно безопасность не требуется. 2) Попробуйте подключиться. если это не удается, используйте SysInternals ProcExplorer, чтобы увидеть, какие объекты запущены. Если у него есть именованная труба, то это закалка.

Если вы дадите больше информации, я смогу помочь вам больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...