Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5 6 7   вперед  Ctrl      все
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10938
2 Shocker.Pro
давно думал о таком решении не нашел способа гарантировано убивать именно те коннекты которые ждут определенного события.

хорошо бы код этого фрагмента.

еще была мысль оповещать через освобождение экслклюзивной "блокировки приложения" (applock) сервером - в то время как клиенты на конектах висят в ожидании шаред applock
25 авг 06, 14:52    [3054215]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
SergSuper
GreenSunrise
Спорный вопрос насчет "в любом случае". Вот в вашем - точно нужен.

А как может сервер тогда послать оповещение если постоянного канала нет, а сам сервер иницировать конект не может?
Мне чего-то в голову ничего не приходит

Дык фишка в том, что это у данного конкретного человека сервер инициировать коннект не может. Но это не так для многих людей, также заинтересованных в данной теме.

Ну и такой еще вопрос - считается ли мейл от сервера, который вызывает реакцию клиента, инициацией коннекта? :-) Если это коннект в сиквельных терминах, то конечно нет. А если под этими словами понимается "инициация обратной связи", то да.

Ладно, с моей стороны уже треп пошел. Пожалуй, я заткнусь :-) На этот пост можно не отвечать ;-)
25 авг 06, 15:03    [3054298]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22444
GreenSunrise
Ну и такой еще вопрос - считается ли мейл от сервера, который вызывает реакцию клиента, инициацией коннекта? :-) Если это коннект в сиквельных терминах, то конечно нет. А если под этими словами понимается "инициация обратной связи", то да.


Тут просто многие путают понятия "Клиент" и "Пользователь". Клиент - это клиентская программа. Пользователь - это человек, использующий Клиента.

Уведомление Пользователя (по email, sms и пр.) НЕ ЕСТЬ уведомление Клиента. В то время как уведомление Клиента позволит В ТОМ ЧИСЛЕ уведомить Пользователя средствами Клиента, но это не единственное применение уведомления (в клиенте могут происходить и какие-то внутренние процессы, например обновление справочников и т.п.)
25 авг 06, 15:10    [3054335]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22444
Shocker.Pro
Тут просто многие путают понятия "Клиент" и "Пользователь"


сорри, я хотел сказать не "Путают", а "Смешивают"
25 авг 06, 15:11    [3054347]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Shocker.Pro
Уведомление Пользователя (по email, sms и пр.) НЕ ЕСТЬ уведомление Клиента.

Ээээ, батенька, можно и клиентскую программу по e-mail уведомлять...
25 авг 06, 15:12    [3054351]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22444
GreenSunrise
Ээээ, батенька, можно и клиентскую программу по e-mail уведомлять...


Да, но простите - это опять получается опрос. В данном случае постоянно будет опрашиваться почтовый сервер.
25 авг 06, 15:17    [3054399]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Александр Гладченко
Member

Откуда:
Сообщений: 10802
Блог
Shocker.Pro
Александр Гладченко
TO Shocker.Pro

ИМХО, решение представляет интерес для многих... Если захотите опубликовать в виде статьи, рассылка в Вашем распоряжении ;)


Добро, напишу статью с примерами кода на следующей неделе.
1) хочу проверить на SQL2005
2) хочу дождаться мнения Glory (ща как разнесет в пух и прах)
3) в каком формате делать статью (html или коды форума?)
4) куда кинуть?


Формат - любой Вам удобный. Можно кинуть на мыло из моего профиля. Заранее от всех СПАСИБО! :)
25 авг 06, 15:39    [3054548]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Александр Гладченко
Member

Откуда:
Сообщений: 10802
Блог
Shocker.Pro
Sergey Ch
MS SQL Server 2005 это стандартная функция - при изменнии данных можно делать все что угодно - от посылки e-mail с уведомлением до text message на мобильный телефон клиента...


Простите, я сам еще не работал с SQL2005. E-mail можно послать и из SQL2000. Оно же может быть применено и для отсылки SMS - вполне стандартная функция.

Скажите, как именно возбудить событие в клиенте стандартными средствами SQL2005 на ADO?


Поддержка уведомлений ADO.NET

