Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
У меня на странице Page имеется рисунок, формируемый динамически. Его получением заведует Handler.ashx, на который имеется указание на странице в соответствующем месте aspx. Проблема в том, что пользователей много, и каждому может потребоваться свой рисунок. В ProcessRequest хэндлера стандартно заложен параметр HttpContext context Возможно ли, имея этот context, получить страницу (или по крайней мере ее сессию), ради которой произошло обращение к ProcessRequest хэндлера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 11:49 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
авторПроблема в том, что пользователей много, и каждому может потребоваться свой рисунок. а как ты определяешь индивидуального пользователя - авторизация с формы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 13:02 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Я никак не определяю и никакой авторизации у меня не стоит. Я рассуждаю так: когда пользователь зовет обсуждаемую нами страницу, то (в связи с тем, что там есть Handler.aspx) вызывается Handler.aspx И мне нужно знать, в связи с чем я оказался в точке ProcessRequest (HttpContext context) хэндлера. На самом деле, мне достаточно знать только текущую сессию, а не страницу. Но даже этого я не знаю, поскольку имеющийся при context свой Session - совсем другой и равен почему-то всегда null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 13:16 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Либо передавай все необходимые данные параметрами в url (image.ashx?...), либо используй не ashx, а aspx. Там-то сессия будет точно. Если надо только получить URL страницы, можно использовать context.Request.UrlReferrer. Можешь попытаться использовать Syastem.Web.SessionState.SessionStateUtility.GetHttpSessionStateFromContext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 14:01 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
IRequiresSessionState кури для хендлера. И потом context.Session Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 14:33 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
ничего не понятно но очень интересно... для того что бы твой хендлер имел представление о текущей сессии нужно (забыл как это красиво и правильно называется ;) - короче прописать вот такую конструкцию - Implements IReadOnlySessionState (откроет сессию на чтение - как на запись уже не помню - сам посмотри) - и уже тогда использовать context.Session ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 14:47 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Спасибо, Paulmay, может быть постепенно что-то и выйдет, но пока - не очень. 1) через url я передавать ничего не могу, поскольку НЕ я вызываю Handler.aspx Он вызывается Asp'oм в связи с тем, что задан среди компонентов страницы Page 2) В хэндлере я написал: IHttpSessionState sesstate= System.Web.SessionState.SessionStateUtility.GetHttpSessionStateFromContext(context); Но при этом получаю прерывание по переменной SessionStateUtility - там находится null (хотя я это и не очень понимаю). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 14:58 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
1) Вызывает твой хендлер не ASP, а браузер, когда ему настает время загружать рисунок. У тебя на странице должен быть русунок (img, ImageButton либо что-то еще), у которого должно быть прописано в одном из параметров URL твоего хендлера. Вот в этот URL тебе и надо добавить параметры. <img src="image.ashx?blablabla" /> 2) Можно поступить проще - унаследовать класс обработчика от IRequiresSessionState либо от IReadOnlySessionState. На C# это выглядит примерно так: <%@WebHandler Class="ImageGenerator" %> using System; using System.Web; public class ImageGenerator (IHttpHandler, IRequiresSessionState) { ... } 3) А с aspx все просто - вместо ProcessRequest используешь OnLoad (либо Page_Load). В остальном все также. Но, я думаю, этот метод тебе не понадобится (см. п1 и п2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 15:12 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
to Dimon aka Manowar Вы пишете: "IRequiresSessionState кури для хендлера". Состояние IRequiresSessionState=true я, как понимаю, нужно задать для хэндлера еще на Page. Но там я кроме наименования класса (HandlerPict) еще ничего не знаю. Не понимаю, как я могу это там сделать. Внутри хэндлера я написал фрагмент: if (context.Handler is IRequiresSessionState) count= 2; - и он был принят Студией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 15:21 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Так... Я начинаю ничего не понимать... Приведи, если это не секретная информация, каким образом ты используешь свой хендлер? Где на странице находится ссылка на него? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 15:29 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
to Paulmay Ну конечно у меня есть типа <img src="image.ashx?blablabla" /> но эти blablabla нисколько не помогут, потому что не могу же я менять их в зависимости от сессии. Мне нужно узнать саму сессию, потому что через нее мне становится доступен мой Блок Управления Сайтом (БУС). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 15:31 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
to Paulmay Пожалуйста: на странице стоит только это: <asp:TableCell> <img id="imgPicture" runat="server" alt="Picture" src="HandlerPict.ashx" /> </asp:TableCell> И есть модуль HandlerPict.ashx <%@ WebHandler Language="C#" Class="HandlerPict" %> using System; using System.IO; using System.Web; using System.Web.SessionState; public class HandlerPict : IHttpHandler { public bool IsReusable { get { return true; } } public void ProcessRequest (HttpContext context) { const int buffersize= 1024 * 16; Stream stream; byte[] buffer= new byte[buffersize]; int count; stream= the.Site(context).Picture; // Set up the response settings context.Response.ContentType= "image/jpeg"; context.Response.Cache.SetCacheability(HttpCacheability.Public); context.Response.BufferOutput= false; context.Response.Clear(); // Write image stream to the response stream count= stream.Read(buffer, 0, buffersize); while (count > 0) { context.Response.OutputStream.Write(buffer, 0, count); count= stream.Read(buffer, 0, buffersize); } stream.Close(); the.Site(context).RegisteredPhoto[0]= null; } } Всё это отлично показывает рисунки. Проблема состоит только в том, что пользователей много и для каждого должен быть свой stream в зависимости от сессии, которую я хочу уметь добыть из context. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 15:42 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
два варианта 1) В Page_Load укажи Picture.src=String.Format("HandlerPict.ashx?pictpath={0}", the.Site(Context).PictureFilename); В HandlerPict.ashx проверь, не подсунул ли тебе хакер в качестве pictname какую-то лажу (вроде "|del c:\windows\*.*"), и грузи этот файл. 2) public class HandlerPict :IHttpHandler, IRequiredSessionState ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 16:01 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Забыл написать, что в приведенном мной листинге Picture есть MemoryStream, поэтому никакого FileName у него нет, и передавать параметр бесполезно. В указанном MemoryStream находится корректный образ рисунка, и опыт показывает, что изображение бывает правильным. ДАЖЕ если бы это был обычный файл, а не MemoryStream, острота проблемы бы от этого не исчезла, потому что ничего не мешает нескольким пользователям одновременно лазить в файл. А MemoryStream у каждой сессии свой - и здесь всё нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 16:09 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Я только что сделал "показывательку" картинок не из .ashx, а на основе обычного .aspx Содержимое хэндлера было перенесено в Page_Load. Действительно, всё нормально работает, - и с сессиями, разумеется, проблем нет. (Единственное, в Page Студия теперь не предлагает этот модуль Picture.aspx в качестве кандидата на параметр src в img). Это можно считать решением проблемы... Спасибо всем принявшим участие в обсуждении этого вопроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 16:40 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Page pg = (HttpContext.Current.Handler as Page); Сливаясь с Мировым Разумом, не теряйте Своего ! Web: www.sslabs.co.uk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 16:53 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Сливаясь с Мировым Разумом, не теряйте Своего ! Ваша конструкция, PARUS, дает круглый null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 17:06 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
> Я только что сделал "показывательку" картинок не из .ashx, а на > основе обычного .aspx Содержимое хэндлера было перенесено в Page_Load. так ты попробовал реализировать IRequiredSessionState для своего хэндлеоа или нет? По-моему это должно было бы решить твою проблему с сессией. А через aspx - это просто workaround Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 18:48 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Артёму Нет, я не смог реализировать IRequiredSessionState для своего хэндлера. Если это у тебя действительно получится (вся ситуация описана выше), напиши, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 19:32 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
> Нет, я не смог реализировать IRequiredSessionState для своего > хэндлера. а ты пробовал ставить HandlerPict :IHttpHandler, IRequiresSessionState ? "Реализировать этот интерфейс" - просто громкое слово, на самом деле - это просто маркерный итерфейс и ничего на самом деле реализировать ненадо. > Если это у тебя действительно получится (вся ситуация описана выше), > напиши, пожалуйста. на самом деле, самодельные хэндлеры я использую давно и успешно работаю с сессией внутри них (благо IRequiresSessionState помагает в этом :) ) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 19:43 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Проблема не в том, что я не могу написать HandlerPict :IHttpHandler, IRequiresSessionState Мне не хватает квалификации: я не понимаю, что дальше можно делать с IRequiresSessionState Ведь в хэндлере менять значение SessionState уже, как я понимаю, поздно. А каким образом его установить заранее я не понимаю и не умею. Здесь нужны подробные инструкции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 19:58 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
> Проблема не в том, что я не могу написать > HandlerPict :IHttpHandler, IRequiresSessionState > Мне не хватает квалификации: я не понимаю, что дальше можно делать с > IRequiresSessionState ну так собственно "HandlerPict :IHttpHandler, IRequiresSessionState" - это посути то на чём заканчиваеца "что нужно сделать". Далее обращаешься к сессии через context - его то ты уже имеешь. > Ведь в хэндлере менять значение SessionState уже, как я понимаю, > поздно. А каким образом его установить заранее я не понимаю и не умею. > Здесь нужны подробные инструкции. что-то я не понимаю, почему поздно? А счас ты где его устанавливаешь/считываешь? Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 20:07 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Сейчас бегу пробовать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2006, 20:15 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Дополнение для интересующихся. В приведенном выше листинге HandlerPict.ashx для успешной работы необходимо сделать следующие поправки: 1) операцию stream.close(); из хэндлера надо удалить (иначе картинка будет показываться только один раз) и перенести на момент закрытия сессии 2) вместе этого в хэндлер надо вставить команду: stream.Seek(0, SeekOrigin.Begin); чтобы чтение начиналось с начала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2006, 10:09 |
|
||
|
Как получить страницу по context хэндлера?
|
|||
|---|---|---|---|
|
#18+
Дополнение для интересующихся. В приведенном выше листинге HandlerPict.ashx для успешной работы необходимо сделать следующие поправки: 1) операцию stream.close(); из хэндлера надо удалить (иначе картинка будет показываться только один раз) и перенести на момент закрытия сессии 2) вместе этого в хэндлер надо вставить команду: stream.Seek(0, SeekOrigin.Begin); чтобы чтение начиналось с начала. данное сообщение получено с www.gotdotnet.ru ссылка на оригинальное сообщение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2006, 17:59 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=34042302&tid=1388511]: |
0ms |
get settings: |
8ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 427ms |

| 0 / 0 |
