Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Контекст выполнения / 6 сообщений из 6, страница 1 из 1
07.07.2003, 18:43
    #32201317
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контекст выполнения
Подскажите пожалуйста, как решается такая задача.

Есть 3-х уровневое ASP.NET приложение, windows-авторизация не используется.
После логина я запоминаю ID пользователя в сесии. Далее где-то я выполняю вызов метода какого-то объекта и хочу в этом методе получить этот ID. Но у меня нет св-ва Session (т.е. это обычный класс, не наследуемый от всяких там System.Web.UI.Page)
Так вот вопрос - как вообще можно передавать какой-то контекст выполнения?

Я делаю ЭТО через потоки:
На событие Application_BeginRequest делаю:
Thread.SetData(Thread.GetNamedDataSlot("PersonalizedContext"), <ID пользователя>);
И далее при вызове в этом методе получаю этот ID:
<ID пользователя> = Thread.GetData(Thread.GetNamedDataSlot("PersonalizedContext"));

Но я подозреваю, что:
1. В процессе обработки страницы текущий поток может изменится.
2. Есть какие-то более общепринятые подходы к передаче контекста или передачи текущего пользователя.

Помогите, пожалуйста, наверняка кто-то решал все эти проблемы, что вообще мне делать???

Заранее спасибо.
...
Рейтинг: 0 / 0
07.07.2003, 20:23
    #32201359
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контекст выполнения
Работает System.Web.HttpContext.Current.Session("SomeKey"). Не будет это работать в конструкторе самой страницы или ее базового класса, а если объект инстанцируется после, должно, и в конструкторе этого объекта тоже будет работать.
Еще помогает имплементация интерфейса IRequiresSessionState если это хандлер или модуль. Он ничего не просит, но без него работать не будет.
...
Рейтинг: 0 / 0
08.07.2003, 14:35
    #32202056
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контекст выполнения
2greenapple

Спасибо за ответ.

Вот в gotdotnet-е тоже подсказали такое решение.

Вот дискуссия по этому поводу:
http://www.gotdotnet.ru/default.aspx?tmpl=board_thread&m_no=18615&d_no=44

В принципе решение простое и удобное.
Меня только мучают сомнения по поводу производительности...
...
Рейтинг: 0 / 0
08.07.2003, 15:54
    #32202215
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контекст выполнения
Думаю, что такие операции естественны как вдох и выдох даже для очень большого ASP.NET проекта.
...
Рейтинг: 0 / 0
09.07.2003, 03:27
    #32202605
SashaCrane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контекст выполнения
Подскажите пожалуйста, как решается такая задача.
это обычный класс, не наследуемый от всяких там System.Web.UI.Page
Так вот вопрос - как вообще можно передавать какой-то контекст выполнения?


Могу предложить еще один вариант:
в конструктор того самого обычного класса передаешь переменную типа System.Web.UI.Page, либо HttpSessionState.
Т.е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class MyPage: System.Web.UI.UserControls{ 
...Page_Load(...){ 
MySimpleClass myClass = new MySimpleClass(Page); 
} 
} 

class MySimpleClass{ 
private HTTPSessionState FSession; 
public MySimpleClass(HTTPSessionState ASession){ 
FSession=ASession; 
} 
... 
} 

В следующем я не уверен, если не прав - народ поправит:
При желании эти переменные можно передавать не по значению а по ссылке (ref), быстрее будет и памяти меньше сожрет.
...
Рейтинг: 0 / 0
09.07.2003, 12:37
    #32203048
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контекст выполнения
2SashaCrane
Ну это само-собой, можно всё в параметрах передавать.
Идея была в том, что некоторые общие вещи хорошо-бы иметь в контексте и не думать постоянно о передаче через параметры.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Контекст выполнения / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]