powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Доступ к объекту Session?
19 сообщений из 19, страница 1 из 1
Доступ к объекту Session?
    #33923924
Oxyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я в файле Global.asax в функции Session_Start определяю обработчик события, то в обработчике события я не могу обновить данные в объекте Session!

В чём тут дело?
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33924663
Oxyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дополняю вопрос:
У меня есть внешний класс, описанный в dll-не, у которго есть свои события, я хочу при создании новой сессии создавался новый объект этого класса и при событии этого объект в переменные ссесии запихивались какие-нибудь данные.

В файле global.asax делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
void Session_Start(object sender, EventArgs e) 
{
....
// Задаём обработчик события изменеие состояния соединения
_PhoneClient.OnConnectionStateChange += new myConnStateHandler(OnConnectionStateChange);
....
}

// Обработка события "Изменение состояния соединения"
private void OnConnectionStateChange(......)
{
   switch (e.NewState)
   {
       case Nortel.CCT.ConnectionState.Alerting:
         Session["StateText"] = "вызов...";
         break;
   }
}
При этом происходит ошибка времени выполнения: "Session state is not available in this context" и указывается на строчку Session["StateText"] = "вызов...";!

Как быть в этой ситуации? Может можно передавать объект Session во внешний объект и прямо там записывать в переменные сессии необходимые данные?

Внешний объект я править могу....
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33924719
Sergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема может быть во внешнем классе и к Session надо обрасщаться через:
HttpContext.Current.Session
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33924824
Oxyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergioПроблема может быть во внешнем классе и к Session надо обрасщаться через:
HttpContext.Current.Session

HttpContext.Current.Session - не помогает;
во внешнем классе нет проблем, так как я его сам лично писал и использовал в других приложениях...событие нормально вызывается, а в обработчике события при попытке обновить данные в переменных ссесии выдаётся ошибка!
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33924902
Sergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А какую ошибку выдает на HttpContext.Current.Session?
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33924944
Oxyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergioА какую ошибку выдает на HttpContext.Current.Session?
Object reference not set to an instance of an object.
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33924969
Sergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну это уже ближе, так сказать теплее.
А как насчет cookies на клиенте (enable/disable)?
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925040
Sergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное предыдущий пост - ботва, и куки тут не причем.
Создается впечатление, что в момент:
Session["StateText"] = "вызов...";
Session как обьект еще не существует. Я сам работаю с Session в Session_Start и все нормально. Может переписать: private void OnConnectionStateChange(......)
на private string OnConnectionStateChange(......)
{
switch (e.NewState)
{
case Nortel.CCT.ConnectionState.Alerting:
return "вызов...";
}
}
... а в Session_Start исоолнять:
Session["...."] = OnConnectionStateChange(.....),
... так, мысли вслух.
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925240
Oxyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Session_Start(...) - это же тоже событие, оно выполнилось и всё...
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925320
Sergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дык? Выполнилось али нет? Ты свое событие где запускаешь?
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925363
Oxyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Могу ли я просто передать при инициализации в объект ссылку на Session или HttpContext?
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925469
Sergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А собственно чем HttpContext хуже других классов, можно и попробовать.
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925533
Oxyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergioДык? Выполнилось али нет? Ты свое событие где запускаешь?

Во-первых мне совсем не годиться возращение только одной строки, конечно это не то чтобы очень проблема, но всё же не красиво, а во-вторых это просто не работает...

