我有一个相当棘手的问题,我对此进行了大量研究,但没有找到解决方案。
我有一个由 Tomcat servlet 组成的 Web 应用程序。Tomcat 在 Windows 2008 R2 服务器上运行,并使用 IIS 中的 Apache ISAPI Redirector 1.2.37 重定向到/来自 Tomcat(使用 ajp13)。
我的应用程序管理一个 XML 文件库。当客户端(浏览器)请求时,servlet 使用 XSL 将 XML 文件转换为 HTML。HTML 被传递回 IIS,然后返回到浏览器进行显示。Xalan 是用于 JAXP javax.xml.transform 的实现。这种架构已经运行了好几年。
最近,我们从 Xalan 2.7.0 升级到 2.7.1,发现在浏览器中查看某些 XML 文件的 HTML 被截断。
经过一些试错调查,以下是我们所知道的:
- 仅当源 XML 文件 > ~1.7 MB 时才会发生截断。
- HTML 每次都在同一位置被截断。(缓冲区大小问题??)
- 我尝试将 Xalan 的输出直接重定向到一个文件……没有截断。
仅当 Xalan 2.7.1 与 IIS 7 一起使用时才会发生截断
Xalan 2.7.1 + IIS 7 = 截断
Xalan 2.7.1 + IIS 6 = 没有截断
Xalan 2.7.0 + IIS 7 = 没有截断
ISAPI 重定向器日志包含以下消息:
[error] isapi_write_client::jk_isapi_plugin.c (1250): WriteClient failed with 534 (0x00000216) [info] ajp_process_callback::jk_ajp_common.c (1945): Writing to client aborted or client network problems [info] ajp_service::jk_ajp_common.c (2607): (ajp13w) sending request to tomcat failed (unrecoverable), because of client write error (attempt=1) [info] service::jk_lb_worker.c (1400): service failed, worker ajp13w is in local error state [info] service::jk_lb_worker.c (1419): unrecoverable error 200, request failed. Client failed in the middle of request, we can't recover to another instance. [info] HttpExtensionProc::jk_isapi_plugin.c (2257): service() failed because client aborted connection
鉴于上述第 4 项和第 5 项,尚不清楚谁是罪魁祸首(IIS、重定向器、Xalan 或 Tomcat……或所有这些)。
任何建议将不胜感激。