Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NETMVC подписка на события / 25 сообщений из 36, страница 1 из 2
26.06.2017, 07:02
    #39477415
RAVen42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
Приветствую, уважаемые участники форума!

Есть задача, подписаться на события класса.
Класс генерирует раз в N секунд событие, нужно подписаться на это событие и отправить результат на фронт.

Как это сделать в десктопе понятно.
Как это сделать в ASP.NET MVC ?
Жизненный цикл ASP.NET MVC не позволяет этого сделать, так же как в десктопе.
Или возможно я чего-то не знаю?
...
Рейтинг: 0 / 0
26.06.2017, 08:09
    #39477419
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42,

ну почему ж можно к примеру лонг пулинг сделать или веб сокеты а можно через signalR. просто в вебе чуть по другому
...
Рейтинг: 0 / 0
26.06.2017, 08:18
    #39477423
RAVen42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
handmadeFromRuRAVen42,

ну почему ж можно к примеру лонг пулинг сделать или веб сокеты а можно через signalR. просто в вебе чуть по другому

Меня интересует не вопрос транспорта, в этом нет проблем, а вопрос подписки на события.

Если в десктопе жизненный цикл прерывается когда программа закрыта, то в WEB жизненный цикл начинается с запроса со стороны клиента и заканчивается после ответа на запрос.
Как заставить метод отреагировать на событие другого класса, в промежутках между запросами со стороны клиента?
...
Рейтинг: 0 / 0
26.06.2017, 09:13
    #39477446
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42, Вы путаете цикл обработки запроса со всей программой.
Пока живет w3wp процесс, то можете реагировать на свои события сколько угодно.

Задачу опишите, а не проблемы своей неудачной реализации.
...
Рейтинг: 0 / 0
26.06.2017, 10:09
    #39477496
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42Класс генерирует раз в N секунд событие, нужно подписаться на это событие и отправить результат на фронт.

Сделай шину событий, представленную одним постоянно живущим объектом, и посылай события туда, классу передавай шину для генерации событий.

Сделай хендлера для нужного события, пусть шина находит подходящие хенделы и отдаёт событие им.

Реши вопрос с транспортом. Например, через SignalR.


RAVen42Если в десктопе жизненный цикл прерывается когда программа закрыта, то в WEB жизненный цикл начинается с запроса со стороны клиента и заканчивается после ответа на запрос.
Как заставить метод отреагировать на событие другого класса, в промежутках между запросами со стороны клиента?

Не так. Жизненный цикл обработки запроса и жизненный цикл приложения — разные вещи. Веб приложение стартует с первого запроса, или через горячий старт. А завершается, когда происходит Recycling пула, инициируемый IIS-ом.
...
Рейтинг: 0 / 0
26.06.2017, 10:53
    #39477541
RAVen42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
skyANARAVen42, Вы путаете цикл обработки запроса со всей программой.
Пока живет w3wp процесс, то можете реагировать на свои события сколько угодно.

Задачу опишите, а не проблемы своей неудачной реализации.

skyANA Есть библиотека, сторонняя не моя, эта библиотека с периодичностью генерирует события.
Мне нужно подписаться на эти события. И при очередном, событие отправить информацию клиенту.
...
Рейтинг: 0 / 0
26.06.2017, 10:57
    #39477544
RAVen42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
hVostt, вопросов с транспортом нет, нет вопросов и с реализацией всего описанного, в десктопном приложении.
Я не могу понять как это реализовать в MVC.
...
Рейтинг: 0 / 0
26.06.2017, 11:20
    #39477564
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42,
такой пример подойдет?
http://www.csharpcity.com/2016/consuming-rabbitmq-messages-in-asp-net-mvc/
...
Рейтинг: 0 / 0
26.06.2017, 11:24
    #39477571
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
соответственно чтоб канал типо signalr заюзать то( ну или что ты там решишь)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
consumer.Received += (model, ea) =>
            {
                var body = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                // Display message with signalr
                var context = GlobalHost.ConnectionManager.GetHubContext<SomeHub>();
                 context.Clients.All.Notification(body)
            };
