Sugerencias para la resolución de problemas del tiempo de ejecución de los servicios web

Utilice estas sugerencias para resolver problemas de clientes de servicios web.

Cada sección de este tema muestra un problema que puede encontrar durante el tiempo de ejecución de un cliente de servicios web. Se proporciona una solución para ayudarle a resolver el problema.

Utilizar la propiedad ASYNC_TIMEOUT_MILLISECONDS para evitar la recepción de una excepción de tiempo de espera para clientes síncronos JAX-WS

Si los clientes síncronos JAX-WS (API de Java™ para servicios web basados en XML) reciben la excepción de servicios web, org.apache.axis2.AxisFault: Tiempo de espera excedido cuando se esperaba que el servidor enviara la respuesta, establezca la propiedad de tiempo de espera asíncrono, com.ibm.websphere.webservices.jaxws.Constants.ASYNC_TIMEOUT_MILLISECONDS, en el cliente para controlar el tiempo que se debe esperar la respuesta del servidor antes de que se genere un mensaje de error de tiempo de espera excedido. Especifique la propiedad de tiempo de espera excedido en milisegundos para establecer el periodo de tiempo de espera de una respuesta a una solicitud asíncrona. En el ejemplo siguiente se muestra cómo establecer esta propiedad:
 ((BindingProvider) port).getRequestContext().put(com.ibm.websphere.webservices.jaxws.Constants.ASYNC_TIMEOUT_MILLISECONDS, 30000);

La conexión con el host remoto falla

Si se muestra el error siguiente, WSWS3713E: Ha fallado la conexión con host remoto nombre_host, cuando se intenta conectar con el host remoto, compruebe los elementos siguientes:
  • Si el nombre de host que se lista en el mensaje de error es el nombre de host correcto, tendrá que verificar que la aplicación con el servicio web se esté ejecutando y esté disponible.
  • Si el nombre de host que se lista en el mensaje de error es un nombre de host incorrecto, es posible que tenga que actualizar el archivo WSDL para el servicio web o alterar temporalmente el URL de punto final que el nombre de host necesita utilizar. Para alterar temporalmente el URL de punto final de servicio web, consulte la información de configuración de enlaces de cliente de servicios web para saber cómo configurar la información de puerto.

La ejecución del cliente de servicio web con un archivo ibm-jaxrpc-client.jar en un entorno Solaris puede generar una excepción

Si utiliza la opción -jar, por ejemplo, java -jar <java_application>.jar, para especificar una aplicación Java en un entorno Solaris, se puede producir una excepción de clase no encontrada. Para evitar una excepción, utilice en su lugar la opción -classpath en lugar de la opción -jar, por ejemplo,
java -jar <su_aplicación_cliente>.jar, <archivo_clases_principal>

El problema se produce porque la especificación de carga de clases JDK de Sun es más estricta que las especificaciones JDK de IBM®.

Puede realizar uno de estos tres cambios para evitar una excepción:
  • Utilice la opción -classpath en lugar de la opción -jar , por ejemplo,
    java -jar <aplicación_java>.jar, <archivo_clases_principal >
  • Utilice la opción -Djava.ext.dirs con la opción -jar , por ejemplo,
    export WAS_HOME=/opt/IBM/WebSphere/AppServer ${WAS_HOME}/java/jre/bin/java 
    -Djava.ext.dirs=${DIR_INICIAL_WAS}/runtimes 
    -jar <su_aplicación_cliente>.jar, <su_aplicación_cliente>.args
  • Modifique la classpath en el archivo Manifest.MF para que incluya los archivos JAR (Java Archive) que necesita, por ejemplo:
    Class Path: /opt/IBM/WebSphere/AppServer/runtimes/ibm-jaxrpc-client.jar 

Resolución de las causas debidas a DNS de los problemas de rendimiento cuando se utiliza HTTP para la conexión a una interfaz de punto final de servicio que no está basada en una dirección IP privada

El servicio DNS puede no estar disponible cuando utiliza HTTP para conectar a una interfaz de punto final de servicio basada en una dirección IP privada. Por lo tanto, el rendimiento se ve afectado durante la resolución DNS.

Este problema se produce cuando el conector HTTP de salida del motor de servicio web intenta resolver el nombre de dirección de host y excede el tiempo de espera.

Puede modificar el archivo HOSTS para la dirección IP de destino para evitar la resolución de DNS.

Error de migración del tiempo de ejecución

Si ha instalado una aplicación de servicios web que se ha desarrollado para una versión de WebSphere Application Server anterior a la Versión 6, es posible que reciba la excepción siguiente:
WSWS3701E: Error: Se ha encontrado una excepción. Utilice wsdeploy para desplegar la aplicación. 
Esto podría corregir el problema. La excepción es <datos excepción>.

Esta excepción indica que ha habido un problema al ejecutar la aplicación que se ha desarrollado con herramientas soportadas por versiones anteriores a la versión 6. Una solución al problema es desinstalar la aplicación, ejecutar el mandato wsdeploy y volver a desplegar la aplicación.

El mandato wsdeploy está soportado por las aplicaciones JAX-RPC (Java API for XML-based RPC). El modelo de programación de JAX-WS (Java API for XML-Based Web Services) implementado por el servidor de aplicaciones no soporta el mandato wsdeploy. Si la aplicación de servicios web sólo contiene puntos finales JAX-WS, no es necesario que ejecute el mandato wsdeploy, ya que este mandato sólo se utiliza para procesar puntos finales JAX-RPC.

La excepción WebServicesFault aparece durante el tiempo de ejecución del servidor de aplicaciones para determinados archivos WSDL (Web Services Description Language).

