Я получаю сообщение об ошибке «Нет конечной точки, прослушивающей 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'): пройти Decorator_argspec = inspect.getargspec (func2) Как можно ...
Учитывая функцию:
def func(f1, kw='default'):
pass
bare_argspec = inspect.getargspec(func)
@decorator
def func2(f1, kw='default'):
pass
decorated_argspec = inspect.getargspec(func2)
Как я могу создать декоратор, такой, что bare_argspec == Decorated_argspec
?
(Почему, фреймворк, который вызывает декорированную функцию, выполняет проверку argspec, чтобы выбрать, что передать, поэтому декоратор должен сохранить тот же самый argspec, чтобы играть хорошо. Когда я задал этот вопрос на #python, я получил длинную речь о том, почему фреймворк отстой, это не то, что я ищу; я должен решить проблему здесь. Кроме того, меня тоже интересует ответ)