Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL SB: определить клиенов, которые WAITFOR  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 476
Всем привет! Вопрос по MS SQL Server Service Broker есть....
Порывшись в доках MS так и не получилось найти ответ на вопрос: каким образом можно определить клиентов и из очередь, которые вызвали со своей стороны WAITFOR RECIVE (асинхронно).
Краткая предыстория: я с сервера в хранимой процедуре создаю диалог и отправляю разным сервисам сообщения.
Клинет (приложение на Delphi, компонент TMS ServiceBroker) асинхронно вызывает

WAITFOR (RECEIVE message_body, status, queuing_order, conversation_group_id, conversation_handle, message_sequence_number, service_contract_name, service_contract_id, message_type_name, message_type_id, validation FROM User1_QUEUE), TIMEOUT 2147483647


Можно ли как-то на сервере определить, кто из клиентов и какую именно очередь "опрашивает", т.е. ждёт сообщение в ней?
Зачем мне это? На стороне сервера я должен знать, если ли "активная принимающая сторона" в данный момент.
Если нет - то надо писать сообщение в таблицу лога, мол Пользователь Вася Пупкин не открыл программу в момент необходимости отправки ему сообщение.

Можно конечно завести отдельную таблицу состояний, при запуске клиента писать туда информацию о том что он есть, но не хотелось бы выдумывать велосипед, а обойтись функционалом MS SQL Server SB.
Спасибо.
23 фев 15, 17:30    [17301956]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL SB: определить клиенов, которые WAITFOR  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 476
И снова здравствуйте!
Таки нашёл, авось кому пригодится...

select * from sys.sysprocesses
where lastwaittype = 'BROKER_RECEIVE_WAITFOR'
24 фев 15, 11:00    [17303673]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить