Web Service 客户机运行时故障诊断技巧

使用这些技巧对 Web Service 客户机进行故障诊断。

本主题中每个部分描述一个问题,这些问题在 Web Service 客户机运行时期间可能遇到。还提供了有助于对问题进行故障诊断的解决方案。

使用 ASYNC_TIMEOUT_MILLISECONDS 属性来避免接收 JAX-WS 同步客户机的超时异常

如果“针对基于 XML 的 Java™ API 的 Web Service”(JAX-WS) 同步客户机接收到 Web Service 异常 org.apache.axis2.AxisFault:等待服务器发送响应时超时,请在客户机上设置异步超时属性 com.ibm.websphere.webservices.jaxws.Constants.ASYNC_TIMEOUT_MILLISECONDS,以控制生成超时错误消息前等待来自服务器的响应的时间。指定超时属性值(以毫秒计)以设置等待对异步请求的应答的时间段。以下示例说明如何设置此属性:
 ((BindingProvider) port).getRequestContext().put(com.ibm.websphere.webservices.jaxws.Constants.ASYNC_TIMEOUT_MILLISECONDS, 30000);

与远程主机的连接失败

如果当您尝试连接到远程主机时显示以下错误:WSWS3713E: 连接到远程主机 host_name 失败,请检查下列各项:
  • 如果该错误消息中列出的主机名是正确的主机名,那么需要验证具有该 Web Service 的应用程序是否正在运行以及是否可用。
  • 如果该错误消息中列出的主机名是不正确的主机名,那么可能需要更新该 Web Service 的 WSDL 文件,或者覆盖该主机名需要使用的端点 URL。要覆盖 Web Service 端点 URL,请参阅“配置 Web Service 客户机绑定”信息,以了解如何配置端口信息。

在 Solaris 环境中运行带有 ibm-jaxrpc-client.jar 文件的 Web Service 客户机可导致异常

如果在 Solaris 环境中使用 -jar 选项(例如,java -jar <java_application>.jar)来指定 Java 应用程序,那么可发生“找不到类”异常。要避免发生异常,请使用 -classpath 选项而不是 -jar 选项,例如:
java -jar <your_client_application>.jar, <main_class_file>

因为 Sun JDK 类装入规范比 IBM® JDK 规范更严格,所以会出现该问题。

可以完成下列三处更改之一来避免异常:
  • 使用 -classpath 选项取代 -jar 选项,例如:
    java -jar <java_application>.jar, <main_class_file >
  • -Djava.ext.dirs 选项与 -jar 选项配合使用,例如,
    export WAS_HOME=/opt/IBM/WebSphere/AppServer ${WAS_HOME}/java/jre/bin/java 
    -Djava.ext.dirs=${WAS_HOME}/runtimes 
    -jar <your_client_application>.jar, <your_client_application>.args
  • 修改 Manifest.MF 中的类路径以包括需要的 Java 归档 (JAR) 文件,例如,
    Class Path: /opt/IBM/WebSphere/AppServer/runtimes/ibm-jaxrpc-client.jar 

当使用 HTTP 来连接不基于专用 IP 地址的服务端点接口时,解析 DNS 会导致性能问题

当使用 HTTP 来连接基于专用 IP 地址的服务端点接口时,DNS 服务经常不可用。因此,在 DNS 解析期间,性能会降低。

在 Web Service 引擎中的出站 HTTP 连接程序尝试解析主机地址名称和超时的情况下,会出现此问题。

可以修改目标 IP 地址的 HOSTS 文件以避免解析 DNS。

运行时迁移错误

如果安装了为 WebSphere® Application Server V6 之前的版本开发的 Web Service 应用程序,那么可能遇到以下异常:
WSWS3701E: Error: An exception was encountered. Use wsdeploy to deploy your application.
This might correct the problem. The exception is <exception data>.

此异常表明在运行使用 V6 之前版本支持的工具开发的应用程序时,发生了问题。该问题的解决方案是卸载该应用程序,然后运行 wsdeploy 命令并重新部署该应用程序。

Java API for XML-based RPC (JAX-RPC) 应用程序支持 wsdeploy 命令。由应用程序服务器实现的 Java API for XML-Based Web Services (JAX-WS) 编程模型不支持 wsdeploy 命令。如果 Web Service 应用程序仅包含 JAX-WS 端点,那么您不需要运行 wsdeploy 命令,这是因为此命令仅用来处理 JAX-RPC 端点。

某些 Web 服务描述语言 (WSDL) 文件的应用程序服务器运行时期间显示了 WebServicesFault 异常

某些 WSDL 文件的应用程序服务器运行时期间显示了 WebServicesFault 异常,因为这些文件定义了带有 document styleliteral use 的操作,并且使用 SOAP 头来传递输入数据。

如果 WSDL 文件定义了带有 document styleliteral use 的操作,并且此操作将输入映射到 SOAP 头,那么 Web Service 运行时找不到目标服务的正确操作,并显示 WebServicesFault 异常。

要解决该问题,更改 WSDL 文件,使操作不使用 SOAP 头来传递输入数据。

增加 ConnectionIOTimeOut 参数的值以避免在托管 Web Service 时收到异常

当在 WebSphere Application Server 上托管 Web Service 时,将显示以下异常:java.net.SocketTimeOutException: 读超时

客户机和 Web Service 之间的低速网络连接导致此问题。在这些情况下,Web Service 引擎读完 SOAP 请求之前 HTTP 套接字可能会超时。在大多数情况下,整个网络中活动突然增加会导致此问题。如果客户机通过低速网络连接访问 Web Service,且 SOAP 请求拥有大量的数据,那么也会发生此问题。

要解决问题,请增加 Web 容器 HTTP 传输的 ConnectionIOTimeOut 参数的值。缺省值为 5 秒。将值增加为 30 秒或更大的值。请参阅“HTTP 传输定制属性”信息,以了解如何使用管理控制台来设置该值。输入以下属性名和值:
  • 名称:ConnectionIOTimeOut
  • 值:30
如果 Web Service 处于集群环境中,那么在集群的每个应用程序服务器上都设置此属性。如果应用程序服务器侦听多个端口号,那么在所有端口上设置此属性。

增加 syncTimeout 参数的值以避免在主管 Web Service 客户机时收到异常

如果未正确设置 Web Service 客户机所使用的 syncTimeout 参数,您也会接收到 java.net.SocketTimeOutException: 读超时错误。必须了解这一点,因为如果您将 ConnectionIOTimeout 参数设为零并希望可以像“HTTP 传输定制属性”中说明的那样防止超时,那么仅连接超时被阻止。确保来自 HTTP 客户机(可以是 Web Service 客户机)的请求不超时的唯一方法是增加 syncTimeout 参数设置的值。

syncTimeout 参数仅供 Web Service 客户机使用。可在 Web Service 存根(它是 Web Service 调用的超时)中设置此参数。

要解决该问题,请增加 Web Service 客户机的 syncTimeout 参数的值。要了解如何设置此参数,请参阅“ibm-webservicesclient-bnd.xmi 部署描述符”信息中的“配置 JAX-RPC Web Service 客户机绑定”。

在会话持久性打开的情况下或在集群环境中执行 Web Service 客户机应用程序可导致 WebServicesFault 错误

如果在会话持久性打开的情况下或在集群环境中运行 Web Service 客户机应用程序时,那么由于 Web Service 客户机尝试使用已由 HTTP Server 关闭的连接,可能会显示错误。以下是该错误的一个示例:
[mm/dd/yy 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: 
可以通过遵循下列两种方法之一来避免此错误:
  • 将 com.ibm.websphere.webservices.http.requestResendEnabled 属性设为 true,例如,com.ibm.websphere.webservices.http.requestResendEnabled=true。当此属性设为 true 时,如果请求已失败,那么会对 Web Service 客户机进行编程以重新发送该请求。如果更改了属性值,那么监视客户机运行时,因为该请求可能被发送两次。

    例如,如果客户机是银行应用程序并且已将 com.ibm.websphere.webservices.http.requestResendEnabled 属性设为 true,那么一次交易可能会被记录到一个帐户中两次。请参阅“在管理控制台中使用 JVM 定制属性面板来配置其他 HTTP 传输属性”,以配置 com.ibm.websphere.webservices.http.requestResendEnabled 属性。

  • [Linux]如果在 AIX® 或 Linux 操作系统上使用 IBM HTTP Server,那么可以将 MaxSpareThreads 属性与 httpd.conf 文件中的 MaxClients 属性设为同一值。例如,如果 MaxClients=600,那么将 MaxSpareThreads 的值更改为 600 (MaxSpareThreads=600)。

    选择此方法来避免该错误的优点是,IBM HTTP Server 不会关闭空闲或接近空闲的连接。选择此方法的缺点是,哪怕是在活动很少的时间段期间,IBM HTTP Server 都会使用过多资源来使额外的线程保持为可用状态。只能在 AIX 或 Linux 操作系统上选择此方法。


指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwbs_trbclientruntime
文件名:rwbs_trbclientruntime.html