![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
А я говорю - возможно. Создай сервис и общайся с ним из ASP.NET-приложения через ремоутинг. Список сессий (объектов) храни в статическом Dictionary в windows service. Добавлено @ 16:56 Неужели пример нужен ? -------------------- ![]() |
|||
|
||||
| ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Я ж тебе говорил уже:
Этим приложением можно сделать Win-сервис Передавать данные приложению можно так:
|
||||||
|
|||||||
| Pankon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
А несколько..? |
||||
|
|||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Зачем тебе несколько? Одного хватит. Какая разница сколько их, если они могут создать сколько угодно потоков Запущенное, работающее в режиме ожидания. Получило задание --- запустило поток --- ждет. Получило ответ от потока --- обработало ---- опять ждет. |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
||||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Как вижу ситуацию я:
АСП-приложение --- пишет в базу (не могу придумать нормальный способ взаимодействия двух разных приложений Win-сервис (зачем доп память на визуализацию жрать). Временами сканирует базу на наличие новой заявки. Есть заявка --- запускаем поток на ее обработку --- ждем новые заявки. Получили ответ от потока --- обрабатываем ---- опять ждет. Вот так. Что непонятно? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Сел за пример, и тут простая мысль пришла в голову: а что мешает в рамках ASP.NET-овского приложения стартануть поток, ответственный за задачи "вне страницы" ? Пусть он живёт столько, сколько нужно, и управляет пользовательскими сессиями.
З.Ы. ASP.NET - это кстати сам по себе windows service, под которым стартуют потоки (из пула), выводящие каждую страницу. -------------------- ![]() |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
У меня тоже были такие мысли, а потом подумал (с подачи Pankon). А не закроется поток, при закрытии сессии |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Одно другого никак не касается. Есть процесс (aspnet_wp.exe или w3wp.exe), запущенный в нём поток ведёт себя точно так же как в любом другом приложении - 100% проверено. -------------------- ![]() |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
||||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Ну остановишь ты IIS, ну и что ? Хочешь, чтобы всё продолжало работать, а смысл ? -------------------- ![]() |
|||
|
||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
Хорошо.
Тогда.... Ближе к телу, как сказал Мапасан. Есть класс(Klass) с конструктором, который принимает один(..) входной параметер. У класса есть метод, который, в принципе, и делает всю работу, есть свойство, показывающее сосояние класса(обьекта). Как организовать потоки которые запускаются по "вызову" пользователей(с веб-стр) и принимают(см. конструктор) параметер(ы) от пользователя. При этом, поток при окончании работы "освобождает от себя (во сказал И (для админ веб-страницы)была бы возможность во время работы потоков опрашивать их "численность", а так же в каждом потоке иметь возможность "прочитать" то свойства, которое показывает сосояние класса(обьекта). Вот примерно такая задача. Может, конечно, я что-то не правильно описал, но принцип, я думаю, понятен. На вопрос: Неужели примеры нужены ? Отвечаю: А вот и ДА. |
|||
|
||||
| mr.DUDA |
|
||||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Pankon, лови пример.
Создаём веб-сайт с двумя страницами: UserPage.aspx, AdminPage.aspx. На юзерпейдж кидаем текстбокс для имени пользователя (всё по-простому) и Label для вывода информации о состоянии (например, будем туда тайм-аут выводить), на админпейдж - таблицу Table, куда выведем список пользователей и тайм-ауты. Добавляем классы WorkItem.cs и WorkItemManager.cs: первый будет представлять тот самый объект, о котором ты говоришь, с состоянием пользователя и его тайм-аутом. В нём же будет крутиться поток данного пользователя. Второй класс будет хранить коллекцию всех активных WorkItem-ов в виде Dictionary<имя_пользователя,WorkItem>. Список существует в единственном экземпляре, поэтому WorkItemManager сделаем синглетоном. При каждом заходе на страницу UserPage будем проверять, есть ли у WorkItemManager-а WorkItem для данного пользователя (по введённому логину) и будем отодвигать тайм-аут на 30 секунд вперёд. При заходе на страницу AdminPage берём список пользователей и выводим инфу, полученную из WorkItem-а каждого пользователя. UserPage.aspx.cs
AdminPage.aspx.cs
WorkItem.cs
WorkItemManager.cs
Полностью проект - в аттаче: Присоединённый файл ( Кол-во скачиваний: 2 )
TestWebSite.zip 4,76 Kb-------------------- ![]() |
||||||||
|
|||||||||
| Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
mr.DUDA, лови звезду... И "последние" вопросы. Синглетон таботает на уровне приложения Я останавливал сессию - он работает, я очищал аппликатион ..- он работает. Я останавливал - приложение - он не работает Как таковой на синглетон не имеется обьектой ссылки... Тут пробел в моих знаниях: Как сборщик мусора "общается" с синглетонами (Блин никигда не задумывался.) И где почитать? Добавлено @ 14:32 И еще вопрос в догонку. Мой метод, который ваполняет "всю" работу не "спит", а довольно сильно ресурсы тянет. Нужно для него "приоритет" ставить или еще что.(Если каждый такой поток (40 штук и еще если в WorkItem.cs написать static метод, не будет проблем, если к нему будут обращаться разные потоки? Это сообщение отредактировал(а) Pankon - 12.7.2006, 15:06 |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Синглетон - это понятие из паттернов проектирования. Framework ничего не знает о паттернах. Поэтому смешивать в одну кашу синглетон и сборщик мусора - некрасиво Собственно, сам синглетон WorkItemManager-а существует только для того, чтобы где-то можно было хранить список объектов WorkItem; потоки в моём примере выполняются в рамках объектов WorkItem. То есть, если к примеру даже убрать из проекта класс WorkItemManager, то ничего не мешает создавать "по одному" экземпляры WorkItem-ов и хранить ссылки на них где-нибудь в другой статической переменной класса. Ресурсы равномерно распределяются между потоками. То есть если сделать 100 потоков - система будет тормозить равномерно между 100 потоками. По идее, нужно как-то ограничивать колическво потоков до 10-20, например используя класс ThreadPool. -------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |