私はかなり厄介な問題を抱えており、多くの調査を行ってきましたが、解決策を見つけることができませんでした。
Tomcat サーブレットで構成される Web アプリケーションがあります。Tomcat は Windows 2008 R2 サーバー上で実行され、Tomcat との間のリダイレクトに IIS で Apache ISAPI Redirector 1.2.37 を使用します (ajp13 を使用)。
私のアプリケーションは、XML ファイルのライブラリを管理しています。クライアント (ブラウザー) から要求されると、サーブレットは 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 からの出力をファイルに直接リダイレクトしようとしました...切り捨てはありません。
IIS 7 で Xalan 2.7.1 を使用した場合にのみ切り捨てが発生する
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 ... またはそれらすべて) が明確ではありません。
どんな提案でも、非常に高く評価されます。