2009-03-30 3 views
1

Основой этого вопроса является то, что мне нужно использовать некоторые данные сеанса пользователя в (статическом) WebMethod. Я создал статическое свойство, которое ссылается на данные мне нужно вот так:Статические данные на странице ASP.NET - threadsafe?

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

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

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

ответ

3

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

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

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

+0

блестящий, спасибо john. оговорки понятны. – MalcomTucker

0

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