Ещё раз всё происходит в файле GLOBAL.ASAX:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
    void Session_Start(object sender, EventArgs e) 
    {
        NCCTToolkit _PhoneClient = null;
        
        string      StatusText = "";
        string      StateText = "";
        string      CLIDText = "";
//        int Loads =  0 ;
//        int Inits =  0 ;

 //       int UnLoads =  0 ;
 //       int Disposed =  0 ;

        Session.Add("StatusText", StatusText);
        Session.Add("StateText", StateText);
        Session.Add("CLIDText", CLIDText);

//       Session.Add("Inits", Inits);
//      Session.Add("Loads", Loads);
//
//      Session.Add("UnLoads", UnLoads);
//      Session.Add("Disposed", Disposed);
       
        // Code that runs when a new session is started
        string Server = ConfigurationManager.AppSettings["NCCTServerAddress"];
        string Port = ConfigurationManager.AppSettings["NCCTServerPort"];

        try
        {
            // Инициализация объекта для работы с телефонией
            _PhoneClient = new NCCTToolkit(Server, Convert.ToInt32(Port), Environment.MachineName);

            _PhoneClient.Connect();

            _PhoneClient.selTerminal.Terminal = _PhoneClient.Terminals[ 0 ];
            _PhoneClient.selAddress.Address = _PhoneClient.Terminals[ 0 ].RelatedAddresses[ 0 ];

            // Задаём обработчик события изменеие состояния соединения
            _PhoneClient.OnConnectionStateChange += new NCCTToolkit.myConnStateHandler(OnConnectionStateChange);
        }
        catch //(Exception ex)
        {
            if (_PhoneClient != null)
            {
                if (_PhoneClient.IsConnected)
                    _PhoneClient.Disconnect();

                _PhoneClient.Dispose();

                _PhoneClient = null;
            }
            
            Session.Abandon();
        }

        Session.Add("PhoneClient", _PhoneClient);
    }
    
    private void OnSessionDisconnected()
    {
    }

    // Обработка события "Изменение состояния соединения"
    private string OnConnectionStateChange(Nortel.CCT.ConnectionStateEventArgs e)
    {
        string CLID = "";

        switch (e.NewState)
        {
            case Nortel.CCT.ConnectionState.Alerting:
                HttpContext.Current.Session["StateText"] = "вызов...";

                try
                {
                    if (e.Contact != null)
                    {
                        // Определяем номер звонящего (АОН)
                        if (e.Contact.CallingAddress != null)
                            CLID = e.Contact.CallingAddress.Name;
                        else
                            CLID = "";
                    }
                    else
                    {
                        CLID = "";
                    }
                }
                catch
                {
                    CLID = "";
                }

                HttpContext.Current.Session["CLIDText"] = CLID;
                break;

            case Nortel.CCT.ConnectionState.Established:
                HttpContext.Current.Session["StateText"] = "уcтановлено";
                break;

            case Nortel.CCT.ConnectionState.Disconnected:
                HttpContext.Current.Session["StateText"] = "завершено";
                HttpContext.Current.Session["CLIDText"] = "";
                break;
        }
    }
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925606
Oxyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergio... а в Session_Start исоолнять:
Session["...."] = OnConnectionStateChange(.....),
... так, мысли вслух.

Так можно обработчик события как функцию запустить...но наверно для этого совсем не требуеубтся события!
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925746
Sergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergio... а в Session_Start исоолнять:
Session["...."] = OnConnectionStateChange(.....),
... так, мысли вслух.

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

Событие требуется если нет уверености запускать функцию или нет, и вообще какую функцию запускать. Тогда ставим событие, а потом смотрим привязывать к нему чего-нивудь или нет. Я так понимаю. Лично сам пользуюсь событиями, когда из UserControla надо запустить функцию которая сидит в Page или другом UC и между собой они не связаны (имея ввиду ASP.NET). Кстати:
_PhoneClient.OnConnectionStateChange += new NCCTToolkit.myConnStateHandler(OnConnectionStateChange);
это мне не очень понятно.
OnConnectionStateChange - должен быть eventhandler, тогда где метод, который на него записывается, т.к. в скобках тоже самое - new NCCTToolkit.myConnStateHandler(OnConnectionStateChange);
и главное где оно вызывается, ведь строка это только регистрация, а не вызов события.
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925761
Oxyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergioА собственно чем HttpContext хуже других классов, можно и попробовать.

Тотже результат, может я чего-то не правильно передаю, но результат тотже, ошибка времени выполнения:
Object reference not set to an instance of an object.
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925846
Oxyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergio

Кстати:
_PhoneClient.OnConnectionStateChange += new NCCTToolkit.myConnStateHandler(OnConnectionStateChange);
это мне не очень понятно.
OnConnectionStateChange - должен быть eventhandler, тогда где метод, который на него записывается, т.к. в скобках тоже самое - new NCCTToolkit.myConnStateHandler(OnConnectionStateChange);
и главное где оно вызывается, ведь строка это только регистрация, а не вызов события.

Событие вызывает при приходе звонка(наверно уже понятно что речь идёт о софтовом телефоне) в объект который создаётся при старте Session, а именно _PhoneClient типа NCCTToolkit, который описан в подключенной к проекту dll, а OnConnectionStateChange - это метод который будет выполняться при срабатывании события, и более того всё работает если ничего в переменные сессии не записывать в обработчике события или этот образотчик запихнуть в Page , но это не очень приколько потому что события телефонии должны выполняться на сервере.
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925883
Oxyman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вот тут подумал на кой мне нужно хранить эти две несчастные строки в Session, я могу в сессии просто хранить весь объект _PhoneClient и любое количество переменных в нём...короче я попробовал и всё получилось!

З.Ы. Сегодня просто не день Бекхема!!!
...
Рейтинг: 0 / 0
Доступ к объекту Session?
    #33925923
Sergio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну слава б-гу, а то мне уже и домой скоро и просто слинять как-то несерьезно раз уж решил поддержать хотя бы и морально. День можно сказать прошел не зря.
Ты ето пиши если че
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Доступ к объекту Session?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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