ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

ASP.NET webControls clientScriptsLocation ページロード時エラーに対応

ASP.NET1.1で開発されているシステムで以下の事象がおきました。
イントラネットだと正常に動くのに、リバースプロキシ経由でクライアントからアクセスすると
ページLoad時にJavaScriptエラーが発生します。
エラーメッセージ

ラインタイムエラーが発生しました。デバッグしますか?

調べた結果、CustomValidatorコントロールを実装しているページを表示する際
クライアント側がエラー処理を実行するのに必要なクライアントスクリプトを
参照できていないためでした。

CustomValidatorコントロールはデフォルト設定だと、
クライアント上で以下のタグで表示されます。
<script language="javascript" src="/asp_client/system_web/1-1-4322/WebUIValidation.js"></script>

src="/asp_client/system_web/1-1-4322/WebUIValidation.js" が
CustomValidatorが参照するクライアントスクリプトのパスで
デフォルト設定のIISでは C:/Inetput/wwwroot/asp_client/system_web/1-1-4322
に存在しています。(IISがCドライブにある場合)

今回の事象はリバースプロキシ経由でアクセスした際、クライアントが
WebUIValidation.jsのパスが参照できないために発生しています。


なので参照可能なパスをタグ内に表示できるよう、Web.configに以下の記述を追加しました。
<webControls clientScriptsLocation="http://proxyName/仮想ディレクトリのエイリアス名/asp_client/system_web/1-1-4322/" />

そして asp_client/system_web/1-1-4322フォルダを仮想ディレクトリ直下に移動します。


この設定により、CustomValidatorのクライアント上での表示は以下のようになります。
<script language="javascript" src=proxyName/仮想ディレクトリのエイリアス名/asp_client/system_web/1-1-4322/WebUIValidation.js"></script>

これでクライアントからリバースプロキシ経由でWebUIValidation.jsを
参照できるようになりました。

今回のまとめ
1. ASP.NETが参照するクライアントスクリプトのパスはweb.configで設定可能。
2. <webControls clientScriptsLocation="クライアントスクリプトの格納フォルダパス" />
  で設定する。