Все страницы сайта — это неудобно.
В данном случае ни элементов управления, ни состояния страницы ни остальных наворотов не нужно, поэтому используется обработчик, что впринципе логично.
Более того, дискомфорта нет никакого, если использовать Http Handler в данном случае.
эммм. на вкус и цвет все фломастеры разные. но мне было бы проще сосзадть пустую страницу с отключенным sessionstate (весь остальной хлам типа viewstate и validation я всегда отключаю на уровне всего сайта). На которой не будет никаких контролов, и написать туда этот код.
В этом случае оверхед на то, что это страница а не хендлер будет уже незаметен.
Зато нам не надо править вебконфиг (который будет выглядеть, кстати, по разному для IIS6/тестовый сервер студии и IIS7/7.5).
Опять же, напоминаю для тех кто забыл, сайтмап у нас запрашивается роботами и довольно редко. Если гонитесь за производительностью или запускаете с помощью asp.net шаттл, то настройте правильно кэширование.
Кому как :)
Для меня лично в конкретно данном случае проще будет написать обработчик. Веб-конфиг, кстати, править совсем не обязательно раз уж на то пошло :)
Во-первых, если делаете HttpHandler, то ставьете ему IsReusable = true, тк в вашем случае один и тот же объект может обрабатывать разные запросы и его создание заново не требуется.
Во-вторых, мне кажется разумнее действительно использовать aspx-страничку, тк можно разметку вынести в aspx-файл и поместить в какой-нибудь ListView, а логика будет в кодовой части. (там есть специальный контрол asp:Xml для вывода xml)
вообще вся страница может быть XML файлом, контролы типа Repeater работают с чем угодно, никто не заставляет выводить HTML, можете хоть Javascript генерить в aspx страницах.
Может, но тогда в студии будут отображаться подсказки о несуществующих тегах.
А я люблю, чтобы всё было чётко ) Поэтому при генерации xml всю страницу лучше оборачивать в asp:Xml
Генерация Sitemaps «на лету» с помощью ASP.NET HttpHandler