powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / WebService монопольный запуск, контроль выполнения
18 сообщений из 18, страница 1 из 1
WebService монопольный запуск, контроль выполнения
    #38611979
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня.

Есть веб сервис, его могут запускать 5 человек, у каждого свой логин и пароль.
Необходимо контролировать чтобы в конкретный момент времени был запущен только один раз.
Сервис обрабатывает данные, и отключение клиента - не всегда ( тут я конечно могу ошибиться, проверяла на студии и localhost server) прекращает загрузку данных.

Сделать static класс и хранить в нем кол-во текущих запусков. Как вариант, но может есть какие то настройки для Севриса, что то типа
Код: c#
1.
[WebMethod(EnableSession = true)]


Чтобы пока сервис работет, другой не мог его запустить.

Или задам вопрос по другому, можно ли как то получить список запущенных сервисов и остановить их?

Спасибо.
ASP.NET 4.0, C#. WebForms
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38612068
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volochkova,

1. создавать и проверять глобальный EventWaitHandle
2. проверять, не занят ли порт (т.е. сервис просто не запустится, если порт занят)
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38612439
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttVolochkova,

1. создавать и проверять глобальный EventWaitHandle
2. проверять, не занят ли порт (т.е. сервис просто не запустится, если порт занят)

Можно подробнее про занятый порт?
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38612507
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VolochkovaМожно подробнее про занятый порт?

это имеет смысл, если всё работает на одной рабочей станции (т.е. мы говорим про localhost). по умолчанию используется порт 80, если один сервис его занял, другой не может его использовать, только на другом свободном порту.

в целом, лучше использовать механизмы синхронизации (пункт 1), это не сложно:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
            EventWaitHandle globalWaitHandle;
            // проверить, не запущен ли уже кем-то сервис
            if (TryOpenExistingEventWaitHandle("E7D85C00-C2EB-496F-8E8C-BD399E118258", out globalWaitHandle))
            {
                // сервис уже запущен другим приложением
                // ...
            }
            // ок, захватываем глобальный EventWaitHandle по имени (я выбрал сгенерированный GUID)
            globalWaitHandle = new EventWaitHandle(false, EventResetMode.AutoReset, "E7D85C00-C2EB-496F-8E8C-BD399E118258");
            // запускаем свой сервис
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38612521
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VolochkovaСервис обрабатывает данные, и отключение клиента - не всегда ( тут я конечно могу ошибиться, проверяла на студии и localhost server) прекращает загрузку данных.Сервису обычно монопенисуально то, отключился клиент, или нет. Он закончит свою работу.
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38612572
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему бы не сделать так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
private static readonly object globalSyncRoot = new object();

public void DoSomething()
{
    lock (globalSyncRoot)
    {
        // Вот тут Сервис обрабатывает данные
    }
}


Или идея в том, что если процесс запущен, то не надо его повторно запускать?

Тогда как-то так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
private static bool done = false;
private static readonly object globalSyncRoot = new object();

public void DoSomething()
{
    if (!done)
    {
        lock (globalSyncRoot)
        {
            if (!done)
            {
                // Вот тут Сервис обрабатывает данные
                done = true;
            }
        }
    }
}
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38612641
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПочему бы не сделать так:

а кто сказал, что речь идёт про веб-сервисы в контексте одного запущенного приложения?
такой подход:

1. не подходит, если домены разные
2. по сути тоже самое, только в "сахарной" обёртке C#
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38612653
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, а если разные запросы обрабатываются разными серверами?
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38612658
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и sp_getapplock посоветовать, зная любовь ТС к СУБД.
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38612663
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ведь кто сказал, что не хранимая процедура обрабатывает данные.
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38612699
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVostt, а если разные запросы обрабатываются разными серверами?

ога, осталось только погадать на кофейной гуще, что там задача
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38612715
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вангую: там кластер из 12 серверов
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38613060
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttVolochkovaМожно подробнее про занятый порт?

это имеет смысл, если всё работает на одной рабочей станции (т.е. мы говорим про localhost). по умолчанию используется порт 80, если один сервис его занял, другой не может его использовать, только на другом свободном порту.

в целом, лучше использовать механизмы синхронизации (пункт 1), это не сложно:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
            EventWaitHandle globalWaitHandle;
            // проверить, не запущен ли уже кем-то сервис
            if (TryOpenExistingEventWaitHandle("E7D85C00-C2EB-496F-8E8C-BD399E118258", out globalWaitHandle))
            {
                // сервис уже запущен другим приложением
                // ...
            }
            // ок, захватываем глобальный EventWaitHandle по имени (я выбрал сгенерированный GUID)
            globalWaitHandle = new EventWaitHandle(false, EventResetMode.AutoReset, "E7D85C00-C2EB-496F-8E8C-BD399E118258");
            // запускаем свой сервис



Сама проверка сама по себе понятна.
Но если клиент отвалился, а второй пытается подключиться, то мне бы остановить предыдущий запуск.
Или чтобы админ мог подключиться, посмотреть что сейчас обрабатывается и сделать стоп всем запущенным сервисам.
Собственно самое важное, это прервать уже запущенную загрузку.
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38613086
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чето я не догоняю, есть атрибуты поведения сервиса ( стандартные), ими это всем можно настроить без труда ( single)
или это не то что я думаю?
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38613092
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи, дак мы в разделе ASP.NET, а не WCF, если ты про
Код: c#
1.
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38613100
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,
Ааа.. понятно...
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38613157
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttVolochkovaМожно подробнее про занятый порт?

это имеет смысл, если всё работает на одной рабочей станции (т.е. мы говорим про localhost). по умолчанию используется порт 80, если один сервис его занял, другой не может его использовать, только на другом свободном порту.

в целом, лучше использовать механизмы синхронизации (пункт 1), это не сложно:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
            EventWaitHandle globalWaitHandle;
            // проверить, не запущен ли уже кем-то сервис
            if (TryOpenExistingEventWaitHandle("E7D85C00-C2EB-496F-8E8C-BD399E118258", out globalWaitHandle))
            {
                // сервис уже запущен другим приложением
                // ...
            }
            // ок, захватываем глобальный EventWaitHandle по имени (я выбрал сгенерированный GUID)
            globalWaitHandle = new EventWaitHandle(false, EventResetMode.AutoReset, "E7D85C00-C2EB-496F-8E8C-BD399E118258");
            // запускаем свой сервис



Придется делать все таки статик элемент и хранить в нем что то типа Executing.

Вот что нашла, на просторах интернета.
как то вот так
В принципе доступно описана и задача и код.

Единственное что пока не разобрала, как начать загрузку - и не ждать ответа.
Но думаю что "докурю"

Спасибо.
...
Рейтинг: 0 / 0
WebService монопольный запуск, контроль выполнения
    #38613160
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дошло, запускают поток на сервере.
Вот не уверена что это хорошая практика.
Была мысль запустить поток на клиенте и тут же его придушить :-)
А через статик элементы получать состояние о процессе на клиенте.

Теперь осталось только написать.
Огромное спасибо 2 hVostt.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / WebService монопольный запуск, контроль выполнения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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