Случайное исключение AuthenticationManager CustomTargetNameDictionary при вызове службы WCF - PullRequest
3 голосов
/ 07 августа 2009

Я получаю эту ошибку при вызове службы WCF из приложения ASP.Net:

Unhandled Exception: System.InvalidOperationException

System.InvalidOperationException: The entry found in AuthenticationManager's CustomTargetNameDictionary for {URL} does not match the requested identity of host/{Hostname}.

Server stack trace: 
   at System.ServiceModel.Channels.HttpTransportSecurityHelpers.AddIdentityMapping(Uri via, EndpointAddress target)
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.PrepareOpen()
   at System.ServiceModel.Channels.HttpsChannelFactory.HttpsRequestChannel.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.OnOpen(TimeSpan timeout)
   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel.ICallOnce.Call(ServiceChannel channel, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(TimeSpan timeout, CallOnceManager cascade)
   at System.ServiceModel.Channels.ServiceChannel.EnsureOpened(TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Самое странное в этом то, что я не могу воспроизвести его ни на одной машине, кроме наших производственных веб-серверов, и это происходит только время от времени. Служба требует активной проверки подлинности каталога, но я уверен, что пользователь имеет правильный набор разрешений.

Кажется, это не проблема с настройкой WCF, потому что она иногда работает, и другие приложения безошибочно вызывают те же службы.

Я уже пытался полностью воссоздать пользователя, воссоздать пул приложений, в котором он работает, и переустановить приложение. Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Я столкнулся с той же проблемой с той же ошибкой. Это делало мою голову, но я нашел решение.

Кажется, это проблема кеширования в клиентских библиотеках WCF. Похоже, что для каждого URL-адреса веб-службы запоминается идентификатор конечной точки. Если к одному веб-сервису поступают два запроса из кода в одном и том же пуле приложений, вы получите сообщение об ошибке, если они не используют точно такой же идентификатор.

В моей ситуации одна личность использовала верхний регистр, а другая - нижний регистр. В результате любой код, который был вызван первым, будет продолжать работать нормально, но любой код, использующий второе удостоверение, будет постоянно терпеть неудачу, пока пул приложений не будет перезапущен.

Мой код выглядит следующим образом

// ** Specify an identity (any identity) in order to get it past .net3.5 sp1
EndpointIdentity epi = EndpointIdentity.CreateUpnIdentity("unknown");
EndpointAddress epa = new EndpointAddress(new Uri(address), epi);

Другой бит кода использовал «Неизвестно», а не «неизвестно»

0 голосов
/ 20 августа 2009

Похоже, что это соответствует «старой» проблеме с «сломанной имитацией». Какая часть или ваши решения работают с учетными данными? Если ваш веб-пользователь (даже если он вошел в ваш домен) правильно олицетворяет себя в приложении ASP.net, ваша цепочка может прерваться при вызове WS (и, следовательно, AD). Поэтому убедитесь, что ваш WS работает с пользовательским контекстом, и ему разрешен доступ к частям AuthManager. Если вам нужно, убедитесь, что делегирование Kerberos включено либо для учетной записи пользователя, либо для учетных записей компьютера.

(Вы можете не увидеть эту проблему при разработке на своем ПК, потому что вы, вероятно, работаете от имени администратора и имеете права «отладки».)

НТН, Томас

...