У меня есть веб-сайт, размещенный на сервере ServerA, который работает с использованием пула приложений, используя специальный пользовательский атрибут с правами домена для доступа к нашей базе данных. В конфигурационном файле веб-сайта Уточняю:WCF и учетные данные о прохождении окон
<identity impersonate="true" />
Я тогда сервис, который также находится на ServerA и не размещенных в консольного приложения программно (т.е. не конфигурационный файл), как показано ниже.
Uri uri = new Uri("net.tcp://ServerA:9900/Service/");
ServiceHost host = new ServiceHost(typeof(Service1), uri);
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Message;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
ServiceEndpoint serviceEndpoint = host.AddServiceEndpoint(typeof(IService1), binding, uri);
EndpointAddress myEndpointAddress = new EndpointAddress(uri, EndpointIdentity.CreateSpnIdentity("MyspnName"));
serviceEndpoint.Address = myEndpointAddress;
host.Open();
Когда я открываю браузер на моем локальном компьютере и перейти на сайт веб-сайт пытается соединиться с сервером WCF и возвращает ошибку «Запрос на маркер безопасности не может быть удовлетворен, так как проверка не удалась.»
Сайт использует следующий код для подключения к услуге:
Uri uri = new Uri("net.tcp://ServerA:9900/Service/");
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Message;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
EndpointIdentity epid = EndpointIdentity.CreateSpnIdentity("MyspnName");
EndpointAddress endPoint = new EndpointAddress(uri, epid);
//EndpointAddress endPoint = new EndpointAddress(uri);
ChannelFactory<IService1> channel = new ChannelFactory<IService1>(binding, endPoint);
channel.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;
IService1 service = channel.CreateChannel();
service.PrintMessage("Print this message!");
Для PrintMessage, метод, который я звоню, я попробовал [OperationBehavior(Impersonation = ImpersonationOption.Required)]
и .. .Allowed .. но ошибка та же.
Когда я запускаю сайт локально с помощью LocalHost, ошибки нет, и он работает отлично. А также когда я изменяю идентификатор impersonate = "false" в моем web.config, он запускается, но мои учетные данные Windows не передаются в службу WCF, что является целым.
Любые идеи, что мне не хватает? Pls нет общих ссылок, я, наверное, уже прочитал это!
Большое спасибо
Это действительно поможет, если вы разместите фактическую разметку файла конфигурации как часть своего вопроса. Решение может быть таким же простым, как забыть добавить ссылку и т. Д. –