Una excepción WebServicesFault aparece durante el tiempo de ejecución del servidor de aplicaciones para los archivos WSDL que definen operaciones con estilo de documento y uso de literal y utilizan la cabecera SOAP para transmitir los datos de entrada.

Si los archivos WSDL definen la operación con el estilo de documento y el uso de literal y esta operación correlaciona la entrada con la cabecera SOAP, la ejecución de los servicios web no puede encontrar la operación correcta para el servicio de destino y se visualiza la excepción WebServicesFault.

Para solucionar el problema, cambie los archivos WSDL para que la operación no tenga ninguna entrada que utilice la cabecera SOAP para transmitir los datos.

Aumente el valor del parámetro ConnectionIOTimeOut para evitar recibir una excepción al alojar los servicios web

Cuando aloje servicios web en WebSphere Application Server, se visualiza la excepción siguiente: java.net.SocketTimeOutException: Read Timed Out (Se ha excedido el tiempo de espera de lectura).

Este problema se debe una conexión de red lenta entre el cliente y el servicio web. En tales casos, es posible que el socket HTTP exceda el tiempo de espera antes de que el motor de servicios web lea completamente la solicitud SOAP. En la mayoría de los casos, un aumento súbito en la actividad de red global provoca este problema. El problema también se puede producir cuando el cliente está accediendo al servicio web desde una conexión de red lenta y cuando la solicitud SOAP tiene una gran cantidad de datos.

Para resolver el problema, aumente el parámetro ConnectionIOTimeOut para el transporte HTTP de contenedor web. El valor predeterminado es 5 segundos. Aumente el valor hasta 30 segundos o más. Consulte la información sobre las propiedades personalizadas de transporte HTTP para definir el valor utilizando la consola administrativa. Escriba el siguiente nombre y valor de propiedad:
  • Nombre: ConnectionIOTimeOut
  • Valor: 30
Si el servicio web se aloja en un entorno de clúster, establezca la propiedad en cada servidor de aplicaciones del clúster. Si el servidor de aplicaciones está a la escucha en más de un número de puerto, establezca la propiedad en todos los puertos.

Aumente el valor del parámetro syncTimeout para evitar recibir una excepción cuando se alojan clientes de servicios web

También puede obtener el error java.net.SocketTimeOutException: Read Timed Out cuando el parámetro syncTimeout utilizado por el cliente de servicios web no está establecido correctamente. Es importante tener esta información porque si establece el parámetro ConnectionIOTimeout en cero con la esperanza de evitar un tiempo de espera excedido como se indica en el tema "Propiedades personalizadas del transporte HTTP" solamente se evita el tiempo de espera excedido de conexión. El único modo de asegurarse de que no se produce un tiempo de espera excedido para una solicitud de un cliente HTTP, que puede ser un cliente de servicios web, es aumentar el valor del parámetro syncTimeout.

El parámetro syncTimeout sólo lo utiliza el cliente de servicios web. Este parámetro se puede establecer en el apéndice de servicios web que es un tiempo de espera para la llamada de servicios web.

Para resolver el problema, aumente el parámetro syncTimeout para el cliente de servicios web. Para saber cómo establecer este parámetro, consulte la configuración de los enlaces de cliente de servicios web JAX-RPC en la información de descriptor de despliegue ibm-webservicesclient-bnd.xmi.

Al ejecutar una aplicación de cliente de servicios web con la persistencia de sesiones activada o en un entorno en clúster, se puede generar un error WebServicesFault

Cuando ejecute una aplicación cliente de servicios web con la persistencia de sesiones activada o en un entorno en clúster, es posible que se visualice un error porque el cliente de servicios web intenta utilizar una conexión que el servidor HTTP ha cerrado. El siguiente es un ejemplo del error:
[mm/dd/aa hh:mm:ss:ttt EST] 0000006e SystemErr     R WebServicesFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
 faultString: java.io.IOException: Connection close: Read failed.Possible end of 
stream encountered. 
 faultActor: null
 faultDetail: 
Puede evitar este error mediante uno de los dos métodos siguientes:
  • Establezca la propiedad com.ibm.websphere.webservices.http.requestResendEnabled en true, por ejemplo, com.ibm.websphere.webservices.http.requestResendEnabled=true. Cuando esta propiedad está establecida en true, el cliente de servicios web se programa para que vuelva a enviar la solicitud si la solicitud ha fallado. Supervise el tiempo de ejecución del cliente si cambia el valor de la propiedad, porque es posible que la solicitud se haya enviado dos veces.

    Por ejemplo, si el cliente es una aplicación bancaria y establece la propiedad com.ibm.websphere.webservices.http.requestResendEnabled en true, es posible que una transacción se envíe dos veces a una cuenta. Consulte la información acerca de la configuración de propiedades de transporte HTTP adicionales utilizando el panel de propiedades personalizadas JVM de la consola administrativa para saber cómo configurar la propiedad com.ibm.websphere.webservices.http.requestResendEnabled.

  • [Linux]Si está utilizando el servidor IBM HTTP Server en un sistema operativo AIX o Linux, puede establecer la propiedad MaxSpareThreads en el mismo valor que la propiedad MaxClients situada en el archivo httpd.conf. Por ejemplo, si MaxClients=600, cambie MaxSpareThreads para que sea igual a 600 (MaxSpareThreads=600).

    La ventaja de este método para evitar el error, es que el servidor IBM HTTP Server no concluye las conexiones que están desocupadas o casi desocupadas. La desventaja de este método es que el servidor IBM HTTP Server utiliza un número excesivo de recursos para que haya un número adicional de hebras disponibles incluso en períodos de poca actividad. Esta opción sólo puede llevarse a cabo en un sistema operativo AIX o Linux.


Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwbs_trbclientruntime
File name: rwbs_trbclientruntime.html