Foros del Web » Programación para mayores de 30 ;) » .NET »

Aplicación no se puede comunicar a webservices en conexiones con proxy

Estas en el tema de Aplicación no se puede comunicar a webservices en conexiones con proxy en el foro de .NET en Foros del Web. Tengo una aplicación de escritorio en Vb.Net 2003 que utiliza algunos webservices y tiene que conectarse a ciertos recursos en web. En general anda perfectamente ...
  #1 (permalink)  
Antiguo 03/08/2011, 08:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Aplicación no se puede comunicar a webservices en conexiones con proxy

Tengo una aplicación de escritorio en Vb.Net 2003 que utiliza algunos webservices y tiene que conectarse a ciertos recursos en web. En general anda perfectamente en todas las computadoras, servidores, etc.
Pero algunas empresas tienen proxys instalados, y en esos casos las peticiones HttpRequest que intenta usar este programa no pueden acceder al destino, o no pueden recibir los datos. No he logrado saberlo.
Se supone que la programación de la petición está incluyendo código para resolver el problema, el cual saqué de la documentación de Microsft en el MSDN, pero no funciona.

¿ALguien me puede decir cómo se hace para resolver que un programa pueda comunicarse, enviar y recibir información de un webservice en un sistema que tiene un proxy de salida?
¿Cómo se programa esto?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #2 (permalink)  
Antiguo 04/08/2011, 06:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Aplicación no se puede comunicar a webservices en conexiones con proxy

Voy a tratar de replantear el problema.
- El programa que hice tiene que enviar un XML que se almacenará tal y como está en una base de datos. Para ello realiza una petición HttpRequest dirigida a un script de PHP que está en la web, en una página.

Carga de parámetros y petición:
Código vb:
Ver original
  1. oScript = "setactivate"
  2.                         oWB = New BridgeClass.WebBridge
  3.                         With oWB
  4.                             .Parametro = "usr=" & Convert.ToString(oTabla.Rows(0).Item("unm"))
  5.                             .Parametro = "pwd=" & Convert.ToString(oTabla.Rows(0).Item("prd"))
  6.                             .Parametro = "fecha=" & DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
  7.                             .Parametro = "pet=A"
  8.                             .Parametro = "stat=P"
  9.                             .Parametro = "soft=1"
  10.                             .Parametro = "xmlMsg=" & oXml
  11.                             .Parametro = "c=" & wBase
  12.                             .Parametro = "q=" & pSoft
  13.                             .Parametro = "t=" & uSoft
  14.                         End With
  15.                         GetData(1)
- "setactivate" es el nombre del script.
- BridgeClass es una clase creada para generar el enlace, enviar la petición y recibir la respuesta.
- oXML es un String conteniendo el XML, en formato texto plano.
- c, q, t, son los parámetros de base, usuario y password que se utilizarán en el script. El resto son diferentes parámetros del script.
- AL crear el objeto solo se cargan los parámetros c, q y t.

Envío de petición (GetData())
Código vb:
Ver original
  1. Private Function GetData(ByVal View As Byte) As DataSet
  2.             'Establecer los valores del objeto WebBridge y lamara a Connect()
  3.            Dim Xdoc As New Xml.XmlDocument
  4.             DSet = New DataSet
  5.             With oWB
  6.                 .URL = oPath & oScript & ".php"
  7.                 .PostData = "view=" & View & "&" & .Parametros
  8.                 .Connect()
  9.             End With
  10.             Try
  11.                 Xdoc.LoadXml(oWB.XMLResponse)
  12.                 Dim sReader As New StringReader(Xdoc.InnerXml)
  13.                 DSet.ReadXml(sReader)
  14.             Catch ex As System.Xml.XmlException
  15.                 Return New DataSet
  16.             Catch ex As Exception
  17.                 DSet = New DataSet
  18.             End Try
  19.             Return DSet
  20.         End Function
- En esta parte se combinan la URL cargada, el nombre del script y los parámetros.
- Connect() es el que genera toda la tarea.

