Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> возврат управления в обработчик 
:(
    Опции темы
DimaSiK
Дата 28.8.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



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


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
tol05
Дата 28.8.2007, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Цитата(DimaSiK @  28.8.2007,  09:28 Найти цитируемый пост)
Переопределяю стандартный обработчик запросов IHttpHandler

как? наследуешь интерфейс IHttpHandler в своем классе-обработчике? Тогда нельзя - интерфейс не содержит реализации. 

Если ты от Page например создаешь свего наследника, тогда через
Код

void ProcessRequest (HttpContext context)
{
//свой код
  base.ProcessRequest(context);
}


а вообще непонятно зачем тебе это. Может задачу обрисуешь?

Это сообщение отредактировал(а) tol05 - 28.8.2007, 09:40


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
DimaSiK
Дата 28.8.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



Цитата(tol05 @ 28.8.2007,  09:40)
Цитата(DimaSiK @  28.8.2007,  09:28 Найти цитируемый пост)
Переопределяю стандартный обработчик запросов IHttpHandler

как? наследуешь интерфейс IHttpHandler в своем классе-обработчике? Тогда нельзя - интерфейс не содержит реализации. 

Если ты от Page например создаешь свего наследника, тогда через
Код

void ProcessRequest (HttpContext context)
{
//свой код
  base.ProcessRequest(context);
}


а вообще непонятно зачем тебе это. Может задачу обрисуешь?

Мне нужно сделать так, чтобы по вызову страниц *.aspx выполнялись некоторые действия, причем автоматически. Для этого я регистрирую обработчик в WebConfig и переопределяю IhttpHandler для вызова в нем нужной процедуры. После регистрации данных мне нужно продолжить обработку запроса, выдать страницу, для этого я думаю, что нужно отдать управление оригинальному обработчику IhttpHandler, как это сделать?


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
tol05
Дата 28.8.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



тогда тебе не так нужно делать. Обработчик твой - просто переопределяет обработку запроса, а тебе нужно оставить стандартную обработку запроса.

Для того, чтобы до (или после) обработки запроса IHttpHandler-ом делать какие-то движения, предназначены модули (IHttpModule).

1. Делаешь свой модуль, регистрируешь его в конфиге, в секции <httpModules>
2. В Init() модуля подписываешся на событие Application.BeginRequest (например методом MyBeginRequest() )
3. В этом MyBeginRequest() выполняешь свои телодвижения.
4. Дальше модуль дохнет и запрос идет на обработку стандартному обработчику...



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
DimaSiK
Дата 28.8.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



Цитата(tol05 @ 28.8.2007,  10:44)
тогда тебе не так нужно делать. Обработчик твой - просто переопределяет обработку запроса, а тебе нужно оставить стандартную обработку запроса.

Для того, чтобы до (или после) обработки запроса IHttpHandler-ом делать какие-то движения, предназначены модули (IHttpModule).

1. Делаешь свой модуль, регистрируешь его в конфиге, в секции <httpModules>
2. В Init() модуля подписываешся на событие Application.BeginRequest (например методом MyBeginRequest() )
3. В этом MyBeginRequest() выполняешь свои телодвижения.
4. Дальше модуль дохнет и запрос идет на обработку стандартному обработчику...

Вот как раз до этого и докапался сейчас. Буду пробывать, что получится напишу, сенкс  smile 


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
DimaSiK
Дата 28.8.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



Сделал, работает. Однако не нравится то, что я не могу задать расширение страниц которые этот мудуль будет обрабатывать, это приходиться делать в ручную в самой реализации модулю=(. Можно ли как-нибудь автоматизировать этот процесс, а то так я выясняю расширение страница и если оно aspx, то выполняю нужные действия.

Это сообщение отредактировал(а) DimaSiK - 28.8.2007, 12:31


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
tol05
Дата 28.8.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



ИМХО нельзя. Но какая в этом проблема? Трудно расширение узнавать? smile
Все равно, даже если б было бы возможно 
Цитата(DimaSiK @  28.8.2007,  12:26 Найти цитируемый пост)
задать расширение страниц которые этот мудуль будет обрабатывать

все равно ASP.NET тратила бы определенное время и ресурсы на анализ, вызывала бы какой-то код... Ну так пропиши его сам.



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
DimaSiK
Дата 29.8.2007, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



Я переопределил HTTP модуль в методе Init перехватываю событие BeginRequest. В функции, которыя обрабатывает данное событие реализован следющий код 
Код

HttpApplication app = (HttpApplication)sender;
HttpContext ContextIn = app.Context;
 . Прежде на странице я создал сессию и записал в нее значения
Код

 Session["id_player"] = "test";
 Session["id_player2"] = "test";
. Могу ли я получить доступ к переменным, которые находятся в сессии через app.Contex.Session....... в моем обработчике события, или же там не существует переменных сексии?   





--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
tol05
Дата 29.8.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Нет. Объект Session формируется гораздо позже события BeginRequest. Обсуждение этого и вариант юзания смотри здесь


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
DimaSiK
Дата 30.8.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



И все же, как сделать так, чтобы некоторый коды выполнялся на каждой странице и его не требовалось бы прописывать на каждой странице, имеется ввиду, что раз прописываются настройки в WebConfig и все. Требуется так же возможность работы с сессией, с кешем не хочу, нужно переделывать логику работы скриптов. Неужели не HTTPModule и HTTHandler не позволяют этого делать?


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
tol05
Дата 31.8.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Позволяют. Ты страницы пишешь как наследники от класса Page.
Создай класс - наследник Page (или даже напрямую от IHttpНandler), в нем переопредели событие, допустим PreInit. Может даже конструктор страницы...
В обработчике пиши свой код. А все страницы создавай как наследники от этого класса. Если был конструктор переопределен - от твой код будет автоматом выполняться. Иначе - вызывай свой обработчик базового класса явно.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
DimaSiK
Дата 31.8.2007, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



Цитата(tol05 @ 31.8.2007,  09:34)
Позволяют. Ты страницы пишешь как наследники от класса Page.
Создай класс - наследник Page (или даже напрямую от IHttpНandler), в нем переопредели событие, допустим PreInit. Может даже конструктор страницы...
В обработчике пиши свой код. А все страницы создавай как наследники от этого класса. Если был конструктор переопределен - от твой код будет автоматом выполняться. Иначе - вызывай свой обработчик базового класса явно.

Ну ты написал, я новичек пока в ASP не все понял  smile . smile  smile  smile  smile  smile  хотя бы простецкий.


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
tol05
Дата 31.8.2007, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



если тебе обязательно работать нужно только с сессией, то
Код

//"MyPageClass.cs"
public partial class MyPageClass : System.Web.UI.Page
{
    public void Page_PreInit(object sender, EventArgs e)
    {
        Session.Add("baseMessage", "Hi from MyPageClass");
    }
}

//"Default.aspx.cs"
public partial class _Default : MyPageClass
{
    protected void Page_Load(object sender, EventArgs e)
    {
     Response.Write(Session["baseMessage"]);
    }

    public void Page_PreInit(object sender, EventArgs e)
    {
        base.Page_PreInit(sender, e);
    }
}

не очень удобно. В каждой странице вызывать base.Page_PreInit. Проблема в том, что в конструкторе базового класса
еще не инициализирована текущая Session...

Мне больше нравится работа с Сache или Application
Код

//"MyPageClass.cs"
public partial class MyPageClass : System.Web.UI.Page
{
    public MyPageClass()
    {
        Context.Application.Add("baseMessage", "Hi from MyPageClass");
    }
}

//"Default.aspx.cs"
public partial class _Default : MyPageClass
{
protected void Page_Load(object sender, EventArgs e)
    {
     Response.Write(Application["baseMessage"]);
    }
}




--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
DimaSiK
Дата 31.8.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 390
Регистрация: 20.8.2006

Репутация: нет
Всего: нет



Нет, вариант может быть и хорош, но только его нужно постоянно самому вызывать, нужно об этом помнить.

Добавлено через 13 минут и 31 секунду
Неужели и в событии EndRequest я не могу достучаться до переменных сесии, ведь они уже создан?


--------------------
Мы не стараемся быть первыми, мы стараемся быть лучшими.

PM MAIL   Вверх
tol05
Дата 31.8.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Цитата(DimaSiK @  31.8.2007,  14:27 Найти цитируемый пост)
Нет, вариант может быть и хорош, но только его нужно постоянно самому вызывать, нужно об этом помнить

блин, а тебе трудно угодить!.. Чтоб все было, и ничего не помнить  smile Юзай модуль тогда

Цитата(DimaSiK @  31.8.2007,  14:27 Найти цитируемый пост)
Неужели и в событии EndRequest я не могу достучаться до переменных сесии, ведь они уже создан

О конвейере событий asp почитать не хочешь?


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.