miércoles, 17 de enero de 2007

Corrección del error al invocar un Servicio Web Remoto al utilizar autenticación por Windows

Este error es muy común cuando emprendemos el viaje a migrar a una arquitectura de servicios. Nos funciona bien localmente, pero cuando queremos acceder el servicio desde otro servidor distinto del que corre la aplicación nos da este error:

The request failed with HTTP status 401: Access Denied.


Esto sucede porque las credenciales con que se autenticaron en la aplicación web no pasan automáticamente al invocar el servicio web en otro servidor o a veces en el mismo servidor. La clave esta en luego de instanciar el servicio Web apunanto a la clase proxy del proyecto:

EmpresaPROXY.EmpresaWSL servicio = new EmpresaPROXY.EmpresaWSL ();


debemos agregar la siguiente linea:

servicio.Credentials = System.Net.
CredentialCache.DefaultCredentials;
Esta instrucción indica que las credenciales de autenticación pasaran a la invocación del servicio Web y con ello si el web.config esta definido como autenticación por windows y no tienen ningún filtro de roles o usuarios o bien que si estan definidos y el usuario pertenece alguno de ellos el servicio devolverá el resultado esperado.
Hasta la proxima amigos!,

Manolo Herrera

No hay comentarios.: