1) Ano, považuji to za spolehlivé, protože to dělá správně, k čemu byl navržen účel (neplatnost mezipaměti)
2) Ne. To je důvod, proč se můžete přihlásit pouze zadáním dotazu, což zajišťuje, že nedojde k žádnému závodu mezi načítáním dat a upozorněním na nové aktualizace
3) Restart databáze (nebo instance) signalizuje všechna čekající oznámení o dotazech pomocí SqlNotificationInfo
hodnotu Restart
. Přečtěte si, jak SqlDependency a je založeno na Query Notification
pro lepší pochopení. Jako SqlDependency
udržuje otevřené připojení k databázi po celou dobu, nedostupnost databáze bude detekována pomocí SqlDependency
i před jakýmkoli explicitním upozorněním na dotaz
4) Ne. Více o tom níže...
5) Neexistují žádná „zmeškaná data“. Query Notification (a tedy SqlDependency) vás nikdy neupozorní na to, co údaje změněny. Pouze vás upozorní, že se změnilo . Vždy byste se měli vrátit a přečíst si vše data zpět, abyste viděli, co se změnilo (a odkazuji vás zpět na otázku/odpověď č. 2). Nově spuštěná aplikace se ještě nezeptala na data, takže není třeba upozorňovat na žádnou změnu. Teprve po nejprve se dotázal na data, zda může obdržet upozornění.
Z popisu vašeho problému nejsem přesvědčen, že potřebujete upozornění na dotazy. Zdá se mi, že chcete reagovat na jakoukoli změnu, bez ohledu na to, kdy k ní došlo, i když vaše aplikace nebyla spuštěna . To rozhodně není zneplatnění mezipaměti, je to sledování změn. Proto musíte nasadit technologii sledování změn, jako je Změnit sběr dat nebo Sledování změn , oba jsou pouze SQL Server 2008 a novější (není k dispozici v SQL Server 2005). S SQL Server 2005 není neobvyklé nasadit spouštěč a zařadit zprávu do fronty pro Zprostředkovatel služeb ke zvládnutí stejného problému, který se snažíte vyřešit (detekce změn, reakce na každý řádek nových dat).