...
Рейтинг: 0 / 0
26.06.2017, 11:40
    #39477588
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42Я не могу понять как это реализовать в MVC.

А чё, MVC другая планета? В чём проблема создать объект статического класса?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class EventReceiver
{
    private static Lazy<EventReceiver> _instance =
       new Lazy<EventReceiver>(() => new EventReceiver());

    public static EventReceiver Instance 
   { 
      get  { return _instance.Value; }
   }

   public void Publish(IMessage message)
   {
         /// блаблабла
   }
}

Везде и всегда тебе будет доступно EventReceiver.Instance.Publish(...)



Не стоит тупо копировать этот код, я просто привёл банальный пример, для размышления. Объект EventReceiver.Instance будет жить, пока приложение живо. А приложение умрёт либо когда его грохнет IIS, либо из-за неактивности может помереть. Это уже совсем другая история. Для надёжности и персистентности можешь использовать RabbitMQ какой-нибудь, тогда пофиг вообще будет на работу приложения.
...
Рейтинг: 0 / 0
26.06.2017, 11:44
    #39477593
RAVen42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
handmadeFromRu,

Как вариант, можно и rabbit использовать, попробую.
...
Рейтинг: 0 / 0
26.06.2017, 11:50
    #39477597
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42,
ну рабит я привел для примера подписки и как потом отослать клиент, а не то что только через него делать, а как ты реализуешь тебе решать. надеюсь помогли.
...
Рейтинг: 0 / 0
26.06.2017, 11:57
    #39477602
RAVen42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
hVostt, Не совсем другая конечно, но НЕМНОГО всё таки отличается.
IIS грохнет процесс через 15 минут (если не ошибаюсь).

Ок. реализую объект. А дальше?
Реализовать в этом статическом классе подписку на события ?
...
Рейтинг: 0 / 0
26.06.2017, 12:07
    #39477610
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42IIS грохнет процесс через 15 минут (если не ошибаюсь).


мм почему 15 а не 5 или 60 ?) нет ты тут ошибаешься, можно настроить в иис чтоб не выгружался или сайт сам себя пингует, или сервис варианты есть. + тригеры перегрузки по ошибкам и прочее.
собственно поэтому и рекомендуют делать фоновые задачи на сервисах или еще чем то, но никто не запрещает делать это внутри асп, просто иногда может что то потеряться изза ребута и тут вопрос критичности.

хвост тебе говорит что тебе надо твой объект сделать статическим/сигнлетом или в global.asax его как глобальную переменную инициализировать со старом приложения и там ж подписываешься на события. главное чтоб он висел в памяти в рамках вей жизни приложения.
...
Рейтинг: 0 / 0
26.06.2017, 14:15
    #39477718
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42skyANARAVen42, Вы путаете цикл обработки запроса со всей программой.
Пока живет w3wp процесс, то можете реагировать на свои события сколько угодно.

Задачу опишите, а не проблемы своей неудачной реализации.

skyANA Есть библиотека, сторонняя не моя, эта библиотека с периодичностью генерирует события.
Мне нужно подписаться на эти события. И при очередном, событие отправить информацию клиенту.
Хм, ну вот есть библиотека Quartz.NET, что с периодичностью выполняет таски.

Похоже на Ваш случай? Если да, то идём в гугл: Quartz.NET + ASP.NET MVC .
...
Рейтинг: 0 / 0
26.06.2017, 18:56
    #39477940
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42 hVostt, Не совсем другая конечно, но НЕМНОГО всё таки отличается.
IIS грохнет процесс через 15 минут (если не ошибаюсь).

Ок. реализую объект. А дальше?
Реализовать в этом статическом классе подписку на события ?

