Жизненный цикл приложения ASP .NET + время жизни экземпляра Singleton - PullRequest
2 голосов
/ 11 января 2012

Обратите внимание на следующий сценарий:

  1. Я создал полнофункциональное веб-приложение с использованием платформы ASP .NET MVC 3.Теперь моим приложением управляет веб-сервер.
  2. На стороне сервера моего приложения получен HTTP-запрос.
  3. Класс, реализующий шаблон проектирования Singleton, создается на стороне сервера.
  4. Ответ отправляется в браузер.
  5. На стороне сервера моего приложения получен еще один HTTP-запрос.Доступен ли одноэлементный экземпляр, используемый на шаге 2, на стороне сервера?

На этой странице приведена информация о жизненном цикле приложения ASP .NET: http://msdn.microsoft.com/en-us/library/ms178473.aspx

Но я все еще не могу ответить на мой вопрос.

Заранее благодарен за вашу помощь в будущем


Я только что провел несколько тестов под VS2010.

Здесьсписок основных компонентов моего проекта:

  • Контроллер Home, содержащий метод действия Index HttpGet.
  • Представление, полученное из метода действия Index.
  • Класс SingletonTest, который реализует шаблон проектирования Singleton.

Вот код класса SingletonTest:

public class SingletonTest
{
    private int counter;
    private static SingletonTest instance = null;

    public int Counter
    {
        get
        {
            return counter;
        }
    }

    public static SingletonTest Instance 
    {
        get 
        {
            if (instance == null)
                instance = new SingletonTest();

            return instance;
        }
    }

    private SingletonTest() 
    {
        counter = 0;
    }

    public void IncrementCounter()
    {
        counter++;
    }
}

Вот код метода действия Index:

public ActionResult Index()
{
    SingletonTest st = SingletonTest.Instance;
    st.IncrementCounter();

    return View();
}

Вот код вида:

@SingletonTest.Instance.Counter

Вот сценарий тестирования, который я соблюдал:

  1. Сервер IIS был автоматически запущен VS2010.
  2. Я запросилe / Home / Index / URL, после чего отображается значение 1.
  3. Я запросил / Home / Index / URL, после чего отображается значение 2.
  4. ...

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

Затем я остановил сервер IIS и снова повторил свой тестовый сценарий.Я получил те же результаты, что и раньше: 1, 2, ....

Ответы [ 2 ]

0 голосов
/ 05 февраля 2013

А как насчет нескольких экземпляров одного и того же приложения, которое IIS создаст для обработки одновременных запросов?

Я думаю, что объект singleton не будет одинаковым, если IIS создаст несколько экземпляров одного и того же приложения в ситуации высокого трафика

0 голосов
/ 11 января 2012

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

Вы уверены , что вам нужен одноэлементный экземпляр?

Если вы хотите сохранить какое-либо состояние во всех запросах, было бы лучше использовать внешнее хранилище, такое как база данных.

...