環境は Windows Server 2003 R2 x64 + Visual Studio 2008 SP1。ローカルの Administrator アカウントだと動くのに、同じ設定で動かなかったように見えた。
やったことは以下。間違った設定をしていた可能性もあったので、既定の状態に戻す作業も入っている。
- Webサイトのプロパティ、「開始オプション」タブの 基本URL に指定するURLは localhost で指定する。
- DefaultAppPool のアプリケーションプールIDを Network Service (既定の状態) に戻す
- IISの設定 仮想ディレクトリのセキュリティで 統合Windows認証 を有効にする。(これは エラーメッセージのヘルプにある通り)
- IISの設定 仮想ディレクトリのセキュリティで 匿名アクセスを無効にする。
- Internet Explorer のオプションで「統合Windows認証 無効」
- Internet Explorer のオプションで「スクリプトのデバッグ 有効」
対象にするアプリケーションは、クッキー制御の都合により localhost では認証が動かないため名前解決をすると 127.0.0.1 になるような a001.example.com のようなWebサイトなので、そのようなURLで開始したかったのだが、「基本URLに指定するURL」については localhost にしておかないとエラーが発生するようだった。
これは、w3wp.exe プロセスを特定するために最初に HTTP DEBUG を投げる際、その時に統合認証が通るようなURLでないといけないという理由と思われる。
「Webサーバーと通信中に認証エラーが発生しました」が発生していた期間のIIS のログを確認すると、以下のような 401.1 エラー または 401.2 エラーが確認できた。
2008-10-15 05:48:09 W3SVC1 127.0.0.1 DEBUG /SampleWebSite/DebugAttach.aspx – 80 – 127.0.0.1 – 401 2 2148074254
2008-10-15 05:48:09 W3SVC1 127.0.0.1 DEBUG /SampleWebSite/DebugAttach.aspx – 80 – 127.0.0.1 – 401 1 0
2008-10-15 05:48:09 W3SVC1 127.0.0.1 DEBUG /SampleWebSite/DebugAttach.aspx – 80 – 127.0.0.1 – 401 1 2148074252
2008-10-15 05:52:41 W3SVC1 127.0.0.1 DEBUG /SampleWebSite/Default.aspx – 80 – 127.0.0.1 – 401 2 2148074254
2008-10-15 05:52:41 W3SVC1 127.0.0.1 DEBUG /SampleWebSite/Default.aspx – 80 – 127.0.0.1 – 401 1 0
2008-10-15 05:52:41 W3SVC1 127.0.0.1 DEBUG /SampleWebSite/Default.aspx – 80 – 127.0.0.1 – 401 1 2148074252
とはいえ、別のマシンでは http://a001.example.com のような基本URLを指定してもデバッグできているので、実際のところ良く分からない。
ちなみに IIS7用であればこの DebugAttach.aspx に対して独自のハンドラを指定する方法が存在している。