Статические данные на странице ASP.NET - потокобезопасны? - PullRequest
1 голос
/ 30 марта 2009

Предпосылкой для этого вопроса является то, что мне нужно использовать некоторые данные сеанса пользователя в (статическом) WebMethod. Я создал статическое свойство, которое ссылается на нужные мне данные, вот так:

private static UserWebSession UserWebSession
{
    get
    {
        return (UserWebSession)HttpContext.Current.Session["UserWebSession"];
    }
}

Затем я могу вызвать это в статическом WebMethod моей страницы.

Мой вопрос: безопасна ли эта техника? Или значение этого свойства будет обновляться при каждом новом запросе страницы - другими словами, оно будет возвращать UserWebSession для пользователя, который последний раз запрашивал страницу?

Ответы [ 2 ]

3 голосов
/ 30 марта 2009

Отлично - HttpContext.Current разработан именно для такого рода вещей. Вы не получите сеанс предыдущего пользователя.

Хотя это зависит от потока (я верю) - поэтому, если вы запустите дополнительные фоновые потоки, они не смогут увидеть текущий контекст.

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

0 голосов
/ 30 марта 2009

Я не знаю, что метод страницы может получить доступ к состоянию сеанса. Если это возможно, то вы можете быть в порядке. Напомню, что доступ к состоянию сеанса сериализован, так что за один сеанс может поступать только один запрос за раз.

...