![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
neiron |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 18.4.2006 Где: Краснодар Репутация: нет Всего: 4 |
Сложно всё же между java и .net бегать))) вот запутался.
В общем, следующая задача. Есть функция в классе:
Собственно, её нужно в виде вебсервиса представить. Всё бы ничего, но выполнение всего вызываемого занимает не менее минуты на рабочей тачке при выполнении 10ти потоков, её вызывающих. Больше потоков - больше времени (тупо из-за проца). Сервак то конечно помощнее, но всё же нагруз порядочный. Так вот, необходимо ограничить количество единовременных выполнений функции (веб-сервиса). Если есть возможность сделать подобное на уровне веб-сервиса, подскажите как. Я не нашёл. Пришёл к выводу, что нужно сверху некий пул потоков создавать с ограничением количества самих потоков. Так вот, как мне достать значение расчитаное потоком? К примеру, объявляю:
Возвращать собственно некуда, как я понимаю, если:
Можно так:
Но тогда нужно отдельно проверять окончание заданого потока. То бишь бесконечно проверять thread.IsAlive, дожидаясь ref. Кто-нибудь может предложить что-нибудь элегантное? Собирая всё воедино сверху вниз: 1. Веб-сервис получающий и возвращающий данные 2. Внутри вебсервис есть пул потоков, ограничивающий количество потоков сверху 3. Поток параметризированный 4. Поток должен вовращать данные 5. Время выполнения потока > минуты (возьмём к примеру) |
||||||||
|
|||||||||
mihryak |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
в голову приходят 3 варианта, по простоте реализации расставил бы их так:
1. кол-во соединений можно, насколько понимаю, ограничить IIS'ом в web.config
2. если клиент один (что крайне странно для веб-сервисом), то можно и на стороне клиента регулировать результат выполyения потока можно выдавать эвентами из потокой функции, но .Net есть для этого стандартный механизм, построенный на IAsyncResult прокси-классы, сгенерированные wsdl, позволяют вызывать веб-методы асинхронно (почитай это), так что всё уже для тебя готово к использованию 3. сама необходимость делать такими долгими веб-методы настораживает, сервер и правда жалко возможно, имеет смысл рассмотреть следующую стратегию: - клиент передаёт серверу данные для обработки, сервер их примимает и добавляет в очередь для обработки, выдавая клиенту некий Id, по которому клиент сможет получить результат - на сервере крутится некий job-processor, забирающий задачи из очереди и выполняющий их, меняя их стейт - клиент время от времени ломится на сервер со своим Id, на что сервер отвечает ему текущим статусом обработки - клиент, узнав, что задача выполнена, забирает результат (этот пункт можно совместить с предыдущим) такой механизм чем-то похож на распределённый IAsyncResult Это сообщение отредактировал(а) mihryak - 10.2.2009, 15:56 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |