Есть два основных случая, когда могут появиться ошибки. Первый имеет место, когда переменная xml не может быть найдена в строке за¬проса. Без этого параметра приложение не знает, какую рассылку сле¬дует искать в файле feeds, xml, поэтому загружается документ, описы¬вающий возникшую ошибку. Этот статический документ в формате RSS загружается с помощью метода GetLocaleFileO (его мы обсудим ■иже) и выводится на страницу.
if (Request.QueryString["xml"] != null) {
// Здесь расположен код, который работает, если все в порядке
}
else {
Response.Write(GetLocalFile(Server.MapPath("error.xml"))),■
}
Документ с описанием ошибки представляет собой также документ формата RSS, поэтому он отображается так, как если бы это была обычная рассылка.
Вторая возможная причина возникновения ошибки - недоступность удаленного сервера. Чтобы перехватить эту ошибку, программный код обслуживания запроса и ответа помещают в блок try... catch.
■ельным, но может < вер окажется недос рамма чтения новс . какие-то новости,. гить, что версия из i эм случае, а именно i за перегруженности|
к. работать с ним пр a UTF-8:
try <
// Здесь находится код обслуживания веб-запроса
}
catch (WebException webEx) {
string fileTollse =
File.Exists(fileName)?fileName:Server.MapPath("error.xml"); Response.Write(GetLocalFile(fileToUse));
Перехват только ошибок WebException приводит к тому, что остальные пы ошибок остаются необработанными. Сообщения об ошибках в ASP. очень информативны: если возникнет ошибка UnauthorizedAccessExcep* (что вполне может случиться в блоке t гу... catch в ходе операции кэши~ ния) из-за отсутствия прав доступа, то сообщение об ошибке может заться совсем нелишним в поиске решения возникшей проблемы.
Теперь в игру вступает кэш. После того как будет обнаружена ош приложению необходимо определить, какой файл вывести на с~ цу: файл с рассылкой из кэша или документ с сообщением об ош Здесь в первую очередь проверяется существование файла в кэше, чего применяется метод File. Exists(). Если файл существует, то его держимое извлекается с помощью метода GetLocaleFileO и выво на страницу. Метод GetLocaleFileO, с которым мы уже имели представляет собой простую функцию чтения содержимого файла, открывает заданный файл, читает его и возвращает содержимое в строки:
public string GetLocalFile(string path) {
string contents = string.Empty; using (StreamReader file = File.OpenText(path)) {
contents = file.ReadToEndO;
}
return contents',
}
Это всего лишь вспомогательная функция, поскольку прило очень часто сталкивается с необходимостью чтения файлов.