Эта ошибка появляется при развертывании сайта на сервере, но корректно работает на моем компьютере разработчика.
Позвольте мне кратко рассказать о том, как все настроено.
Приложение ( WebApp ) развертывается в Windows Server 2008 с пакетом обновления 2 (SP2) под управлением IIS 7.0. На сайте есть два приложения: WebApp и WebService . Сервер не является частью домена, но находится в локальной сети.
WebService содержит веб-службу WCF (svc) и не может быть изменен. Я могу подключиться к этому и использовать его как положено.
Я обновил WebApp до ASP.NET 4 с ASP.NET 3.5 sp1, в которой есть клиентский прокси для веб-службы WCF (создается путем добавления ссылки на службу). До обновления все работало правильно. После обновления я могу запустить его и правильно использовать его из своего окна разработчика (в домене), и он может использовать WebService , как и ожидалось. Когда я развертываю сайт на сервере и получаю к нему доступ, я получаю следующую ошибку ( обновляется с помощью трассировки стека, включает только первую строку после каждого сообщения ):
[Win32Exception (0x80004005): The Security Support Provider Interface (SSPI) negotiation failed.]
System.ServiceModel.Security.WindowsSspiNegotiation.GetOutgoingBlob(Byte[] incomingBlob, ChannelBinding channelbinding, ExtendedProtectionPolicy protectionPolicy) +3705927
[SecurityNegotiationException: SOAP security negotiation with 'http://server.mydoamin.com/WebService/TestService.svc' for target 'http://server.mydoamin.com/WebService/TestService.svc' failed. See inner exception for more details.]
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +9464367
[HttpException (0x80004005): SOAP security negotiation with 'http://server.mydoamin.com/WebService/TestService.svc' for target 'http://server.mydoamin.com/WebService/TestService.svc' failed. See inner exception for more details.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +9028953
[HttpException (0x80004005): SOAP security negotiation with 'http://server.mydoamin.com/WebService/TestService.svc' for target 'http://server.mydoamin.com/WebService/TestService.svc' failed. See inner exception for more details.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +8950644
Единственное изменение, которое я сделал в IIS, было установить пул приложений на .NET 4.
Я протестировал и могу подключиться и использовать WebService с компьютера, не входящего в домен, без каких-либо проблем. И он отлично работает из моей коробки разработчика (на домене).
Я использую wsHttpBinding и аутентифицируюсь с помощью имени пользователя / пароля локальной (для сервера) учетной записи пользователя Windows. Я установил имя пользователя / пароль в свойстве ClientCredentials.Windows.ClientCredential клиентского прокси.
Вот мой конфиг безопасности под привязкой клиента (все это автоматически, я не изменил его, добавив ссылку на сервис):
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
<message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true"/>
</security>
Опять же, все работает правильно, если сайт asp.net запускается не с сервера, а из другого места.
Буду признателен за любые предложения. Спасибо!