Ошибка WCF: вызывающая сторона не была аутентифицирована службой
Я пытаюсь получить доступ к моей службе WCF на сервере из своего клиентского консольного приложения для тестирования. Я получаю следующую ошибку:
Вызывающий не был аутентифицирован служба
Я использую wsHttpBinding
. Я не уверен, какая проверка подлинности ожидается?
<behaviors>
<serviceBehaviors>
<behavior name="MyTrakerService.MyTrakerServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
Обновление
Он работает, если я меняю привязку к <endpoint "basicHttpBinding" ... />
(из wsHttpBinding)
на сервере IIS 7.0, сервере Windows 2008
Ответы
Ответ 1
Если вы используете basicHttpBinding, настройте защиту конечной точки на "Нет" и переносите clientCredintialType на "Нет".
<bindings>
<basicHttpBinding>
<binding name="MyBasicHttpBinding">
<security mode="None">
<transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="MyService">
<endpoint
binding="basicHttpBinding"
bindingConfiguration="MyBasicHttpBinding"
name="basicEndPoint"
contract="IMyService"
/>
</service>
Кроме того, убедитесь, что методы проверки подлинности в IIS разрешают анонимный доступ
Ответ 2
Я понял.
Если вы хотите использовать wshttpbinding, вам нужно добавить учетные данные Windows, как показано ниже.
svc.ClientCredentials.Windows.ClientCredential.UserName = "abc";
svc.ClientCredentials.Windows.ClientCredential.Password = "xxx";
спасибо
Ответ 3
Вы пытались использовать basicHttpBinding вместо wsHttpBinding? Если вам не нужна аутентификация, а реализация Ws- * не требуется, вам, вероятно, будет лучше с простым старым basicHttpBinding. WsHttpBinding реализует WS-Security для обеспечения безопасности и аутентификации сообщений.
Ответ 4
установить анонимный доступ в вашем виртуальном каталоге
напишите следующие учетные данные для вашей службы
ADTService.ServiceClient adtService = new ADTService.ServiceClient();
adtService.ClientCredentials.Windows.ClientCredential.UserName="windowsuseraccountname";
adtService.ClientCredentials.Windows.ClientCredential.Password="windowsuseraccountpassword";
adtService.ClientCredentials.Windows.ClientCredential.Domain="windowspcname";
после этого вы вызываете свои методы webservice.
Ответ 5
Если вы используете сам сайт, подобный мне, способ избежать этой проблемы (как описано выше) заключается в том, чтобы указать как на стороне хоста, так и на стороне клиента, что режим безопасности wsHttpBinding = NONE.
При создании привязки, как на клиенте, так и на хосте, вы можете использовать этот код:
Dim binding as System.ServiceModel.WSHttpBinding
binding= New System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None)
или
System.ServiceModel.WSHttpBinding binding
binding = new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None);
Ответ 6
Мы столкнулись с странной проблемой, когда в папке, где размещалась служба WCF, были некоторые разрешения, которые вызывали проблему.
Ответ 7
если необходимо указать домен (который проверяет имя пользователя и пароль, который использует клиент) в webconfig, вы можете поместить это в раздел service.serviceModel services:
<identity>
<servicePrincipalName value="example.com" />
</identity>
и в клиенте укажите домен и имя пользователя и пароль:
client.ClientCredentials.Windows.ClientCredential.Domain = "example.com";
client.ClientCredentials.Windows.ClientCredential.UserName = "UserName ";
client.ClientCredentials.Windows.ClientCredential.Password = "Password";
Ответ 8
Мне удалось решить общую проблему, выполнив следующие шаги:
- Перейдите в IIS → Сайты → Ваш сайт →
- Панель свойств → Аутентификация
- Установите Анонимная аутентификация на Отключено
- Установите Аутентификация Windows на Включено
![введите описание изображения здесь]()
Ответ 9
Это может быть вызвано, если клиент находится в другом домене, чем сервер.
Я столкнулся с этим при тестировании одного из моих приложений с моего ПК (клиента) на моем (облачном) сервере тестирования и простейшем решении, о котором я мог думать, было создание vpn.
Ответ 10
Почему вы не можете просто удалить параметр безопасности вообще для wsHttpBinding ( "none" вместо "message" или "transport" )?