Что дальше решать вам. Я только показал, что ASP.NET это не какой-то другой волшебный мир, в котором всё живёт только в процессе выполнения запроса. Есть Quartz.NET, есть HangFire, есть таски,... выбирай что душе угодно.
...
Рейтинг: 0 / 0
26.06.2017, 19:11
    #39477954
RAVen42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
skyANA , у меня немного другая тема.
Сторонняя библиотека самописная, используется как для десктопа так и для web. В десктопе всё ОК.


hVostt не могу я использовать, ни Quartz.NET, ни HangFire, ни таски.
Только ту библиотеку что есть.

Сделал статический класс ,как писали ранее, инициализировал, подписался на события, но они почему то не срабатывают. Почему ни как не могу понять.
...
Рейтинг: 0 / 0
26.06.2017, 19:13
    #39477955
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42Сделал статический класс ,как писали ранее, инициализировал, подписался на события, но они почему то не срабатывают. Почему ни как не могу понять.

Как именно подписался? Где?
...
Рейтинг: 0 / 0
26.06.2017, 19:26
    #39477966
RAVen42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
hVostt,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
....
 public class TEvents

    {        
        private static TVM _m;        
       
        public static TrVM GetInstance()
        {
            TCore.Tr t = new Tr(vTM);
            _m = new TVM (t);            
            t.OnRenamed += new ItemEventHandler(t_OnRenamed);
            return _m;
        }

        static void t_OnRenamed(object source, ItemEventArgs e)
        {
            //Здесь логика при срабатывании события
        }
....
...
Рейтинг: 0 / 0
26.06.2017, 19:45
    #39477971
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42,

У тебя GetInstance() всегда возвращает новый объект, и старый при этом отправляется на свалку.
Весь смысл статики смылся в одно место.
...
Рейтинг: 0 / 0
26.06.2017, 19:49
    #39477973
RAVen42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
hVostt,

Почему всегда? я же вызываю GetInstance() один раз.
...
Рейтинг: 0 / 0
26.06.2017, 20:08
    #39477986
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42hVostt,

Почему всегда? я же вызываю GetInstance() один раз.

GetInstance() у тебя публичный метод. Значит может быть вызван сколько угодно раз откуда угодно.

Ну да ладно, лирика. Попробуй в отладке погоняй, логи прикрути, проверь работу компонента изолировано, в тесте, например. Я же не могу знать, чего это за компонент и как он работает.
...
Рейтинг: 0 / 0
27.06.2017, 10:36
    #39478236
RAVen42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
hVostt,

Ради эксперимента сделал десктопное приложение с статическим классом и web. Десктоп всё отлично работает web не реагирует на события.

Десктоп:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 public class TEvents3 : TEvents
    {

        public static TEvents3 Instance
        {
            get { return new TEvents3(); }
        }
       
    }
}

 private void Form1_Load(object sender, EventArgs e)
 {
   var t = TEvents3.Instance;
 }




WEB:

Код: c#
1.
2.
3.
4.
protected void Application_Start()
{
   var t = TEvents3.Instance;
}



Ни чего не понимаю, почему в WEB не работает ????
...
Рейтинг: 0 / 0
27.06.2017, 10:47
    #39478247
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
RAVen42Ни чего не понимаю, почему в WEB не работает ????

Видимо проблема с окружением, в котором работает веб.
...
Рейтинг: 0 / 0
27.06.2017, 11:16
    #39478281
RAVen42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASP.NETMVC подписка на события
hVostt,
Интересно, а почему на просторах интернетов, нет инфы про события в MVC в том контексте, что мне нужно. Есть много всего про Rabbit и им подобное, и ни слова по моей задаче??
Для десктопа же вагоны инфы.
Может быть всё таки с WEB что то не так? в плане events'ов ?

И еще, мысли в слух, если я инициализирую переменную в global.asax - то эта переменная будет доступна всем пользователям сайта? так ?
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NETMVC подписка на события / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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