Power Builder - Problema WebService

   
Vista:

Problema WebService

Publicado por Jorge (12 intervenciones) el 11/06/2010 16:59:26
Buenas a todos,

estoy intentando invocar un servicio web desde Power builder 11.5 y al llamar a uno de los servicios me aparece el siguiente mensaje de error: "NO SE ENTENDIÓ EL ENCABEZADO SOAP ACTION". ¿Alguien tiene idea de porqué?.

Muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema WebService

Publicado por marcela (119 intervenciones) el 15/06/2010 18:33:28
Hola, podrias ser "mas especìfico" Jorge
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema WebService

Publicado por Jorge (12 intervenciones) el 16/06/2010 09:36:44
He creado un web service proxy con el wizard, marcando la opción 'Use .net Engine' y 'WSDL engine .NET'. Esto me recupera los servicios y estructuras correctamente. El servicio esta creado en C# y utiliza SOAP 1.2.

Este es el código que tengo implementado:

///////////////////////////////////////////////////////
Long ll_val,lLog
String ls_wsdl_location,ls_nombre

Soapconnection conn
imdb ws_imdb

imdbtitle datos_pelicula_rec //Estructura

conn = create Soapconnection //iniciar conexion

ws_imdb = create imdb

datos_pelicula_rec = create imdbtitle

lLog = conn.SetSoapLogFile (GetCurrentDirectory() + "\mySoapLog.log")

ls_wsdl_location="http://www.imdbservice.com.ar/service/imdb.svc?wsdl"

ll_val = conn.Createinstance (ws_imdb,"imdb",ls_wsdl_location)

Choose Case ll_val

Case 0 //Correcto

try

datos_pelicula_rec=ws_imdb.SearchTitle('Shrek')

catch (SoapException e)
Messagebox('Error', 'Error al invocar el servicio web: ' + e.text )
end try

Case 100 //Error

Messagebox('Error', 'Nombre proxy incorrecto.')

Case 101 //Error

Messagebox('Error', 'Error al crear proxy.')

End choose

Destroy conn

///////////////////////////////////////////////
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema WebService

Publicado por marcela (119 intervenciones) el 16/06/2010 23:09:28
Como una extensión SOAP al encabezado se incluye SOAPAction, que define un URI desde donde se localizará el servicio, que en este caso es un cadena vacía, ya que se ha establecido como www.stockquoteserver.com/soap/StockQuote . Es importante remarcar que el encabezado y el cuerpo del mensaje están delimitados por dos retornos de carro/nueva línea (línea 6 en blanco).

El contenido del mensaje se describe a partir de la línea 7. Con xmlns:identificador="URI" se define un espacio de nombre (namespace), que es un identificador de ámbito para evitar ambigüedades. Se observa que el encabezado contiene un elemento Transaction, con atributo mustUndestand="1" (tiene que ser interpretado) y con un valor de 5, mientras que el cuerpo contiene un elemento GetLastTradePrice (el nombre del servicio) con el elemento symbol (el parámetro del servicio) y el valor DEF (el valor a buscar). ok ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema WebService

Publicado por Jorge (12 intervenciones) el 17/06/2010 09:15:43
En primer lugar muchas gracias por dedicarme tu tiempo. Soy nuevo en esto de los servicios web (no en PB) y no me he enterado mucho. ¿Me falta algún dato/parámetro por rellenar? ¿que es lo que debo de hacer?.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema WebService

