Постоянство метода статического класса в пуле приложений ASP.NET и IIS - PullRequest
0 голосов
/ 11 ноября 2010

Будет ли этот метод статического класса вызываться только один раз при запуске приложения IIS при использовании в контексте веб-приложения ASP.NET?

public static class Licensing
{
    public static bool IsThisLicensed(ThisFeature)
    {
       return Licenser.FeatureEnabled(ThisFeature);
    }
}

У нас есть случай, когда вызов, подобный этому, возвращает True (как и должно быть) в течение некоторого периода времени, а затем впоследствии возвращает false, пока IIS не будет перезапущен. При перезапуске IIS значение снова возвращает True. Тем не менее, время такого поведения не предсказуемо.

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

Я думаю, что это похоже на предыдущий пост : но в этом случае мы работаем с вызовом метода, а не свойства.

1 Ответ

2 голосов
/ 11 ноября 2010

Пример, который вы опубликовали, является методом (а не свойством), и, если что-то не происходит в Licenser.FeatureEnabled(ThisFeature), вы ничего не устанавливаете.Данные только возвращаются.

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


изменить, чтобы ответить на комментарий :

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

Если при первом запуске IIS возвращается значение true и через некоторое время он начинает возвращать false, то в вашей логике должна быть ошибка.Возможно, вы теряете государство?Возможно, вы полагаетесь на то, что что-то доступно, и когда пул приложений перезагружает это значение теряется?Что происходит в Licenser.FeatureEnabled(ThisFeature)?Может быть, если мы увидим, что можем помочь выявить проблему.

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

...