В SQL Server 2005 появилась поддержка уведомлений для запросов SQL Server. Вы можете использовать эту поддержку для отправки команды в SQL Server с указанием, что должно быть сгенерировано уведомление, если повторное выполнение этой команды вернет результаты, отличные от полученных в первый раз. Это выполняется с использованием зависимого объекта, который определяет, когда изменились данные. Команды, отправляемые на сервер через любой клиентский API, такой, как ADO.NET, OLE DB, Open Database Connectivity (ODBC), Microsoft ActiveX Data Objects (ADO), или SOAP, могут включать тэг, требующий уведомления. Для каждой команды, выполняемой с указанием генерации уведомлений, сервер создает "подписку уведомлений", которая срабатывает один раз для каждой команды, включенной в запрос на генерацию уведомлений. Уведомления доставляются через очередь SQL Service Broker, из которой их получают приложения, и используют службы активации и команды блокировки, которые возвращают информацию, доступны ли уведомления. Уведомления запросов полезны для кэширования результатов в приложениях, таких, как Web-сайты, которые управляются данными из базы данных.

Источник
25 авг 06, 15:51    [3054646]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22444
Александр Гладченко
Поддержка уведомлений ADO.NET


Если я правильно понял, хотя послать запрос на подписку можно и через ADO, получить уведомление можно ТОЛЬКО через ADO.NET, или я не прав?
25 авг 06, 15:59    [3054709]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22444
MsDatabaseru
еще была мысль оповещать через освобождение экслклюзивной "блокировки приложения" (applock) сервером - в то время как клиенты на конектах висят в ожидании шаред applock


А Вы смогли это реализовать? Или возникли какие-то проблемы?
25 авг 06, 16:03    [3054732]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Александр Гладченко
Member

Откуда:
Сообщений: 10802
Блог
Shocker.Pro

Если я правильно понял, хотя послать запрос на подписку можно и через ADO, получить уведомление можно ТОЛЬКО через ADO.NET, или я не прав?


Я глубоко не вникал, но как понимаю, за доставку уведомлений отвечает Брокер, для которого можно задейсвовать необходимые варианты доставки. Так, например, доставляет уведомления Database Mail. У брокера есть достаточно программных интерфейсов, используя которые можно не только управлять его очередями, но и "чёрта лысого" прикрутить :)
25 авг 06, 16:03    [3054734]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10938
Shocker.Pro
MsDatabaseru
еще была мысль оповещать через освобождение экслклюзивной "блокировки приложения" (applock) сервером - в то время как клиенты на конектах висят в ожидании шаред applock


А Вы смогли это реализовать? Или возникли какие-то проблемы?


возникла методологическая проблема с выбором механизма серверного процесса который бы в своей транзакции отслеживал изменения и снимал-ставил эксклюзивную блокировку. до реализации дело не дошло.
25 авг 06, 16:10    [3054788]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
vugluscr
Member

Откуда:
Сообщений: 121
Ну, коль критики надо:
Если я правильно понял, то на клиенте стоит ADO коннект с рестартом, а это есть "протоколо независимый" сервер (listener классически). Это значит, что преимущество подхода - независимость от протокола. Недостаток - зависимость от ADO. Клиентского процессорного времени не жалеем.
Экономия по времени проца идет на сервере, за счет Wait в отдельном потоке, а после kill.
Таким образом получается, что это половина задачи.
Именно сервер должен инициировать соединение до клиента.
Если сервер будет ждать клиента (подкарауливать) тогда нет одновременности оповещения. Тут алгоритм упирается в постановку задачи:
Важно ли заказчику, что менеджер вышел пописать и получит оповещение на 2 минуты позже, или же надо доставить его прямо в кабинку?
Если же заказчик имеет только конект "в одну сторону", то доставка до кабинки - не решаемо. А вот оповещение в момент запроса ...
Здесь похоже нет общего решения, если нет контроля за запросами пользователя
Либо это должна быть настройка безопасности, которая все блокирует, а приложение клиента узнав об этом сперва получает сообщение (вычищает очередь), а уже потом повторно обращается за данными.
Либо это килинг клиентского процесса и сообщение на следующей инициации соединения (самое смешное, приказ подписан - всех из базы шарахнуло, а уж чего пишет 1Сина в случае килл - так там пол конторы в инфарктах)
Либо - фонтазия просто неограничена. Что может сделать сервер с клиентом? Это зависит от того кто это снимал немцы или американцы.
25 авг 06, 16:42    [3055080]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
я встречал решения подобных вопросов разработанные с применением MQ сервисов... Конкретно я некоторое время общался с MSMQ (реализация от Microsoft)... Если интересно - то посмотрите в этом направлении...
25 авг 06, 16:45    [3055115]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5503
Блог
vugluscr
Важно ли заказчику, что менеджер вышел пописать и получит оповещение на 2 минуты позже, или же надо доставить его прямо в кабинку?
Оповещение получит приложение-клиент. И что-то нарисует на экране для клиента-пользователя. А на "верхнем уровне" уже можно реализовать что угодно - типа менеджер должен нажать за определенное время на кнопку. Не нажал - пусть раз в час/2 часа/сутки запускается робот, автоматически вычитающий 200% премии с нерасторопного менеджера - это уже на вкус "заказчика". Тут главное - не путать доставку уведомления приложению и сообщения человеку.
25 авг 06, 17:00    [3055244]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22444
2quot vugluscr

