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

В чём тут дело?
...
Рейтинг: 0 / 0
17.08.2006, 13:32
    #33924663
Oxyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
Дополняю вопрос:
У меня есть внешний класс, описанный в 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
17.08.2006, 13:42
    #33924719
Sergio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
Проблема может быть во внешнем классе и к Session надо обрасщаться через:
HttpContext.Current.Session
...
Рейтинг: 0 / 0
17.08.2006, 14:01
    #33924824
Oxyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
SergioПроблема может быть во внешнем классе и к Session надо обрасщаться через:
HttpContext.Current.Session

HttpContext.Current.Session - не помогает;
во внешнем классе нет проблем, так как я его сам лично писал и использовал в других приложениях...событие нормально вызывается, а в обработчике события при попытке обновить данные в переменных ссесии выдаётся ошибка!
...
Рейтинг: 0 / 0
17.08.2006, 14:19
    #33924902
Sergio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
А какую ошибку выдает на HttpContext.Current.Session?
...
Рейтинг: 0 / 0
17.08.2006, 14:27
    #33924944
Oxyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
SergioА какую ошибку выдает на HttpContext.Current.Session?
Object reference not set to an instance of an object.
...
Рейтинг: 0 / 0
17.08.2006, 14:33
    #33924969
Sergio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
Ну это уже ближе, так сказать теплее.
А как насчет cookies на клиенте (enable/disable)?
...
Рейтинг: 0 / 0
17.08.2006, 14:56
    #33925040
Sergio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
Наверное предыдущий пост - ботва, и куки тут не причем.
Создается впечатление, что в момент:
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
17.08.2006, 15:42
    #33925240
Oxyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
Session_Start(...) - это же тоже событие, оно выполнилось и всё...
...
Рейтинг: 0 / 0
17.08.2006, 16:01
    #33925320
Sergio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
Дык? Выполнилось али нет? Ты свое событие где запускаешь?
...
Рейтинг: 0 / 0
17.08.2006, 16:07
    #33925363
Oxyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
Могу ли я просто передать при инициализации в объект ссылку на Session или HttpContext?
...
Рейтинг: 0 / 0
17.08.2006, 16:23
    #33925469
Sergio
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
А собственно чем HttpContext хуже других классов, можно и попробовать.
...
Рейтинг: 0 / 0
17.08.2006, 16:32
    #33925533
Oxyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
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
17.08.2006, 16:42
    #33925606
Oxyman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к объекту Session?
Sergio... а в Session_Start исоолнять:
Session["...."] = OnConnectionStateChange(.....),
... так, мысли вслух.

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

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

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

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

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

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

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


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