EIS. Tratamiento del error “Error in deserializing body of reply message for operation ‘xxxxxxxxxx’”
Si el error que se presenta es “Error in deserializing body of reply message for operation ‘xxxxxxxxxx’”, entonces hay un problema con el xml de la respuesta con respecto a la clase proxy generada en base al WSDL del servicio web. Es posible que el error se dé solamente con ciertas respuestas de un método web, dado que el problema puede ser de datos. Si se da siempre, entonces es probable que sea un error en la estructura del xml.
Los motivos pueden ser los siguientes:
1- El xml no está bien formado o no valida contra el wsdl
2- En caso que se use WCF, el xml es demasiado grande para los parámetros informados en el binding del .config
Qué se le debe pedir al usuario:
1- Clase Proxy creada con WCF y archivo .config de EIS o de Proxy Manager, dependiendo de qué aplicación dio el error.
2- Log de WCF de la ejecución del método web en el momento que dio error, activándolo con los parámetros logEntireMessage y logMessagesAtServiceLevel del .config en true.
3- Cual es el método web que da el error.
Pasos a seguir para simular el web service en laboratorio:
1- Extraer el xml de la respuesta desde el archivo de log de WCF (sólo lo que está comprendido entre los tags inclusive), utilizando la herramienta SvcTraceViewer.exe que se incluye en la carpeta “AssembliesGeneration\VsSdkTools”, y guardar todo en un archivo .xml.
2- Editar el archivo xml y agregarle el siguiente header:
a.<?xml version=”1.0″ encoding=”utf-8″?>
3- Abrir el xml con IE, para comprobar que está bien formado. Si hay algún error, corregirlo antes que nada.
4- Si dentro del xml hay campos que se sabe son fechas y que están en blanco, ponerles el siguiente valor (que implica una fecha nula para el framework de .Net):
a. 0001-01-01T00:00:00
5- Editar el xml de la respuesta, reemplazando el header por alguno de los siguientes, y guardarlo como Respuesta.aspx:
a. Si se usa SOAP11: <% Response.ContentType=”text/xml;charset=utf-8″ %>
b. Si se usa SOAP12: <% Response.ContentType=”application/soap+xml;charset=utf-8″ %>
6- Copiar el aspx dentro de una carpeta web.
7- Editar el .config de EIS o Proxy Manager, agregando el binding y el endpoint que están dentro del .config que envió el usuario y que corresponden al servicio web.
8- Modificar la url del endpoint del .config para que apunte al aspx:
a. address=http://localhost/test/Respuesta.aspx
9- Ejecutar el web method desde EIS o Proxy Manager.
10- Si se siguen produciendo errores de deserialización, como primera medida, aumentar el valor de los siguientes parámetros del binding en el .config con los valores recomendados:
a. maxReadPoolSize=”64″
b. maxWritePoolSize=”16″
c. maxDepth=”256″
d. maxStringContentLength=”16777216″
e. maxArrayLength=”16777216″
f. maxBytesPerRead=”8192″
g. maxNameTableCharCount=”65536″
h. maxBufferPoolSize=”1048576″
i. maxReceivedMessageSize=”104857600″
j. maxBufferSize=”104857600″
11- Si luego de volver a probar se siguen produciendo errores de deserialización, comentar por fragmentos el xml dentro del aspx y seguir probando hasta que el error desaparezca.
12- Cuando se aisló el tag xml que producía el error, corregirlo, descomentar el fragmento de xml y probar nuevamente hasta que no haya más errores.
13- Una vez que todo funcione correctamente, documentar todos los problemas encontrados en el xml e informárselos al usuario, para que corrijan la respuesta del método web o el wsdl.
Nota: cada vez que se modifica el .config, se debe reiniciar EIS o Proxy Manager para que se tomen los cambios.