Publicado por marcela (119 intervenciones) el 18/06/2010 02:11:21
Jorge, tiempo es lo que me sobra, te explico, para optimizar el rendimiento de las aplicaciones basadas en Servicios Web, se han desarrollado tecnologías complementarias a SOAP, que agilizan el envío de los mensajes (MTOM) y los recursos que se transmiten en esos mensajes (SOAP-RRSHB).Por otro lado, WSDL (Lenguaje de Descripción de Servicios Web), permite que un servicio y un cliente establezcan un acuerdo en lo que se refiere a los detalles de transporte de mensajes y su contenido, a través de un documento procesable por dispositivos. WSDL representa una especie de contrato entre el proveedor y el que solicita. WSDL especifica la sintaxis y los mecanismos de intercambio de mensajes.sEGUN las necesidades de las aplicaciones basadas en Servicios Web , se han desarrollado mecanismos que permiten enriquecer las descripciones de las operaciones que realizan sus servicios mediante anotaciones semánticas y con directivas que definen el comportamiento. Esto permitiría encontrar los Servicios Web que mejor se adapten a los objetivos deseados. Además, existe una tecnología que permite una definición de estos procesos mediante la composición de varios Servicios Web individuales, lo que se conoce como coreografía.
Te mando un ej:
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
<m:reserva xmlns:m="http://empresaviajes.ejemplo.org/reserva"
env:role="http://www.w3.org/2003/05/soap-envelope/role/next"
env:mustUnderstand="true">
<m:referencia>
uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d
</m:referencia>
<m:fechaYHora>2001-11-29T13:20:00.000-05:00</m:fechaYHora>
</m:reserva>
<n:pasajero xmlns:n="http://miempresa.ejemplo.com/empleados"
env:role="http://www.w3.org/2003/05/soap-envelope/role/next"
env:mustUnderstand="true">
<n:nombre>Pepe Ejemplo</n:nombre>
</n:pasajero>
</env:Header>
<env:Body>
<p:itinerario
xmlns:p="http://empresaviajes.ejemplo.org/reserva/viaje">
<p:ida>
<p:salida>Nueva York</p:salida>
<p:llegada>Los Angeles</p:llegada>
<p:fechaSalida>2001-12-14</p:fechasalida>
<p:horaSalida>última hora de la tarde</p:horaSalida>
<p:preferenciaAsiento>pasillo</p:preferenciaAsiento>
</p:ida>
<p:vuelta>
<p:salida>Los Angeles</p:salida>
<p:llegada>Nueva York</p:llegada>
<p:fechaSalida>2001-12-20</p:fechaSalida>
<p:horaSalida>media-mañana</p:horaSalida>
<p:preferenciaAsiento/>
</p:vuelta>
</p:itinerario>
<q:alojamiento
xmlns:q="http://empresaviajes.example.org/reserva/hoteles">
<q:preferencia>ninguna</q:preferencia>
</q:alojamiento>
</env:Body>
</env:Envelope>
Entendiste? programas en powerbuilder?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema WebService

Publicado por Jorge (12 intervenciones) el 18/06/2010 09:12:46
Hola Marcela,

de nuevo gracias por contestar. Entiendo la explicación y el ejemplo pero no se como puedo modificar esa información en mi código de Power. No veo opciones y tampoco se como y que xml genera PB.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema WebService

Publicado por Jorge jorgebinda@msn.com (21 intervenciones) el 14/04/2011 17:59:16
Yo lo desarrolle de esta manera es un ejemplo práctico entre Pb 11.5 y Alfresco de Java con un webservices que consume el pb. pero tengo un problema cuando el archivo que envío o que recibo sobrepasa los 4 megas.
de paso q ves mi ejemplo y funciona , alguno de uds puede ayudarme.

/**************************************************************************
AUTOR : JORGE BINDA
PROPOSITO : Abre y Guarda el Documento directamente en el Alfresco
ARGUMENTO : HOJA DE TRAMITE, NUMERO DE CORRELATIVO Y AREA
RETORNO : MSG
FECHA : 07/04/2011
---------------------------------------------------------------------------
ID AUTOR FECHA PROPOSITO
---------------------------------------------------------------------------
@1
**************************************************************************/

SoapConnection conn // Define SoapConnection
ws_cmsservice proxy_obj // Declare proxy
long rVal, lLog
string ls_cadena
//contenidoecmbean str_objrpta
rptawsbean str_objrpta
blob lblb_docum

string str_endpoint

//Conexion al web services
str_endpoint = "http://192.168.0.174:8084/WS_CMS/ws_cms?wsdl"
conn = create SoapConnection //Instanciando la conexion

lLog = conn.SetOptions("SoapLog=~"C:\mySoapLog.log~"")

rVal = Conn.CreateInstance(proxy_obj,"ws_cmsservice",str_endpoint)

