Asp net ошибка сервера в приложении - IT Новости из мира ПК
Remkomplekty.ru

IT Новости из мира ПК
12 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Asp net ошибка сервера в приложении

Asp net ошибка сервера в приложении

И снова здравствуйте.

> При проверке Web сервер определяется, а опубликованная база не находится.
Пожалуйста, уточните, что означает «база не находится».

Скриншот сообщения в файле Снимок1.

Попробовал исполнить Вашу инструкцию, получил следующее:

1. При публикации через Конфигуратор появилось сообщение Снимок2. NTFS-ные права на БД этой группе добавил.

Не помогло, при «проверке готовности компьютера» ошибка осталась таже «Не удалось найти публикацию базы!». Попробовал войти браузером на опубликованное приложение выдал ошибку про кривую библиотеку ISAPI. Методом проб и ошибок выснилось, что при установке IIS 8.5 «по умолчанию» не устанавливаются компонент «Расширения ISAPI».

2. Устоновил в IIS не достающий компонент «Расширения ISAPI». Опубликованная база опять не нашлась. Но при входе через браузер на публикацию ошибка стала другая.

Ошибка HTTP 500.0 — Internal Server Error

Невозможно отобразить эту страницу ввиду того, что произошла внутренняя ошибка сервера.

Подробные сведения об ошибке:

Обработчик 1C Web-service Extension

Код ошибки 0x800700c1

Запрошенный URL-адрес http://192.168.1.51:80/Money_101251

Физический путь C:InetpubwwwrootMoney_101251

Метод входа Анонимная

Пользователь, выполнивший вход Анонимная

3. После нескольких часов экспериментов базу опубликовать удалось, путем установки галки «использовать аутентификацию операционной системы» при публикации через Кофигуратор.

При «проверке готовности компьютера» ошибок нет. Адрес в настройках 1С проверяется. При входе через браузер возникает следующая ошибка.

Ошибка HTTP 401.2 — Unauthorized

Вы не имеете права просматривать эту страницу из-за недопустимости заголовков проверки подлинности.

Подробные сведения об ошибке:

Модуль IIS Web Core

Обработчик 1C Web-service Extension

Код ошибки 0x80070005З

апрошенный URL-адрес http://192.168.1.51:80/Money_101251

Физический путь C:InetpubwwwrootMoney_101251

Метод входа Пока не определено

Пользователь, выполнивший вход Пока не определено

4. Печальные итоги.

Остановился на двух неработающих вариантах.

Публикация без галки «использовать аутентификацию операционной системы» (Соответствует включенной в консоли IIS для опубликованного приложения «анонимной проверки подлинности»)

Сервис на компе не находится. При попытке синхронизации iPad ошибка в Миниденьгах, что не найден сервис синхронизации. Ощущение что где то на компе не хватает NTFS-ных прав, вроде перепробовал уже все.

Публикация с галкой «использовать аутентификацию операционной системы» (Соответствует отключенной в консоли IIS для опубликованного приложения «анонимной проверки подлинности»)

Сервис на компе находится, адрес проверяется. Но при сихронизации Миниденьги пишут ошибку «Неправильное имя или пароль пользователя настольного приложения». Экспериментировал с заведением пользователя в настольной 1С — ни какие варианты не помогли.

Скорее всего Миниденьги не корректно обрабатывают возвращаемую от сервиса ошибку, и проблема не в пользователе настольного приложения, а в том что запрещены анонимные подключения к сервису.

Подскажите что еще можно покопать и в каком варианте?

Ошибка сервера в приложении ‘ / ‘ (ASP.NET)

Я просто настраиваю роли участников и регистрацию на своем веб-сайте с помощью visual web developer, используя учебник по msdn. Он отлично работает локально, но когда я загрузил его на свой сервер, я получил следующую страницу:

Кто-нибудь знает, почему я вижу это и как я могу это исправить? Любая помощь очень ценится.

Я только что посмотрел на свой файл web.config, прочитав следующую строку в сообщении об ошибке: «имя соединения ‘LocalSqlServer’ не было найдено в конфигурации приложений или строка подключения пуста.». И заметили, что следующий элемент совершенно пуст:

// а этот должен быть пустым? если нет, то что же здесь должно быть? В случае ошибки это означает, что он не должен быть пустым. Кроме того, я не знаю, где мне следует разместить LocalSqlServer

