В обновляемом проекте я должен использовать службу WCF (Служба A), опубликованную третьей стороной (без контроля) в моей службе WCF. Я использую ServiceA в проекте My Web App (vs2008), и он работает нормально.
Я начал с добавления ссылки на службу в свой проект WCF (ServiceB). Допустим, название службы - «XYZ». VS создал все необходимые файлы, но когда я попытался скомпилировать, он дал ошибку
Имя типа «XYZ» не существует в типе «ServiceB.ServiceB»;
В моей "Service B" есть "ServiceB.SVC"
Я попытался решить эту проблему, удалив пространство имен «ServiceB». из файла Reference.cs и его содержимого. Затем этот код можно было скомпилировать.
Теперь я получаю исключение, что
«Вызывающий абонент не был аутентифицирован службой».
Внутреннее исключение
Запрос токена безопасности не может быть удовлетворен из-за сбоя аутентификации.
в System.ServiceModel.Security.SecurityUtils.ThrowIfNegotiationFault (сообщение сообщения, целевой адрес EndpointAddress) в System.ServiceModel.Security.SspiNegotiationTokenProvider.GetNextOutgoingMessageBody (сообщение incomingMessage, SspiNegotiationStateState
=>
((System.ServiceModel.FaultException) (ex.InnerException)). Сообщение Не удалось удовлетворить запрос токена безопасности из-за ошибки аутентификации.
Файл Web.Config на ServiceB выглядит следующим образом:
<wsHttpBinding>
<binding name="WSHttpBinding_IABCService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://aaaaa/ ServiceA.svc"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IABCService"
contract="XYZ.IABCService" name="WSHttpBinding_IABCService">
<identity>
<servicePrincipalName value="host/[hostname]" />
</identity>
</endpoint>
</client>
======
Я заставил себя поверить, что проблема может заключаться в доступе WCF к WCF. Я создал веб-службу (.asmx) и добавил ссылку на ServiceA. Когда я отлаживаю, вызывая метод, я получаю результаты от ServiceA. Надеясь, что это решение, которое я смогу использовать, пока не выясню между проблемами WCF и WCF, я добавил ссылку на службу asmx в свою службу WCF (ServiceB). Когда я отлаживаю, запустив ServiceB -> asmx -> Service A, я снова получаю ошибку аутентификации из-за ошибки пользователя !!!
Я считаю, что это как-то связано с выдачей личности за личность ...
Я читал, что ServiceB web.config имеет приоритет над asmx web.config, но я не смог найти решение.
Я не могу выключить «Security Mode = None», так как тогда служба A отвечает, говоря, что токены не были переданы.
Любая помощь будет принята с благодарностью: помните, что я могу использовать WC Service A из WebApp и из asmx, но не из другого WCF напрямую или косвенно.
Спасибо
Мар