У меня есть устаревшее приложение WCF для поддержки. Существует синглтон, который инициализируется в Application_Start
и позже используется в нескольких местах. Например, в Application_BeginRequest
.
Упрощенная версия выглядит следующим образом:
protected void Application_Start(object sender, EventArgs e)
{
ConfigurationValuesProvider.Current = new LegacyWebConfigBasedConfigurationValuesProvider();
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
...
var setting = ConfigurationValuesProvider.Current.Get("SettingKey");
...
}
Проблема возникла в одной из производственных сред. После перезапуска первого пула приложений следующий вызов к любой конечной точке завершится неудачей, за исключением того, что ConfigurationValuesProvider.Current
не установлено. Я абсолютно уверен, что в коде нет места, где эта переменная stati c переназначается. Я знаю, что при утилизации пула, когда старый домен приложения выгружается, переменные stati c теряют свое значение. Но как звонить на Application_BeginRequest
можно раньше, чем Application_Start
Я не могу себе представить. Невозможно воспроизвести проблему в других средах.
Хотите знать, что может вызвать такое странное поведение?
ОБНОВЛЕНИЕ : проблема возникает, когда первая конечная точка, вызывается после того, как recycle является конечной точкой net .tcp. Должны ли Application_Start
и Application_BeginRequest
выполняться, когда мы совершаем вызов к конечной точке, отличной от HTTP?