1) Да, смятам го за надежден, тъй като прави правилно целта, за която е проектирана (невалидност на кеша)
2) Не. Ето защо можете да се абонирате само чрез изпращане на заявка, това гарантира, че няма надпревара между извличането на данните и уведомяването за нови актуализации
3) Рестартирането на база данни (или екземпляр) сигнализира за всички чакащи известия за заявки с SqlNotificationInfo
стойност на Restart
. Прочетете как SqlDependency и се основава на известие за заявка
за по-добро разбиране. Като SqlDependency
поддържа отворена връзка с базата данни през цялото време, липсата на база данни ще бъде открита от SqlDependency
дори преди всяко изрично известие за заявка
4) Не. Повече за това по-долу...
5) Няма „пропуснати данни“. Известието за заявка (и следователно SqlDependency) никога не ви уведомява за какво данните са променени. Само ви уведомява, че се е променило . Винаги трябва да се върнете и да прочетете всичко данните обратно, за да видите какво се е променило (и ви препращам обратно към въпрос/отговор № 2). Новозапочнато приложение все още не е поискало данните в началото, така че няма промяна, за която да бъдете уведомени. Само след първо е потърсил данните, може ли да получи известие.
От описанието на вашия проблем не съм убеден, че имате нужда от известия за заявки. Струва ми се, че искате да предприемете действия при всяка промяна, без значение кога се е случила, дори приложението ви да не работи . Това със сигурност не е обезсилване на кеша, а проследяване на промените. Следователно трябва да внедрите технология за проследяване на промените, като Промяна на улавянето на данни или Проследяване на промени , като и двете са само SQL Server 2008 и по-нови (не са налични в SQL Server 2005). При SQL Server 2005 не е необичайно да се разположи тригер и да се постави на опашка съобщение за Посредник на услуги за справяне със същия проблем, с който се опитвате да се справите (откриване на промени, реагиране на всеки ред нови данни).