У меня есть служба WCF, размещенная в общей среде (мы арендуем пространство у компании, предоставляющей веб-хостинг, но у нас есть выделенный пул приложений), и я получил веб-приложение asp.net, которое вызывает службу wcf. Оба проекта являются проектами .NET 4.
Если я запускаю свое веб-приложение из VS2010, я могу легко выполнять вызовы wcf. Однако у меня будут исключения, если я опубликую веб-сайт в этой общей среде и сделаю оттуда вызовы wcf.
Детали исключения:
[FaultException: запрос маркера безопасности не может быть удовлетворен из-за сбоя проверки подлинности.] System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault (сообщение сообщения, цель EndpointAddress) +5499790 System.ServiceModel.Security.SspiNegotiationTokenProviderovider.GetNextOutputationTokenProviderovider.GetNextOthers ) +49
[SecurityNegotiationException: вызывающая сторона не была аутентифицирована службой.] System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) +9464367 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke type (ms ) +345
Я также публикую сайт на своей локальной машине, он тоже работает.
Вот моя конфигурация на стороне сервера:
<wsHttpBinding>
<binding name="wsHttpBinding" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
transactionFlow="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="2147483647"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
</wsHttpBinding>
Код на стороне клиента:
factory.Credentials.Windows.Username = "user";
factory.Credentials.Windows.Password = "psw";
factory = new ChannelFactory<IService>(binding, serviceAddress);
factory.Open();
service = factory.CreateChannel();
Я хочу использовать wsHttpBinding вместо basicHttpBinding, и мне нужна некоторая безопасность, поэтому я не хочу устанавливать для режима безопасности значение None.
Версия IIS - 7 в Windows 2008 R2, и в ней разрешена анонимная проверка подлинности. Выдача себя за другое лицо на Asp.net отключена.
Я не думаю, что в этих настройках что-то не так, потому что они работают, если я запускаю проект веб-сайта из VS2010.
Спасибо за любую помощь.
Сяосу