После изменения DataSource на LocalHost я получаю следующую ошибку:

6 Ответов

Убедитесь, что у вас есть строка подключения с именем LocalSqlServer добавлен элемент connectionStrings вашего Web.config .

Если вы используете стандартные поставщики членства/ролей ASP.NET, по умолчанию они объявляются как это:

Это connectionStringName , который, вероятно, будет причиной этой ошибки. Если вы планируете использовать Membership/Role API , вам придется либо добавить строку подключения с именем LocalSqlServer в секцию вашего Web.config , либо изменить connectionStringAttribute так, чтобы его значение было допустимым (и существующим) именем строки подключения.

Если у вас есть .Net членских ролей провайдера, сначала просмотрите эту ссылку.

Какое-то объяснение, раз уж вы сказали, что не понимаете

Поставщик ролей сетевого членства настроен на поиск ‘LocalSQLServer’. Это означает, что мы должны предоставить сведения о соединении с именем LocalSQLServer или сказать, что оно не требуется. Что вы можете сделать, так это в файле web.config найти часть и добавить строку:

Замените DBServerName на ваш SQL серверный аддон db, DBName на имя базы данных, которое пришло с вашим аддоном, DBLogin и пароль должны быть заменены на то, что пришло с вашим SQL аддоном.

Если вы не хотите использовать LocalSQLSever, вы можете удалить его с помощью

в вашем файле web.config в разделе свойства. Затем измените имя строки подключения в поставщике ролей на имя строки подключения, которое вы будете использовать. Поэтому измените существующую строку подключения на name=’LocalSQLServer’.

LocalSqlServer-это запись строки подключения по умолчанию в machine.config. Он всегда присутствует, хотя и не в файле app/web config.

Он указывает на локальный экземпляр sqlexpress, который был установлен вместе с visual studio.

По умолчанию поставщик членства при настройке создает локальный файл .mdf в папке app_data (нажмите кнопку Показать все файлы). Эта база данных была подготовлена.

Если по какой-то причине вы хотите использовать другую базу данных, вы должны предоставить ей aspnet_regsql.exe . Вы найдете его в вашем каталоге windows/microsoft.net/framework/2.0.xxxx.

из командной строки выполните команду aspnet_regsql.exe /? чтобы получить инструкции.

Так.. возможно, именно поэтому вы получаете эти ошибки. Если вы DO хотите использовать другую базу данных и не хотите редактировать раздел членства, чтобы указать на новую базу данных, вы должны удалить localSqlServer и затем повторно добавить

OR, опять же, настройте элемент членства так, чтобы он указывал на другое соединение.

В любом случае вам нужна база данных PROVISIONED, отличная от локального экземпляра пользователя, подготовленного VS, который вы используете во время разработки, и строка подключения, указывающая на нее.

EDIT: перечитайте свой вопрос:

Проблема заключается в том, что хост не имеет sql или не позволяет использовать пользовательские экземпляры. Как правило, на размещенном сайте вы запросите базу данных и после получения учетных данных используйте aspnet_regsql.exe для подготовки этой базы данных. В этом случае вы MUST измените раздел членства в web.config, чтобы указать на вашу новую базу данных.

Возможно, вы получаете строку подключения от machine.config. Самый простой способ избавиться от них, а не использовать remove-это использовать самозакрывающийся прозрачный элемент в разделе connectionstrings.

Читать еще:  Ошибка при запуске приложения 0х0000022

Поставщик членства out of the box должен был иметь запись строки локального подключения (новые проекты получают ее по умолчанию). Вы можете создать новый проект и смахнуть его оттуда.

На сервере вам нужно будет проверить правильность установки SQL и обновить строку подключения, чтобы она соответствовала данным сервера.

Я часто видел это сообщение, когда пользователь ASPNET не имеет доступа на чтение к каталогу конфигурации для рассматриваемой платформы. Мне кажется, что у вас есть файловая директива в одном из ваших ключей, и фреймворк не имеет доступа (либо через разрешения, либо потому, что файла там нет), чтобы прочитать ее.

Похожие вопросы:

Приветствие, Я разработал веб-сайт, используя ASP.Net 3.5 и C#. он хорошо работает с Visual Stdio 2010. Я загрузил свой веб-сайт в свой домен в общей папке. Первый раз, когда я обедал на своем сайте.