Conexión, petición y respuesta:
Código vb:
Ver original
  1. Public Sub Connect()
  2.             ServicePointManager.UseNagleAlgorithm = True
  3.             ServicePointManager.Expect100Continue = False
  4.             ServicePointManager.CheckCertificateRevocationList = True
  5.             ServicePointManager.DefaultConnectionLimit = ServicePointManager.DefaultPersistentConnectionLimit
  6.             ' ---------------------------------------------------------------------------------
  7.            Dim rq As WebRequest = WebRequest.Create(URL)
  8.             Dim newUri As Uri
  9.             Dim pr As System.Net.WebProxy
  10.             Try
  11.                 With rq
  12.                     If nuevoLogin.RegServer.RutaProxy <> "" Then
  13.                         pr = New System.Net.WebProxy(login.RgServer.UrlProxy, Convert.ToInt32(login.RgServer.PortProxy))
  14.                         rq.Proxy = pr
  15.                     End If
  16.                     .Method = "POST"
  17.                     .ContentType = "application/x-www-form-urlencoded"
  18.                     If _to > 0 Then
  19.                         .Timeout = _to
  20.                     End If
  21.                 End With
  22.                 SendData(rq, PostData)
  23.                 _rsp = GetXMLResponse(rq)
  24.             Catch ex As System.Net.WebException
  25.                 oLogWriter.Escribir("WebExcepción en WebBridge.Connect()" & vbNewLine & ex.Message & vbNewLine & ex.StackTrace.ToString)
  26.             Catch ex As Exception
  27.                 oLogWriter.Escribir("Excepción en WebBridge.Connect()" & vbNewLine & ex.Message & vbNewLine & ex.StackTrace.ToString)
  28.             End Try
  29.         End Sub
- login.RgServer.UrlProxy es la url local donde está el proxy, según declaró el usuario.
- login.RgServer.PortProxy es el Port del proxy declarado por el usuario.
- SendData() envía la petición.

SendData
Código vb:
Ver original
  1. Private Sub SendData(ByRef req As WebRequest, ByVal data As String)
  2.             Dim sr As Stream
  3.             Dim b As Byte() = Encoding.UTF8.GetBytes(data)
  4.             req.ContentLength = b.Length
  5.             If _to > 0 Then
  6.                 Try
  7.                     sr = req.GetRequestStream()
  8.                 Catch ex As System.Net.WebException
  9.                     Dim bytes As Byte() = System.Text.Encoding.UTF8.GetBytes("F")
  10.                     sr = New MemoryStream(bytes)
  11.                     oLogWriter.Escribir("WebExcepción en WebBridge.SendData()" & vbNewLine & ex.Message & vbNewLine & ex.StackTrace.ToString)
  12.                 Catch ex As Exception
  13.                     Dim bytes As Byte() = System.Text.Encoding.UTF8.GetBytes("F")
  14.                     sr = New MemoryStream(bytes)
  15.                     oLogWriter.Escribir("Excepción en WebBridge.SendData()" & vbNewLine & ex.Message & vbNewLine & ex.StackTrace.ToString)
  16.                 End Try
  17.             Else
  18.                 sr = req.GetRequestStream()
  19.             End If
  20.             sr.Write(b, 0, b.Length)
  21.             sr.Close()
  22.         End Sub

Este es el conjunto de códigos que se usa. En esta última función es donde se manifiesta el problema, simplemente no puede salir o retornar el envío al script.
El problema es que sólo falla si el usuario tiene un proxy propio instalado (usualmente en algunas), pero no trae problemas en ningún otro caso, incluyendo conexiones hogareñas, publicas con WiFi, o la que sea. Sólo si hay un proxy en ese sitio, y obviamente no se les puede pedir que lo quiten...

¿Hay algún error en estos códigos? ¿Habrá una forma de evitar este problema?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 17/10/2012, 13:09
Avatar de NetFcruz  
Fecha de Ingreso: agosto-2012
Ubicación: Reynosa
Mensajes: 32
Antigüedad: 11 años, 8 meses
Puntos: 0
Pregunta Respuesta: Aplicación no se puede comunicar a webservices en conexiones con proxy

Hola Hermano, soy nuevo en esto de consumir un webservice desde vb.net 2010, pasa que genero un xml y este lo tengo que enviar al webservice siguiente: http://www2.soriana.com/Integracion/RecibeCFD/wseDocRecibo.asmx
Ahora solo me falta implementar el codigo, pero me podrias auxiliar veo ke se parece tu codigo al que prentendo generar como enviar el XML si como string o tomo el valor de la variable que contiene mi xml como xmldocument, o cargar desde un dir el xml y enviarlo, saludos, espero me haya explicado.
__________________
!El conocimiento se LIMITA cuando dices NO PUEDO!

By NetFcruz
  #4 (permalink)  
Antiguo 17/10/2012, 20:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Aplicación no se puede comunicar a webservices en conexiones con proxy

Pues, mira, yo ya no trabajo en ese proyecto. E incluso ya no estoy en desarrollo, sino que trabajo como Analista Funcional para una consultora, por lo que lamento no poder aportarte una solución.
También te comento que no pude en ese tiempo resolver el dilema, y obviamente nadie me contestó.
Desconozco el estado actual del proyecto, debido a que no conservo vínculos con el equipo actual de desarrollo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: conexion, firewall, proxy, webservice
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 10:08.