Servicios Web Fecha: 29/Jun/2004 (28-06-2004) |
. |
Muchas veces nos encontramos frente al clásico problema en donde los proyectos en desarrollo, cuando son llevados a producción, sufren cambio increíbles. Este es un ejemplo: una simple aplicación que internamente se comunicaba con WebServices, dentro del entorno de desarrollo funcionaba a la perfección, pero al llegar al momento de su instalación final, me encontré con que los llamados a los WebServices debían pasar a través de un Proxy. Después de investigar un poco me encontré con la solución (que no es muy complicada) y aprovecho para compartir esta experiencia.
Para poder utilizar este ejemplo, utilizaremos un WebService público, en este caso el webservice de Google para desarrolladores. Para poder usar este WebService, es necesario obtener una clave de validación que nos da Google. A continuación, podemos definir los criterios de búsqueda y mostrar los resultados de la misma. Utilizaremos las siguientes librerías:
NetworkCredential Class
La clase NetworkCredential es una clase base que proporciona credenciales en esquemas de autenticación basados en contraseña como la autenticación básica, implícita, NTLM y Kerberos. Las clases que implementan la interfaz ICredentials, como la clase CredentialCache, devuelven instancias de NetworkCredential. Esta clase no admite métodos de autenticación basados en clave pública como la autenticación de cliente SSL.
WebProxy Class
Contiene la configuración del Proxy HTTP para la clase WebRequest. La clase WebProxy contiene la configuración del Proxy que usan las instancias de WebRequest para reemplazar la configuración del Proxy de GlobalProxySelection. La clase WebProxy es la implementación base de la interfaz IWebProxy.
La direccion IP del Proxy Server es (127.0.1.2) y usa el puerto 80. Los datos para autenticar el usuario del proxy son los siguientes
- Usuario: user
- Contraseña: pwd
- Dominio: MyDomain
El siguiente código Vb.Net muestra un ejemplo de la utilización de las mismas:
A continuación sigue código en Visual Basic:
' Search button: do a search, display number of results Private Sub btnSearch_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnSearch.Click ' Create a Google Search object Dim s As New Google.GoogleSearchService Try ' google params Dim strLicenceseKey As String = "google license key" ' google license key Dim strSearchTerm As String = "Bruno Capuano" ' google license key ' proxy settings Dim cr As New System.Net.NetworkCredential("user", "pwd", "MyDomain") Dim pr As New System.Net.WebProxy("127.0.1.2", 80) pr.Credentials = cr s.Proxy = pr ' google search Dim r As Google.GoogleSearchResult = s.doGoogleSearch(strLicenceseKey, _ strSearchTerm, 0, 10, True, "", False, "", "", "") ' Extract the estimated number of results for the search and display it Dim estResults As Integer = r.estimatedTotalResultsCount MsgBox(CStr(estResults)) Catch ex As System.Web.Services.Protocols.SoapException MsgBox(ex.Message) End Try End SubSi se quiere utilizar las credenciales actuales del usuario, se debe utilizar la propiedad DefaultCredentials. La propiedad DefaultCredentials se aplica solamente a NTLM, y a la autenticación basada en Kerberos.Por ejemplo:
' set default credentials pr.Credentials = System.Net.CredentialCache.DefaultCredentialsDefaultCredentials representa las credenciales del sistema para el contexto actual de seguridad, dentro del cual la aplicación está corriendo. Para una aplicación de Windows, estas son el usuario logueado a Windows que corre la aplicación, (usuario y dominio). En las aplicaciones Asp.Net, las credenciales por defecto son las credenciales del usuario que impersona la aplicación Asp.Net (esto se configura desde el IIS).
Nota – La instancia de ICredentials retornada por DefaultCredentials no puede ser usada para ver el nombre de usuario, contraseña y dominio del contexto actual de seguridad.