Servicios Web
Como invocar un WebService a través de un Proxy

Fecha: 29/Jun/2004 (28-06-2004)
Autor: Bruno Capuano bcapuano@pectra.com

.

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

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 Sub

Si 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.DefaultCredentials

DefaultCredentials 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.


ir al índice

Índice de la sección dedicada a punto NET (en el Guille)