2010-04-08 34 views
15

Quiero hacer referencia a un servicio web y requiere autenticación de usuario/contraseña. En VS 2008, si trato de "agregar referencia" o "agregar referencia de servicio", todo lo que puedo escribir es la URL, no hay forma de ingresar mis credenciales. Obviamente, si trato de cargar el WS, que me muestra un mensaje:Cómo agregar la referencia de servicio en Visual Studio 2008 autenticarse contra el servicio web protegido con contraseña

The request failed with HTTP status 403: Forbidden. Metadata contains a reference that cannot be resolved: The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Basic realm="weblogic"'. The remote server returned an error: (401) Unauthorized.

Así que mi pregunta es: ¿Es posible (utilizando VS 2008) para agregar una referencia a un servicio web que está protegido? ¿Cómo?

Respuesta

4

Dependiendo de cómo se autentique el servicio, es posible que se encuentre sol.

Si utiliza membresía ASP.Net, no hay alegría que se encuentre. Si el código de servicio es tuyo, deshabilita temporalmente la autenticación para generar un proxy.

De lo contrario, trate de usar un mecanismo estándar:

http://username:[email protected]/service 

La mejor opción: Obtener el WSDL de su proveedor y utilizar wsdl.exe para generar su proxy.

actualización en respuesta al comentario:

Sí, burlando el servicio con el fin de generar un proxy es un plan perfectamente razonable, si el servicio de destino es un servicio ASP.net o sólo acepta y devuelve los tipos simples.

El constructor del servicio web tiene una sobrecarga que acepta un Uri o simplemente puede modificar el origen generado.

Si decide modificar el código fuente generado, es probable que desee que acaba de extraer la clase de proxy y suprimir la referencia servicio web:

Después de generar el proxy con VS, si 'Mostrar todos los archivos' y el taladro en la referencia de servicio web, encontrará un archivo llamado Reference.cs. Este es el único archivo que necesitas. Copie los contenidos en otro archivo y luego simplemente elimine la referencia del servicio web.

Si hace esto, puede agregar potencialmente su lógica de autenticación en el proxy en este momento.

Pero una vez más, obtener el WSDL del vendedor es su mejor opción.

Buena suerte.

+0

No, no tenemos control sobre el servicio (y ganaron' t eliminar el esquema de autenticación). Usar el usuario duo: pasar el URL tampoco funciona ... Sería posible agregar referencia a otro servicio (uno que no necesita autenticación), y luego modificar algunos archivos de configuración y cambiar el URL y ingrese mis credenciales ??? – ditto1977

+0

@ user312305 - seguro, eso sería un camino por recorrer. Ver respuesta actualizada. En cuanto a la autenticación real, bueno, esa es otra historia. Su pregunta pregunta cómo generar un proxy, no cómo autenticar y llamar a un servicio protegido mediante programación. Haga otra pregunta y la responderé. Asegúrese de incluir detalles sobre qué plataforma y esquema de autenticación está en uso, por ejemplo, IIS, servicio web Asp.net, FormsAuthentication, etc. Parece que debe agregar un encabezado www-auth. –

+0

Bueno, la cosa es que nuestro proveedor usa Vordel, que no expone un wsdl (en su lugar, expone una URL que "oculta" todas las operaciones disponibles), así que estoy perdido acerca de cómo generar un proxy usando wsdl.exe (y eso es lo único que quiero, generar el proxy). Sé que el servicio funciona, y puedo probarlo usando SoapUI, creando un nuevo punto final para un proyecto wsdl ya generado, y rellenando las propiedades de usuario/pase. Intenté, en VS2008, generar una referencia WS al azar, pero como no sé qué propiedades están expuestas por el servicio "real", creo que no puedo modificar el código. (Gracias por ayudar!) – ditto1977

6

Parece que está intentando usar una referencia web, y no una referencia de servicio (aunque creo que una referencia web es un tipo de referencia de servicio). En VS08, después de haber lanzado la "Agregar referencia de servicio", tipeado la URL al servicio web, haga clic en el botón "Avanzado", luego haga clic en "Agregar referencia web". Escriba la URL nuevamente y luego haga clic en "Agregar referencia web". Ahora usted debería tener una referencia Web, en lugar, la autenticación es similar a continuación:

WebService.Service myService = new WebService.Service(); 
myService.Credentials = new System.Net.NetworkCredential("username", "password"); 
WebService.ResultType results = myService.MyMethodReturnsResultType(); 
3

respuesta tardía, pero también se puede conseguir que funcione si abre su sitio en el navegador Web Studio Visual y conecte sólo funciona. si su modelo de autenticación admite cookies.

+1

+1 - Esto funcionó perfectamente para mí cuando intenté actualizar un WSDL de SaleForce que estaba detrás de una página de inicio de sesión. En Visual Studio 2013 puede abrir un navegador web haciendo clic en el menú superior Ver -> Otras ventanas -> Navegador web – drobison

0

Si genera el código con WSDL puede anular el método GetWebRequest(), que le permitirá agregar el encabezado de autorización

protected override System.Net.WebRequest GetWebRequest(Uri uri) 
{ 
    var req = base.GetWebRequest(uri); 
    req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes("username:password"))); 
    return req; 
} 
Cuestiones relacionadas