я загрузил свой сайт на мой веб-хост-сервер. сайт работал хорошо на моем локальном компьютере, но на сервере он показывает мне эту ошибку : Ошибка сервера в приложении ‘/’. Ошибка Парсера.

Я работаю с веб-приложением ASP.Net и хочу создать пользователя членства, поэтому мне нужно получить доступ к инструменту веб-конфигурации для ASP.NET . я запустил IISExpress команд в командной.

Я получаю прерывистую ошибку, когда я run MVC приложение из Visual Studio. Вот в чем ошибка: Ошибка сервера в приложении’/’. Ресурс не может быть найден. Описание: HTTP 404. Ресурс, который вы ищете.

Мое приложение ASP.NET отлично работает на сервере разработки, но когда я пытаюсь развернуть его на локальном сервере IIS или на сервере бесплатного хостинг-провайдера, оно превращается в.

я разрабатываю веб-сайт в ASP .Net с Visual Studio 2010. Я еще не прикрепил какую-либо базу данных, это обычный html с большим количеством CSS и немного Visual Basic. Я арендовал пространство.

Ошибка сервера в приложении’/’. Ресурс не может быть найден. Описание: HTTP 404. Ресурс, который вы ищете (или один из его зависимости) можно было бы удалить, если бы его имя было изменено, или.

asp net ошибка сервера в приложении

22 Eyla [2011-05-05 00:43:00]

Я разработал веб-сайт с использованием ASP.Net 3.5 и С#. Он отлично работает с Visual Stdio 2010. Я загрузил свой сайт в свой домен под общей папкой.