Насчет убийства живого но неактивного коннекта я думал еще год назад (перед тем, как начала писаться TCP-примочка). И тогда мне не пришло в голову использовать процедуру ожидания. Но, безусловно речь идет о доставке "в кабинку". Клиент может часами не посылать запросов к серверу, но срочное сообщение он обязан получить.

Что касается ресурсов - так какая разница, тратим мы ресурсы на Listener собственного изготовления или используем для этого ADO? Лично я не заметил сколь либо значащей нагрузки на клиентский процессор в режиме ожидания.
25 авг 06, 17:02    [3055258]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
vugluscr
Member

Откуда:
Сообщений: 121
Согласен про менеджера приложения-человека-парохода и пенопласта
---
Когда я говорил о "асинхронности" и "отсутствии серверов", я мнил такой уровень "серверности" системы, как DCOM.
Конечно, без серверов ничего не решить, вопрос лишь в том, на каком уровне софта они будут находиться.
Возьмем DCOM. Клиентское приложение говорит: мне нужен объект, и ингда добавляет: на машине такой-то. Здесь серверные функции выполнят ОС.
Как выполнят - умолчим, но на клиентском уровне асинхронность идеальная:
Надо оповестить (об этом знает сервер) -> берет список очереди и посылает всем (в очереди идентификаторы, компьютеры) ----это делает ОС-----> на клиентских тачках активируются DCOM сервера (их не было раньше, они не жрали память и коннекты), они запускают клиентские потоки (стоявшие в ожидании), потоки доставляют в приложение сообщения - не важно, обращался клиент к серваку или нет.
--- Вот идеал системы, к которому я сокоро риду.
:) Я ещё не написал DCOM - только локальный сервак, то есть для клиентов одного терминала. Идея та же. Второй поток стоит в ожидании событий.
------ Недостатки: необходимо полноценное MS Network. что также решается через openvpn мосты. Это постоянный коннект (но не к SQL и даже не к его аппаратной части).
------ Преимущество - это возможность шифрования трафика. Свободный доступ на корпоративный сайт без доп. авторизаций. Винда, домен. Это же и в недостатки.
25 авг 06, 17:48    [3055526]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
ChA
Member

Откуда: Москва
Сообщений: 11317
Shocker.Pro
Данная тема неоднократно поднималась на форуме и не только
Пара вопросов:
1. правильно ли понял, что при работе описанного Вами механизма каждый клиент должен открывать, как минимум, 2 соединения: одно для обычной работы, другое - для получения уведомлений ? И если так, то чем Ваш подход лучше подхода Глеба Уфимцева ? Вопросы лицензионной чистоты Вы учитываете ?
2. Вас не беспокоит, что команда KILL предназначена для решения несколько иной задачи, и активное ее использование в подобном контексте может привести к неожиданным последствиям ? Не обязательно, но вдруг ? Вы давно используете этот метод, чтобы утверждать, что таковые последствия отсутствуют ?
25 авг 06, 18:12    [3055632]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
ChA
Member

Откуда: Москва
Сообщений: 11317
Кстати, подержу SanyL. Возможно действительно стоит покопать MSMQ...
25 авг 06, 18:14    [3055644]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22444
vugluscr
------ Недостатки: необходимо полноценное MS Network. что также решается через openvpn мосты. Это постоянный коннект (но не к SQL и даже не к его аппаратной части).


