Настройка учетных данных для приложения 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()