Настройка учетных данных для приложения WCF?
Я написал простое приложение, которое использует WCF для связи между клиентом и сервером. Когда я запускаю его локально, он отлично работает, однако, когда я запускаю сервер и клиент на двух разных ящиках, я получаю следующее исключение:
Unexpected error occured, while getting the group names from the VDN server
System.ServiceModel.Security.SecurityNegotiationException: The server has rejected the client credentials.
System.Security.Authentication.InvalidCredentialException: The server has rejected the client credentials.
System.ComponentModel.Win32Exception: The logon attempt failed
каковы учетные данные, которые не принимаются? И как я могу их установить?
есть ли способ настроить сервер, чтобы не требовать аутентификации? Приложение представляет собой простое приложение для мониторинга безопасности на самом деле не вопрос.
Извините, что не очень конкретно: Приложение использует прокси-сервер канала, и нет файла конфигурации wcf, поскольку код wcf закодирован вручную.
мой код WCF основан на коде в этом руководстве: http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication
Я не знал, что это стандартная процедура для создания классов wcf из конфигурации до тех пор, пока я не закончу писать весь код. Теперь, когда Я смотрю на учебник / справочный документ, в котором они используют сгенерированный код, и все требует изменения конфигурации.
У меня нет полосы пропускания (я уже жонглирую 3 проектами), чтобы заменить мой компонент wcf одним tht использует сгенерированный код, но я обязательно использую генерацию кода в следующий раз, когда я использую wcf.
3 ответов
создайте такой метод...
void SetImpersonation(ref IServiceClient proxy)
{
proxy.ClientCredentials.Windows.ClientCredential.Domain = "MYDOMAIN";
proxy.ClientCredentials.Windows.ClientCredential.UserName = "A_USER";
proxy.ClientCredentials.Windows.ClientCredential.Password = "P4SSW0RD";
}
и вызовите его при создании нового класса клиента.
IServiceClient proxy = new IServiceClient ();
SetImpersonation(ref proxy);
очевидно, что это установка информации для конкретного пользователя и имеет последствия для безопасности, если ваш код декомпилирован, но он должен работать в вашем (сценарий без файла конфигурации)
вот решение, которое я нашел в поиске для отключения безопасности/аутентификации wcf.
С MSDN:
WSHttpBinding b = new WSHttpBinding();
b.Security.Mode = SecurityMode.None;
или добавьте в config следующее:
<wsHttpBinding>
<binding name="myBinding">
<security mode="None" />
</binding>
</wsHttpBinding>
Если вы используете конфигурацию привязки WCF со следующей безопасностью:
<transport clientCredentialType="Windows" />
затем вам нужно будет явно установить учетные данные Windows на экземпляре WCF, созданном в коде, как показано ниже:
'Create an instance of the WCF service
Dim MyService As New MyWCFServiceClient
'Build credentials object for which this WCF call will be made
MyService.ClientCredentials.Windows.ClientCredential = New System.Net.NetworkCredential("UserName", "Password", "DomainName")
'Call a method on the service
MyService.MyMethod1()