ASP.NET Application Lifecycle - как проверить наличие свойств конфигурации? - PullRequest
1 голос
/ 22 февраля 2011

Я написал одноэлементный класс, который предоставляет свойства web.config в хорошем виде.

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

Я попытался поместить код Load () в Application_Start файла global.asax, но потом вспомнил, что он будет запущен только один раз или до перезапуска приложения.

Где лучше всего разместить код, необходимый для запуска «каждый раз», когда ваш сайт запускается / запускается пользователем? Я хочу, чтобы веб-сайт перестал работать, если не удалось загрузить определенные свойства конфигурации.

Спасибо.

1 Ответ

3 голосов
/ 22 февраля 2011

При изменении файла web.config пул приложений перерабатывается .Это означает, что при следующем обращении будет вызван ваш метод Application_Start.

Изменение следующих файлов также приведет к немедленному перезапуску пула приложений:

- web.config
- machine.config
- global.asax
- Anything in the bin directory or it's sub-directories

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

static bool configValid = false;
void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext context = base.Context;
    HttpResponse response = context.Response;
    HttpRequest request = context.Request;

    // Redirect users to an alternate page if the current config is invalid
    // I happen to pass the Url they were attempting to access in the query string
    // that way you can give them a "try again" link
    if ((!configValid) && (!request.Url.ToString().Contains("BadConfig.aspx")))
    {
        response.Redirect("BadConfig.aspx?originalUrl=" + context.Server.UrlEncode(request.Url.ToString()));
    }
}

void Application_Start(object sender, EventArgs e) 
{
    // Load config and determine if it's valid, thus setting configValid to true/false
    //
    //
    configValid = false;

}
...