У меня дома инет подключен так:
1) локалка (внутренние ресурсы)
2) пиринг в другие подсети (бесплатные ресуры)
3) интернет по VPN поверх п.1

Чтобы подключиться по VPN к офису, мне нужно запустить
4) VPN поверх п.3

Соответсвенно все прелести: для п.1 нужен DNS провайдера, чтобы подключить п.3. Для работы с офисными ресурсами нужно подключение к DNS офиса, чтобы обращаться по именам к офисным ресурсам. Чтобы зайти в домен, необходимо подключаться "через удаленный доступ", который в свою очередь тоже работает "через удаленный доступ"... В общем, врагу не пожелаешь таких настроек....
25 авг 06, 18:29    [3055691]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22444
спасибо за вопросы

ChA
1. правильно ли понял, что при работе описанного Вами механизма каждый клиент должен открывать, как минимум, 2 соединения: одно для обычной работы, другое - для получения уведомлений ? И если так, то чем Ваш подход лучше подхода Глеба Уфимцева[/url]


Да. Надо сказать, у меня каждый клиент (из-за некоторых глюков ADO при работе с асихронными запросами и при чередовании Execute и работы с ADO-курсорами на одном соединении) открывает до пяти соединений. Так что соединением больше, соединением меньше... Согласен, с точки зрения лицензий на ограничение количество подключений этот метод не лучший.

Чем лучше метода Уфимцева я сказал в самом первом сообщении (недаром я сослался на эту статью) - не нужно никаких дополнительных компонентов ни на сервере, ни на клиенте и не нужно сверлить дополнительные дырки в файволе на установление дополнительных клиентских соединений.

ChA
2. Вас не беспокоит, что команда KILL предназначена для решения несколько иной задачи, и активное ее использование в подобном контексте может привести к неожиданным последствиям ? Не обязательно, но вдруг ? Вы давно используете этот метод, чтобы утверждать, что таковые последствия отсутствуют ?


За время тестирования, которое активно продолжается и сейчас, было выдано порядка пары тысяч KILL-ов - пока я не наблюдаю каких-то проблем ни на сервере, ни на клиенте. Пользователи даже не заметили смены методики.
25 авг 06, 18:40    [3055729]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
vugluscr
Member

Откуда:
Сообщений: 121
По поводу провайдеров и проч.
Как раз в этом и есть суть openvpn решения.
Тунель два раза поверх TCPIP это кошмар, а вот поверх UDP - можно жить хорошо. Будь у вас хоть 10 провайдеров.
-------- ДНС - вообще говорить не о чем. Пересылка с корпоративного сайта
ничего организации стоить не будет, рутинг настроить ....
Вот из этих мелких задач и складывается технология.
Короче - решаемо все.
25 авг 06, 18:57    [3055786]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22444
Shocker.Pro
Чем лучше метода Уфимцева я сказал в самом первом сообщении (недаром я сослался на эту статью) - не нужно никаких дополнительных компонентов ни на сервере, ни на клиенте и не нужно сверлить дополнительные дырки в файволе на установление дополнительных клиентских соединений.


виноват, поторопился, последняя фраза лишняя (про дырки). У Уфимцева как раз используется стандартное соединение со стороны клиента.
25 авг 06, 18:58    [3055787]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 22444
vugluscr
По поводу провайдеров и проч.
Как раз в этом и есть суть openvpn решения.
Тунель два раза поверх TCPIP это кошмар, а вот поверх UDP - можно жить хорошо. Будь у вас хоть 10 провайдеров.
-------- ДНС - вообще говорить не о чем. Пересылка с корпоративного сайта
ничего организации стоить не будет, рутинг настроить ....
Вот из этих мелких задач и складывается технология.
Короче - решаемо все.


Ага. Только не ездить же к каждому пользователю домой и настраивать у каждого все эти дела, а ведь у каждого свое - тут можно не один месяц потратить...
25 авг 06, 19:05    [3055804]     Ответить | Цитировать Сообщить модератору
 Re: Уведомление клиента о событии на SQL-сервере! НОВОЕ РЕШЕНИЕ!  [new]
vugluscr
Member

Откуда:
Сообщений: 121
Да, технология для территориально уд. подразделений.
А какой у тебя вид деятельности? Когда людей по домам посадить можно?
(у меня есть такой, но я пока один так работаю, из дома)
25 авг 06, 19:56    [3055913]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5 6 7   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить