Para que Delphi 7 importe el WSDL y genere el stub correctamente de un Servicio Web implementado en WCF (Windows Communication Foundation) hay que actualizar previamente D7 y añadir una lÃnea de código.
Pasos a seguir.
1. Bajarse de la Web de Embarcadero el zip
Delphi SOAP Runtime and Importer Update2. Descomprimir el zip en una carpeta
3. Realizar previamente una copia de
$(DELPHI)\Source\soap y copiar dentro el contenido de la carpeta
src del zip
4. Realizar previamente una copia de
$(DELPHI)\Bin\WSDLImp.exe y reemplazarlo por el que se encuentra en el zip
5. Abrir D7 y generar el stub.
6. Editar el stub generado y añadir, dentro de la sección
initialization, la siguiente lÃnea:
InvRegistry.RegisterInvokeOptions(TypeInfo([Nombre del servicio]),ioDocument);
7. Añadir las directivas de compilación CLEANUP_SOAP_HEADERS;FIX_ELEM_NODE_NS al proyecto
8. Añadir al Search Path del proyecto
$(DELPHI)\Source\soapCon estos pasos se solucionan, al menos, tres problemas:
1. Al invocar un método con parámetros D7 devuelve un error:
The formatter threw an exception while trying to deserialize the
message: Error in deserializing body of request message for operation 'Testing'. End element 'Body' from namespace 'http://schemas.xmlsoap.org/soap/envelope/'
expected. Found element 'parameters' from namespace
2. Al invocar un método con parámetros primitivos
string, WCF recibe parámetros nulos
3. Al invocar un método con parámetros de instancia de una clase, WCF devuelve un error:
System.NullReferenceException: Object reference not set to an instance of an object
Etiquetas: programacion
// entrada de 3Engine @
10:54
Publicar un comentario en la entrada