Как определить логику обработки ошибок на уровне сервера - PullRequest
1 голос
/ 20 марта 2012

Для веб-сайта / vpath возможно обработать событие Application_Error, чтобы перехватить ошибки, прежде чем они будут отправлены обратно в браузер.Можно ли это как-то сделать на уровне сервера?То есть определите метод на корневом уровне, который будет выполняться в случае возникновения ошибки на веб-сайте, но этот веб-сайт не может обработать ошибку по любой причине.

Я знаю, что вы можете использовать web.config накорневой уровень для определения пользовательских сообщений об ошибках для кода состояния HTTP.Тем не менее, это не идеально для моего случая, потому что я хочу вернуть различные типы контента (например, HTML или что-то еще) в зависимости от логики приложения.

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Пользовательский http-модуль можно зарегистрировать на applicationHost.config. Затем этот модуль используется всеми приложениями IIS на целевой машине.

1) Создайте подписанный проект библиотеки классов с модулем http:

public class ErrorHandlingModule : IHttpModule
{
    public void Dispose() { }

    public void Init(HttpApplication context)
    {
        context.Error += new EventHandler(context_Error);
    }

    void context_Error(object sender, EventArgs e)
    {
        // handle error
    }
}

2) Установите библиотеку классов в GAC, чтобы она могла использоваться всеми приложениями IIS.

3) Установите модуль http в файл applicationHost.config. Этот файл обычно находится в C: \ Windows \ System32 \ inetsrv \ config. К файлам в этой папке могут обращаться только 64-разрядные процессы (такой проблемы нет в 32-разрядных ОС), VS2010 не может их видеть, но Explorer может. Фрагмент applicationHost.config может выглядеть так:

<location path="" overrideMode="Allow">
    <system.webServer>
        <modules>
            <add name="MyModule" preCondition="managedHandler" type="GlobalErrorHandler.ErrorHandlingModule, GlobalErrorHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bfd166351ed997df" />
0 голосов
/ 20 марта 2012

Мне не ясно, каков твой вопрос, но согласно моему пониманию.внутри application_error, который вы можете использовать,

Server.GetLastError() to get last error occured in server level.
...