Hola, comparto con Milton que el codigo que te paso tendria que funcionar y que el tcptrace es muy util, aunque no se si para este caso te dara muchas pistas. En la version evo1 los datos del servicio NO lo saca del soap parm porque esta almeacenado en la kb, en el objeto externo. en las versiones anteriores si lo almacenabamos alli. Los datos del servicio los buscan en ese orden 1- variable location, 2- location.xml o 3- de las propiedades del EO (del objeto Gx) .
Hola Milton, daria la impresion que no le da bolilla a los cambios que le aplico a Location.Siempre obtengo esto:The operation has timed out(-10001)no como mensaje sino como error del IIS, la ventana con fondo amarillo ...Por mi parte , ya no probare mas hasta que tenga un entorno de ejecucion donde publicar el web service y no necesite cambiar los parametros.Como bien comentaron en otro post, la location "Adapter31WS" no existe en la coleccion de Locations que tiene SoapParm.cs.Por lo que siempre es NULO, y creo que no le permite crear una location si el nombre que envio a la funcion no existe.Es muy raro.Esto en Gx8 andaba de 10!SaludosEl 27 de enero de 2012 05:02, Milton Gonzalez <genexus@lsisa.com> escribió:
Hola Nicolas,Suponiendo que el servidor web esta en el puerto 3900Si ejecutas el siguiente codigo que error te sale:------------------------------------------------------------------------------------------------------&Location = GetLocation("Adapter31WS")//&oLocation.Host = 'localhost'//&oLocation.BaseUrl = '/HUBX.NetEnvironment/'
//&oLocation.ResourceName = 'aadapter31.aspx'
&Location.Port = 3900&Adapter31WS.execute() // <-- Llama al WS con los parametros que necesiteIf ( GetSoapErr() <> 0 )
Msg( GetSoapErrMsg() )
Endif------------------------------------------------------------------------------------------------------Descomenta las lineas de configuración del location que sean diferentes a los valores originales de cuando importaste el webservice.Si estas haciendo pruebas en tu maquina supongo que lo unico que cambia es el puerto del servidor web.Puedes bajarte la herramienta tcpTrace ( http://www.pocketsoap.com/tcptrace/ ) para ver que esta respondiendo el servidor exactamente.Es muy facil de utilizar, al arrancar tienes que entrar los siguientes valoresListen on Port #: 8080 <-- Puerto donde se quedara escuchando, es el puerto a donde debes enviar a que tu webservice se ejecute (Ej: &Location.Port = 8080)Destination Server: LocalhostDestination Port #: 3900 <-- Puerto real donde esta el servidor webUna vez que lo tienes en escucha al ejecutar el webservice todas las peticiones al servidor web pasan por el programa y guarda lo que se envia y recibe.Saludos,Milton
Gracias Milton,
De: Nicolas Machado [mailto:nmachado@culturait.com.ar]
Enviado el: jueves, 26 de enero de 2012 18:21
Para: csharp-l@gxtech.com.uy
Asunto: Re: RV: [csharp-l] Problema con getLocationhasta donde llegue concuerdo exactamente contigo, pero aun no logra hacerlo andar.Basicamente en la misma KB tengo el objeto web service (un procedure main con Call protocoll : SOAP)y ademas inspecciono el webservice desde la misma KB, porlo que al programa externo le tengo que renombrar, basicamente le agrego "WS" al final.Como al inspeccionar esta usando el Servidor web incoporado en el IDE, el puerto es cualquier cosa, aleatorio.Por eso cree un web panel que me permita ingresar un numero de puerto y despues invocar al web service, creadno un avariable de tipo web service que apunta al programa externo de la KB.Ese nombre de programa externo es que uso para la funcion getLocation.Ahora entiendo que la relacion entre el webservice y el Location se da en tiempo de ejecucion al invocar el webservice.desde el procedure que invoca el webservice:AV30SalidaAdapter31 = AV26WS.execute(AV19XML) ;AV26Ws es una variable:AV26WS = new SdtAdapter31WS(context);dentro de la variable SdtAdapter31WS (objeto) , archivo: type_SdtAdapter31WS.csGXSoapHTTPClient.Host = "localhost" ;GXSoapHTTPClient.Port = 3818 ;GXSoapHTTPClient.BaseURL = "/HUBX.NetEnvironment/" ;SoapParm.AssignLocationProperties( context, "Adapter31WS", GXSoapHTTPClient);if ( StringUtil.StrCmp(defaultExecute, "") == 0 ){targetResourceName = (String)(SoapParm.GetResourceName(context, "Adapter31WS")) ;if ( StringUtil.StrCmp(targetResourceName, "") == 0 ){execName = "aadapter31.aspx" ;}else{execName = targetResourceName ;}}else{execName = defaultExecute ;}aca usa varia veces el string "Adapter31WS", pero lo que sucede es que ese string o location, no existe.por lo que todos los valores del location, son nulo, o no logro cambiarlos.por ejemplo yo quiero cambiar solo el PORT.ademas cree el archivo location.xml y lo puse dentro de bin, pero no lo toma o no lo reconoce !adicionalmente como comentas, en nigun fuente esta definido el location con el nombre "Adapter31WS"Seguiremos buscando la solucion a esto ...Saludos
El 26 de enero de 2012 06:49, Milton Gonzalez <genexus@lsisa.com> escribió:
Hola Nicolas,Un efecto colateral de la incidencia que te envie antes es que la location se crea dinamicamente despues del primer error pero con los campos vacios, al parecer en la X1 pasaron los valores por defecto que se guardaban en SoapParm.cs al código interno del tipo de datos del webservice y los utiliza si recibe los valores del location en blanco.Despues de hacer una llamada al webservice se cargan en el location los valores de la ultima llamada, pero la primera vez estaran en blanco a menos que tu los cargues manualmente.En tu código quedaria algo como:&locName = 'WSDL_Adapter31_V2'
&Location = GetLocation(&locName) //Nombre dl External Object Name
&Location = GetLocation(&locName) // <-- Para evitar error "Invalid location name"
&ErrNumber = GetSOAPErr()If &errNumber <> 0 // Or null(&location.Host) <-- La primera vez es siempre nulo
...Para asegurarte el nombre del location que esta usando el webservice tienes que mirar en el código funte que ha generado el tipo de dato webservice:Ejemplo:WebService: TempConvertFuente: type_SdtTempConvert.csBusca dentro del fuente donde carga los valores del location con SoapParm.AssignLocationProperties y mira el nombre que utiliza en el 2º parametro:SoapParm.AssignLocationProperties( context, "TempConvert", GXSoapHTTPClient);Si el error es al hacer la llamada al webservice, puedes utilizar una herramienta como TcpTrace que permite ver que se esta enviando/recibiendo para ver que ocurre realmente o sino hacer un debug mirando la ejecución en el funte del tipo de datos webservice.Tambien envie otra incidencia de puede que te afecte, lo estoy mirando con soporte:---------------------------------------------------------------------------------------------------IT226587 - Se mantiene error en llamadas sucesivas a un webservice despues del primer errorGeneXus U7 NET WinDespues de llamar a un webservice con algun parametro incorrecto (Host, Baseurl, etc) sale el error:"Error en el servidor remoto: (404) No se encontro"Pero si se corrigen los parametros continua saliendo el error de arriba, aun que esta haciendo la llamada correctamente y por debug se puede ver que el webservice esta devolviendo datos válidos.---------------------------------------------------------------------------------------------------PS: La función GetLocation() si deberia devolver un error.La ayuda de la 9.0 de la funcion GetSOAPErr()
---------------------------------------------------------------------------------------------------Scope
Data Types: Location
Objects: Procedures, Reports, Transactions, Web Panels, Work PanelsLanguages: .NET, C/SQL, Java, Visual Basic, Visual FoxPro
Interfaces: Web, Win.Purpose
Returns the error code of the last operation.Syntax
GetSOAPErr()Type Returned:
NumericDescription
The GetSOAPErr function returns the error code of the last SOAP operation. That is, when you have a Location variable and assigns a location name to it, or when you make a SOAP call.---------------------------------------------------------------------------------------------------
Saludos,Milton
Hola Nicolas, si el nombre del objeto es el del objeto externo, generalmente es el nombre del objeto (concatenando el namespace o no depende de la version y como lo importes). Antes de Evo1 como tu dices el namespace era tempuriorg
De: Javier Larrosa [mailto:jlarrosa@genexus.com]
Enviado el: miércoles, 25 de enero de 2012 19:49
Para: csharp-l@gxtech.com.uy
Asunto: Re: RV: [csharp-l] Problema con getLocation
Igual del codigo que envias me parece te esta devolviendo un error previo osea la funcion getlocation no deberia escribir ningun getsoaperr, porque es algo dentro del codigo Gx para inicializar una variable location con X valores y solo cambiar algunos Osea podrias hacer algo como&Location = GetLocation('WSDL_Adapter31_V2')&location.host= 'newserver'&externalobject.method(parms)SldsJavier
2012/1/25 Alberto Fernandez <gxbeto@gmail.com>
Segun como yo revise el codigo genexus,le tenes que pasar el nombre del programa en donde estas usandoel External Object, incluyendo una "A" adelante.Verificalo !!Yo lo genero en java, puede haber alguna diferencia en los generadores,pero deberia ser igual en C#AlbertoEl 25 de enero de 2012 14:10, Nicolas Machado <nmachado@culturait.com.ar> escribió:
Alberto una consulta,el consumidor del web service podria estar en otra KB, al inspeccionarlo lo que te crea es un Objeto Externo.Segun entiendo ese ese el nombre que le debo pasar a la funcion getLocation... no el nombre del programa que es main y que es call protocol: SOAP ...O estoy confundiendo ?Saludos
El 25 de enero de 2012 14:52, Alberto Fernandez <gxbeto@gmail.com> escribió:Nicolas,Te doy un ejemplo.Tengo un programa que se llama "Pagos" es main = true, con propiedad call protocol = SOAP,a la hora de usar el GetLocation se debe especificar el nombre del programa....o sea"Pagos" anteponiendo una letra "A", yo lo uso en java y es case sensitive.Aca el ejemplo funcionando:&Location = GetLocation("APagos")
&Location.BaseUrl = "/PagosBancos/"
&Location.Port = 8080
&Location.Timeout = 50
&Location.Host = &HostEspero te sirva.Alberto
El 25 de enero de 2012 13:17, Nicolas Machado <nmachado@culturait.com.ar> escribió:
Hola Milton, sigo sin suerte...puse las dos llamadas pero me siguen dando el error ..
estuve mirando el codigo de SoapParm.cs ..if ( context.nLocRead == 0 ){oReader = new GXXMLReader(context.GetPhysicalPath());oReader.Open(context.GetPhysicalPath( )+"location.xml");initLocations( context, oReader) ;if ( oReader.ErrCode == 0 ){oReader.Close();}}context.nSOAPErr = 0 ;1) el atributo nLocRead que significara ? entrara por el if ?que contiene context.GetPhysicalPath( )2) en mi caso no hya ninguna referencia a los WS que tengo inspeccionados,es correcto ?SaludosNicolas
El 25 de enero de 2012 13:39, Milton Gonzalez <genexus@lsisa.com> escribió:
Hola Nicolas,Acabo de enviar esta incidencia a soporte:----------------------------------------------------------------------------------------------------------IT226586 - No esta creando los locations de los webservices importados via WSDL en SoapParm.csHola,
Utilizo GeneXus X1 U7 NET Win
No esta creando los locations de los webservices importados via WSDL en SoapParm.cs y al llamar la función GetLocation() sale el error "Invalid location name".
El error sale la primera vez que se llama a la función GetLocation(), si se vuelve a llamar el error ya no sale, supongo que crea el registro dinamicamente a pesar del error.
----------------------------------------------------------------------------------------------------------En mi caso el error ocurria solo la primera vez luego no volvia a ocurrir.Si fuera este tu caso, como workaround, podrias llamar GetLocation() 2 veces seguidas hasta que solucionen el problema.Seria algo asi en tu código:&locName = 'WSDL_Adapter31_V2'
&Location = GetLocation(&locName) //Nombre dl External Object Name
&Location = GetLocation(&locName) // <-- Para evitar error "Invalid location name"
&ErrNumber = GetSOAPErr()
...Saludos,Milton
De: Nicolas Machado [mailto:nmachado@culturait.com.ar]
Enviado el: miércoles, 25 de enero de 2012 17:06
Para: csharp-l@gxtech.com.uy; xml-l@gxtech.com.uy
Asunto: [csharp-l] Problema con getLocationBuenos Dias,Tengo el siguiente problema estoy tratando de modificar la &location de un webservice.pero siempre me dice que el nombre de la Location no existe.Comparo el nombre del Objeto Externo luego de inspeccionar el web service y es identico.Adicionalmente cree un archivo Location.xml y lo coloque en la carpeta bin del entorno de ejecucion ( dentro de la KB)Pero tampoco hace caso.Ests son algunas lineas de codigo:<code>&locName = 'WSDL_Adapter31_V2'&Location = GetLocation(&locName) //Nombre dl External Object Name&ErrNumber = GetSOAPErr()If &errNumber <> 0 Or null(&location.Host)Do CaseCase &errNumber = -20007&resultado = "Unknown error to set a web service, unknown location:" + &LocName + newline() + GetSOAPErrMsg()Case &errNumber > 0&resultado = "Unknown error to set a web service:" + &LocName + newline() + GetSOAPErrMsg()Otherwise&resultado = "Error from unknown host to set a web service:" + &LocNameEndCaseEndIf</code>---Siempre sale por el error -20007 !!Le agrege Gx algun prefijo en esta version ?Antes en la version GX8, el location se llamaba "org_tempuriaction_XXXX"Estoy en GX EV1Cualquier ayuda es bienvenida.Saludos
--
T. (54 11) 5330 1000
D. José Bonifacio 1192 8º B
C. 0020C1406GXB
Buenos Aires, Argentina
--
T. (54 11) 5330 1000
D. José Bonifacio 1192 8º B
C. 0020C1406GXB
Buenos Aires, Argentina
--
T. (54 11) 5330 1000
D. José Bonifacio 1192 8º B
C. 0020C1406GXB
Buenos Aires, Argentina
Has recibido este mensaje porque estás suscrito al grupo "GeneXus" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a genexus@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a genexus+unsubscribe@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/genexus?hl=es.
0 Response to "Re: RV: [csharp-l] Problema con getLocation"
Publicar un comentario