Впервые я запустил свой сайт для тестирования (http://wecoders.com/Habib_cuizine/Gallery.aspx) Я бы восстановил (ошибка сервера в приложении «/».)

Ошибка выполнения Runtime: ошибка приложения произошла на сервер. Текущая пользовательская ошибка настройки для этого приложения предотвращают детали ошибки приложения от просмотра удаленно (для причины безопасности). Это могло бы, однако, просматривать браузеры, работающие на локальный сервер.

Подробности. Чтобы включить информацию об этом конкретное сообщение об ошибке для просмотра на удаленных машинах, пожалуйста, создайте тег в пределах Файл конфигурации «web.config» расположенный в корневом каталоге текущее веб-приложение. Эта тег должен иметь его атрибут «mode» установлен на «Off».

Примечания: Текущая страница ошибки видение может быть заменено обычным страницы ошибки, изменив Атрибут defaultRedirect для выражение тег конфигурации, чтобы указать на пользовательский URL страницы с ошибкой.

Чтобы исправить эту ошибку, я добавил в файл webConfig внутри тега:

После этого, когда я обедаю сайт, я получаю новую ошибку, как указано ниже:

Ошибка конфигурации Описание: Произошла ошибка при обработке файла конфигурации, необходимого для обслуживания этого запроса. Ознакомьтесь с конкретными данными об ошибках ниже и соответствующим образом измените свой файл конфигурации.

Сообщение об ошибке Parser: ошибка использования раздела, зарегистрированного как allowDefinition = ‘MachineToApplication’, превышает уровень приложения. Эта ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS.

Строка 35: ASP.NET для идентификации входящего пользователя.

Строка 39: раздел позволяет конфигурировать

Исходный файл:10.0.40.35wecoders.compublichabib_cuizineweb.config Строка: 37

Проконсультируйтесь с тем, как исправить эту ошибку и как настроить мой сайт, который был разработан с использованием Visual Stdio 2010 для публикации в Интернете.

При банальной попытке запуска вновь созданного проекта ASP.NET MVC возникла «Ошибка сервера в приложении ‘/’.«, представленная на скриншоте. Исправить её оказалось довольно просто, но поиск решения занял достаточно много времени.

Чтобы исправить это зайдите в Панель управления > Программы > Включение и отключение компонентов Windows и поставьте галочку напротив Службы IIS, после чего примените изменения.

Конечно не обязательно проблема именно в этом, но как один из вариантов имеет право на существование (по крайней мере у меня проблема была в этом).

Признаки

Рассмотрим следующий сценарий.

  • Службы IIS 6,0 и ASP.NET устанавливаются на рядовой сервер.
  • Для установки Active Directory используется мастер установки Active Directory (Dcpromo. exe).
  • Установка Windows SharePoint Services 2,0 на контроллере домена.
  • Вы пытаетесь войти на веб-сайт Windows SharePoint Services 2,0.
  • Вы правильно вводите имя пользователя и пароль три раза.

В этом случае может появиться сообщение об ошибке, похожее на следующее:

Note (Примечание ) При доступе к следующим сайтам в Microsoft Windows Small Business Server 2003 могут возникать похожие проблемы: доступ кhttp://servername/backup): резервному копированию (ошибка: ошибка сервера в приложении «http://companyweb):Error: /баккуп» доступ к серверу CompanyWeb (ошибка сервера в ‘/’) Аппликатионакцессинг мониторинг и создание отчетовhttp://servername/monitoring): (ошибка: ошибка сервера в ‘/мониторинг ‘ аппликатионакцессинг удаленном вебhttp://servername/remote):Error: -рабочем месте (ошибка сервера в ‘/ремоте ‘ аппликатиондуринг установки (configadminvs. aspx): доступ к пути C: Программа FilesCommon FilesMicrosoft SharedWeb Server Extensions60 emplateadmin1033app_data запрещена.

Причина

Эта проблема возникает из-за того, что группа Network Service не имеет достаточных разрешений для папки временных файлов ASP.NET при установке служб IIS 6,0 и ASP.NET перед установкой Active Directory.

Разрешение

Чтобы устранить эту проблему, выполните указанные ниже действия для используемой версии ASP.NET.

ASP.NET 1,1

Нажмите кнопку Пуск, выберите пункт Выполнить, введите cmd в поле Открыть, а затем нажмите кнопку ОК.

Перейдите в папку Drive: WindowsMicrosoft.NetFrameworkv1.1.4322. В этой папке Drive — это диск, на котором установлена система Windows. Для этого в командной строке введите следующую команду и нажмите клавишу ВВОД:

Добавьте соответствующие разрешения в группу Network Service для папки Temporary ASP.NET Files. Для этого введите следующую команду и нажмите клавишу ВВОД:

Note (Примечание ) Дополнительные сведения о различиях между параметром командной строки-IR и параметром командной строки-i приведены в разделе ASP.NET Registration Tool for IIS на веб-сайте Microsoft Developer Network (MSDN).

Введите exit и нажмите клавишу ВВОД, чтобы закрыть командную строку.

ASP.NET 2,0

Нажмите кнопку Пуск, выберите пункт Выполнить, введите cmd в поле Открыть, а затем нажмите кнопку ОК.

Ошибка сервера в приложении ‘/’.

При попытке обратиться к приложению получаю ошибку:

Читать еще:  Орфография ошибки это

В чем может быть ошибка? Если не хватает ролей/компонентов в IIS, то каких?

Инфы явно недостаточно, начнем с простого:

от какого пользователя запускается пул приложения в IIS?

версия asp.net указаная в пуле

сервер на том же компютере что и IIS стоит или на другом?

Проверьте все параметры подключения к БД адрес имя БД логин пароль

(проверьте что порты используемые для подключения открыты в файерволе)

Григорий Чех,

>от какого пользователя запускается пул приложения в IIS?
от локального пользователя с администраторскими правами

>версия asp.net указаная в пуле
v4.0.30319

>сервер на том же компютере что и IIS стоит или на другом?
MSSQL сервер стоит на другой машине, возможность подключения к нему проверял в Managment Studio

>Проверьте все параметры подключения к БД адрес имя БД логин пароль
перепроверил, логин и пароль указаны от пользователя, у которого есть админские права на MSSQL сервере

>(проверьте что порты используемые для подключения открыты в файерволе)
на всякий случай создал правила, открывающее используемые порты

Попробуйте установить/переустановить Microsoft Visual C++ 2010 SP1!

Нужно проверять что все компоненты IIS установлены и он соответствует минимальной версии (в последних вроде 7,0 или выше) А у вас какая версия ОС?

Григорий Чех,

Microsoft Visual C++ 2010 SP1 переустановил.
Компоненты все установлены, прикрепляю скриншоты с ними.
Версия ОС: Windows 7 Professional SP1

Неплохо начинать установку с изучения требований необходиміх для работы с продуктом. Посмотрите сдесь для вашей версии bpmonline

Григорий Чех,

У коллег на такой же как у меня конфигурации bpm 7.10 запускается.
Сейчас пытаюсь ставить на новую машину, возможно не хватает какой-то библиотеки/компонента, которая нужна для работы.

7,10 может и работает, Сравните список установленных компонентов IIS с теми же что и у коллег. Я так понимаю вы ставите туже версию что и у коллег.

Сравните настройки IIS с коллегами. Проверьте что не перепутали внешний и внутрений сайт в настройках IIS

Григорий Чех,

Компоненты сравнил. Ставлю ровно ту же версию, да.

Настройки IIS’a ставил такие же, как в инструкции.

Корнилов Артем,

Попробуйте взять у коллег ConnectionStrings.config и настройте подключение для своей БД и редиса, такая ошибка доволе часто возникала при использовании этого файла из дистрибутива

Литвинко Павел,

В самом начале работы над проблемы попробовал взять этот файл у коллег: не помогло. Сейчас стоит он же

Корнилов Артем,

Не вижу у вас некоторых компонентов, отключите net fraemwork 3.5, поставьте 4.5 — 4.7

Литвинко Павел,

3.5 попробовал отключить, 4.5-4.7 в Windows 7 не отображается, так же у коллег.

Корнилов Артем,

Обратитесь в службу поддержки, сотрудники службы поддержки подключатся к Вам удаленно и помогут оперативно решить проблему.

В техподдержке помогли решить.
Проблема была в битых бинарниках, из которых развертывался сайт.

Обработка ошибок HTTP

В дополнение к универсальной странице ошибки (которую мы рассмотрели в предыдущей статье) можно сконфигурировать страницы ошибок, которые будут применяться для специфичных кодов состояния HTTP, таких как 404 (возвращается, когда не удается найти целевой URL). В этой статье мы не собираемся вдаваться в подробности кодов состояния HTTP. Полный их список доступен по адресу Список кодов состояния HTTP.

Ответственность за выдачу страниц ошибок делится между ASP.NET и IIS на основе вида запрашиваемого URL. Таким образом, например, если пользователь запрашивает файл веб-формы aspx, такой как «/DoesNotExist.aspx», отвечать за генерацию ошибок будет среда ASP.NET, т.к. сервер IIS передает все запросы к веб-формам в ASP.NET Framework.

Если пользователь запрашивает URL, который не обслуживается ASP.NET, наподобие «/DoesNotExit.html», генерировать страницу ошибки будет сервер IIS. Обычно мы стремимся обращаться с ошибками в согласованной манере, так что это разделение ответственности просто означает необходимость применения желаемой политики в двух местах внутри файла Web.config. Мы хотим подчеркнуть отличающиеся ответственности, поэтому создадим отдельные страницы ошибок, которые позволят понять, когда ошибка поступает из IIS, а когда из ASP.NET.

Работа с кодами состояния HTTP, поступающими из ASP.NET

Сначала мы рассмотрим поддержку кодов состояния HTTP в ASP.NET. Для этого мы создали новый файл по имени NotFoundASP.html с содержимым, приведенным в примере ниже:

Этот файл содержит сообщение, отображаемое пользователю, и ссылку на корневой URL приложения. В данном примере мы перенаправляем пользователя на статический URL, ассоциированный с приложением. Файл NotFoundASP.html регистрируется в качестве обработчика для ошибок 404 внутри Web.config, как показано в примере ниже:

В элементе error, помещенном внутрь добавленного ранее элемента customErrors определены атрибуты, которые кратко описаны в таблице ниже:

Код состояния HTTP, к которому относится определение

Указатель URL, который будет использоваться, когда возникает ошибка, представленная атрибутом statusCode

Можно определять несколько элементов error, по одному для каждого кода состояния, который необходимо поддерживать. В примере ниже было указано, что файл NotFoundASP.html будет использоваться в ситуации, когда клиенту должен быть возвращен код состояния 404.

Обратите внимание на формулировку: код состояния должен быть возвращен клиенту. Определяя специальные обработчики ошибок, мы предотвращаем отправку в браузер кодов состояния HTTP. Взамен браузер получает перенаправление на страницу ошибки, которое возвращает код 200, указывающий на успешность запроса.

Это делается потому, что в случае возврата из сервера кода состояния вроде 404 многие браузеры будут отображать собственные сообщения об ошибках, не позволяя видеть специальное сообщение. Единственный недостаток такого подхода связан с тем, что клиенту совершенно не известно о том, что запрос привел к возникновению ошибки, поскольку он видит только успешные запросы, а это может оказаться проблемой, когда клиентом не является браузер, делающий запросы к обычному HTML-контенту.

Чтобы увидеть специальную страницу ошибки, необходимо запросить URL для файла с расширением, которое обслуживается ASP.NET, таким как aspx или ashx. На рисунке ниже показано сообщение об ошибке, полученное за счет запрашивания URL вида «/DoesNotExist.aspx»:

Отметим, что URL страницы с ошибкой содержит описанный в предыдущей статье параметр aspxerrorpath строки запроса.

Работа с кодами состояния HTTP, поступающими из IIS

Среда ASP.NET генерирует страницы ошибок для запросов, которые относятся к обслуживаемым ею типам файлов, а сервер IIS заботится обо всех остальных. Чтобы продемонстрировать это, мы добавили в проект примера новый файл по имени NotFoundIIS.html с применением шаблона элемента HTML Page. Содержимое этого файла представлено в примере ниже:

В сущности это тот же самый контент, который использовался в примере с ASP.NET, но с текстом, скорректированным для отражения того, что страница ошибки сгенерирована сервером IIS. Специальные страницы ошибок IIS тоже регистрируются в файле Web.config, однако в другом разделе, как показано в примере ниже:

Читать еще:  Ошибка 39 iphone

Специальная страница ошибки устанавливается с помощью элемента httpErrors, который находится в разделе system.webServer файла Web.config. В элементе httpErrors определены атрибуты, описанные в таблице ниже:

Указывает путь к универсальной странице ошибки, но вы не сможете установить этот атрибут до тех пор, пока явно не разблокируете этот раздел конфигурации с помощью диспетчера IIS. Как следствие, вы не должны полагаться на этот атрибут

Указывает, как контент страницы ошибки возвращается браузеру. Значение Redirect приводит к отправке HTTP-перенаправления на страницу ошибки, значение ExecuteUPL предусматривает генерацию динамического ответа (такого как получаемый из веб-формы), а значение File обеспечивает загрузку страницы ошибки из файла. (Значение File применяется, если нужно использовать файл, не являющийся частью проекта.)

Указывает, каким образом генерируются страницы ошибок. Значение Custom приводит к генерации страниц ошибок с применением значения defaultPath (если вы можете разблокировать его) или отдельных страниц, определенных элементами error (которые рассматриваются ниже).

Значение Detailed предусматривает генерацию сообщения об ошибке, которое включает подробные сведения для разработчиков, а значение DetailedLocalOnly обеспечивает генерацию специального сообщения об ошибке для удаленных запросов и детальное сообщение для локальных запросов

Указывает, каким образом IIS поступает с ошибками, генерируемыми средой ASP.NET Framework, но только в случае отключения специальных ошибок ASP.NET. Значение PassThrough приводит к передаче ошибок ASP.NET, значение Replace предусматривает генерацию в ответ ошибки IIS для замены ошибки ASP.NET, а значение Auto обеспечивает динамическое определение поведения на основе ответа ASP.NET

В примере выше для атрибута errorMode было определено значение, включающее специальные ошибки IIS. Установить универсальную страницу ошибки, как это делалось для ошибок ASP.NET, невозможно, потому что атрибут defaultPath заблокирован.

Страницы ошибок для отдельных кодов состояния задаются с помощью элемента error, в котором определены атрибуты, перечисленные в таблице ниже:

Указывает URL или файл, который будет использоваться для генерации страницы ошибки

Указывает способ генерации ошибки. Этот атрибут использует те же самые значения (и переопределяет их), что и атрибут defaultResponseMode элемента httpErrors

Указывает код состояния HTTP, к которому относится элемент

Используя код подсостояния, чтобы можно было дополнительно конкретизировать причину ошибки. Эти коды не являются частью HTTP, и в своих проектах мы их не применяем

В примере выше был определен элемент error для кода состояния 404, который осуществляет перенаправление браузера на /NotFoundIIS.html. Обратите внимание, что непосредственно перед элементом error находится элемент remove:

Набор элементов error поддерживается в виде коллекции, и внутри сервера IIS определен стандартный набор как часть его конфигурации. Если определить элемент error без предварительного использования remove для удаления стандартного определения, то возникнет ошибка. В элементе remove имеется атрибут statusCode, который позволяет указать, какой стандартный элемент error должен быть удален.

Чтобы увидеть специальную страницу ошибки, поступающую из IIS, необходимо запросить URL файла, имеющего расширение, которое не обслуживается ASP.NET, такое как html. На рисунке ниже показано сообщение об ошибке, полученное в результате запроса URL вида /DoesNotExist.html:

В URL, по которому перенаправляется браузер, отсутствует информация из первоначального запроса, поэтому для настройки динамического контента страницы ошибки придется предпринять другой подход. В следующем разделе описано, как это делается.

Создание разделяемой динамической страницы ошибки

Итак, мы показали две разных статических HTML-страницы ошибок, которые позволяют различать ошибки, поступающие из APS.NET, и ошибки, поступающие из IIS. В реальных проектах это требуется редко, и для обоих разделов файла Web.config можно применять один и тот же URL.

Создание разделяемого динамического ответа требует несколько большей работы. Мы добавили в проект новую веб-форму по имени NotFoundShared.aspx, которая будет использоваться для демонстрации подхода. Содержимое этого файла приведено ниже:

Эта веб-форма содержит элементы , предназначенные для информирования об источнике ошибки 404 и запрошенном URL. В примере ниже устанавливается контент этих элементов в файле NotFoundShared.aspx.cs:

Этот прием полагается на то, что ошибки, генерируемые ASP.NET, имеют параметр aspxerrorpath строки запроса. То есть если этот параметр присутствует, мы предполагаем, что имеем дело с ошибкой ASP.NET, и с помощью значения параметра получаем URL, который был запрошен пользователем. Если же параметра в строке запроса нет, мы предполагаем, что имеем дело с ошибкой, поступившей из IIS, и получаем запрошенный URL из свойства HttpRequest.RawURL, доступ к которому возможен через свойство Request.

В сообщениях об ошибках мы очень конкретно описываем источник возникшей проблемы — такой уровень детализации пользователям не нужен. В реальном проекте внимание должно быть сосредоточено на действии, которое пользователь может предпринять, чтобы обойти проблему — например, ввести правильный пароль, начать с начала или возвратиться на страницу позже.

Чтобы появилась возможность работы со свойством RawURL, необходимо модифицировать способ генерации страниц ошибок сервером IIS, как показано в примере ниже, в котором представлены изменения, внесенные в файл Web.config для установки веб-формы разделяемой страницы ошибки:

Мы обновили URL в обоих разделах файла, чтобы использовалась веб-форма NotFoundShared.aspx. Кроме того, мы изменили значение атрибута responseMode в конфигурации IIS для применения режима ExecuteURL. Это позволяет визуализировать веб-форму без перенаправления клиента и означает, что детали запроса, вызвавшего ошибку, доступны через объект HttpRequest, в том числе и свойство RawURL. Результат запрашивания /DoesNotExist.aspx и /DoesNotExist.html можно видеть на рисунке ниже:

В этом примере отображаются сведения о том, где возникла ошибка, но пользователю такие детали предоставляться не должны. Важный аспект данного подхода заключается в том, что место возникновения ошибки известно вам. Используя эту информацию, можно создать веб-форму, которая будет применяться для генерации страниц ошибок из ASP.NET и IIS.

Указание страницы ошибки, специфичной для веб-формы

Последний способ настройки стандартного поведения предусматривает указание страницы ошибки для отдельных веб-форм с помощью атрибута ErrorPage в директиве Page. Мы нечасто используем этот прием в своих проектах, но он может быть удобен в ситуации, когда имеется небольшое количество веб-форм, требующих особого внимания, например, веб-форма аутентификации.

Несмотря на это, при создании страниц ошибок мы обычно полагаемся на коды состояния HTTP. В примере ниже демонстрируется применение атрибута ErrorPage в веб-форме Default.aspx:

В этом примере мы указали, что при появлении любых необработанных исключений из веб-формы Default.aspx должен отображаться файл DefaultASPXError.html. Теперь добавим в проект файл DefaultASPXError.html с использованием шаблона элемента HTML Page. Содержимое этого файла аналогично приведенным ранее страницам ошибок.

Чтобы этот прием работал, атрибут mode элемента customErrors должен быть установлен в On. Если этого не сделать, будет применяться стандартная страница ошибки для кода состояния http, равного 500.

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×