// Creando el Objeto Proxy
try

string ls_codigo
String ls_app_path

ls_app_path = GetCurrentDirectory()

//Selecciono el Archivo a abrir
STRING ls_pathname, ls_filename, ls_filtro
LONG ll_File
BLOB lbl_data, lbl_temp

ls_filtro = "PDF Files (*.pdf),*.pdf," + "DOC Files (*.doc),*.doc,"
IF GetFileOpenName ( "Archivo de Documento: ", ls_pathname, ls_filename , "PDF", ls_filtro) = 1 THEN

//Cargamos el archivo si sobre pasa el valor permitido
ll_File = FileOpen(ls_pathname, StreamMode!)
DO WHILE FileRead(ll_file,lbl_temp) > 0
lbl_data += lbl_temp
LOOP
FileClose(ll_file)

IF ll_File <> -1 THEN
FileRead(ll_file, lbl_data)
FileClose(ll_file)

byte lbyte_array[]
String ls_null, ls_uuid, ls_uuid_ant
setnull(ls_null)

//Buscamos el uuid anterior para ver si es nuevo o actualiza
Select x_digital_alfresco Into :ls_uuid_ant From Tflujo Where c_expediente = :c_expediente And n_correlativo = :n_correlativo;

//Convertimos el Archivo BLOB en ARRAY DE BITS para enviarlo al Alfresco
lbyte_array[] = GetByteArray(lbl_data)

//Genera la ruta donde se guarda o actualiza el archivo
//Obtiene la descripcion del area y si hay comas se las quito
String ls_area, ls_mes, ls_ruta
select replace(x_remitente,',',' ') into :ls_area from tremitente where c_remitente = :c_area;

//Obtiene el nombre del mes
ls_mes = string(datetime(today()),'MM')
ls_mes = f_nombre_mes(ls_mes)

ls_ruta = ls_area+'/'+leftA(c_expediente,4)+'/'+ls_mes
//Fin genera ruta
String ls_nomarc
ls_nomarc = trim(c_expediente)+'_'+String(n_correlativo)+'.pdf'
//ls_filename

// Creando el Objeto Proxy

//Genera nombre del archivo
If isnull (ls_uuid_ant) or ls_uuid_ant = '' Then
//Inserta
str_objrpta = proxy_obj.registrardocumento('MIIDjjCCAvegAwICVVMx', ls_nomarc,ls_ruta, lbyte_array)

Else
//Actualiza
str_objrpta = proxy_obj.actualizarDocumento('MIIDjjVMx',ls_uuid_ant, ls_nomarc,ls_ruta, lbyte_array)
End If

//Obtenemos el uuid que arroja el Alfresco cuando graba en su bd
ls_uuid = str_objrpta.uuid

If str_objrpta.codmsg = 'ok' Then
//Graba el uuid en la tabla flujo y el nombre original
Update Tflujo Set x_digital_Alfresco = :ls_uuid, x_nombre_original = :ls_filename Where c_expediente = :c_expediente And n_correlativo = :n_correlativo;

//Borra el Adjunto Digital que tenía antes
Integer li_digital, li_null
SetNull(li_null)
SELECT ID_DIGITAL Into :li_digital FROM Tflujo Where c_expediente = :c_expediente And n_correlativo = :n_correlativo;

Delete from tdoc_digital WHERE ID_DIGITAL = :li_digital;

Update Tflujo Set ID_DIGITAL = :li_null Where c_expediente = :c_expediente And n_correlativo = :n_correlativo;

Commit;

messagebox('Sistema de Trámite Documentario','Archivo cargado corréctamente' )
ElseIf str_objrpta.codmsg = 'nok' Then
messagebox('Sistema de Trámite Documentario',str_objrpta.cadmsg )
End If
End If
End If

// Control de errores del webservices
Catch ( SoapException e )
messagebox("Error", e.GetMessage() )
messagebox ("Error", "No se puede invocar al WebService ~n"+string('ws_cmsservice'))
// Envia el menseje de error de existir
end try
destroy conn

ChangeDirectory(ls_app_path)

GarbageCollect()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar