2009-05-14 15 views
7

He escrito una aplicación simple que utiliza WCF para comunicarse entre el cliente y el servidor. Cuando lo funciono localmente funciona bien, sin embargo, cuando ejecuto el servidor y el cliente en dos cajas diferentes que recibo la siguiente excepción:¿Configurando credenciales para una aplicación 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 

¿Cuáles son las credenciales que se no ser aceptado? ¿Y cómo puedo configurarlos?

¿Hay alguna manera de configurar el servidor para que no requiera autenticación? La aplicación es una aplicación de monitoreo simple para la seguridad no es realmente un problema.

Lo sentimos por no ser muy específico: La aplicación utiliza un proxy tubería y no hay archivo de configuración WCF como el código de WCF se codifica la mano.

Mi código de WCF se basa en el código de este tutorial: http://www.switchonthecode.com/tutorials/wcf-tutorial-basic-interprocess-communication

yo no era konw proctice estándar para generar las clases de WCF de una configuración hasta después de que hubiera terminado de escribir todo el código. Ahora, cada vez que miro un tutorial/helpdoc, usan el código generado y todo requiere cambiar la configuración.

No tengo ancho de banda (estoy haciendo malabarismos con 3 proyectos) para reemplazar el componente wcf con uno que usa el código generado, pero me aseguraré de usar la generación de código la próxima vez que use wcf.

+0

Creo que tiene que ser más específico. ¿Cuál es el enlace que estás usando? –

Respuesta

5

crear un método como este ...

void SetImpersonation(ref IServiceClient proxy) 
{ 
    proxy.ClientCredentials.Windows.ClientCredential.Domain = "MYDOMAIN"; 
    proxy.ClientCredentials.Windows.ClientCredential.UserName = "A_USER"; 
    proxy.ClientCredentials.Windows.ClientCredential.Password = "P4SSW0RD"; 
} 

y llamarlo cuando se crea la nueva clase de cliente.

IServiceClient proxy = new IServiceClient(); 
SetImpersonation(ref proxy); 

obvously, esto se está poniendo la información a ser un usuario específico, y tiene implicaciones de seguridad si se descompila su código, pero debería funcionar en su (escenario de archivos menos config)

+0

Puedo migrar esos valores a la app.config. Simplemente no tengo un archivo de configuración para el código wcf. Gracias, eso se ve bien. –

+0

¿cómo puedo evitar configurar esto en cada uso de mi cliente? ¿Hay alguna manera de configurar esto para todos los clientes en mi solución? – SomeRandomName

11

Aquí hay una solución que encontré en una búsqueda para deshabilitar la seguridad/autenticación wcf.

De MSDN:

WSHttpBinding b = new WSHttpBinding(); 

b.Security.Mode = SecurityMode.None; 

o añadir lo siguiente en config:

<wsHttpBinding> 

    <binding name="myBinding"> 

     <security mode="None" /> 

    </binding> 

</wsHttpBinding> 
+0

Debe tener cuidado al usar esta solución porque la excepción original podría provenir de una configuración vinculante mediante la Autenticación de Windows. En ese caso, eliminar ciegamente la seguridad es una mala idea. Verifique mi respuesta en la parte inferior en el caso de usar la Autenticación de Windows. – atconway

+0

Funcionó bien, gracias :) –

1

Si está utilizando una configuración de enlace WCF con la seguridad siguiente:

<transport clientCredentialType="Windows" /> 

, entonces tendrá que establecer explícitamente las credenciales de Windows en la instancia creada en WCF código, como a continuación:

'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() 
Cuestiones relacionadas