1) Ja, jag anser att det är tillförlitligt eftersom det gör det korrekt som syftet var utformat för att göra (cache-ogiltigförklaring)
2) Nej. Det är därför du bara kan prenumerera genom att skicka en förfrågan, detta säkerställer att det inte finns någon kapplöpning mellan hämtning av data och nya uppdateringar som meddelas
3) Databas (eller instans) omstart signalerar alla väntande frågemeddelanden med en SqlNotificationInfo
värdet för Restart
. Läs hur SqlDependency och baseras på Query Notification
för en bättre förståelse. Som SqlDependency
håller en öppen anslutning till databasen hela tiden, en otillgänglighet i databasen kommer att upptäckas av SqlDependency
även innan någon explicit frågemeddelande
4) Nej. Mer om detta längre ner...
5) Det finns ingen "missad data". Frågemeddelande (och därmed SqlDependency) meddelar dig aldrig om vad data ändras. Det meddelar dig bara att det har ändrats . Du ska alltid gå tillbaka och läsa alla uppgifterna tillbaka för att se vad som hade förändrats (och jag hänvisar dig tillbaka till fråga/svar nr 2). En nystartad applikation hade ännu inte frågat efter uppgifterna till att börja med, så det finns ingen förändring att meddelas om. Först efter den har först frågat efter data kan den få ett meddelande.
Från beskrivningen av ditt problem är jag inte övertygad om att du behöver aviseringar om frågor. Det verkar som om du vill agera på alla förändringar, oavsett när det hände, även om din applikation inte kördes . Detta är verkligen inte cache-ogiltigförklaring, det är förändringsspårning. Därför måste du implementera en ändringsspårningsteknik, som Ändra datafångst eller Ändringsspårning , som båda är endast SQL Server 2008 och senare (inte tillgängliga i SQL Server 2005). Med SQL Server 2005 är det inte ovanligt att distribuera en trigger och köa ett meddelande för Servicemäklare för att hantera samma problem som du försöker hantera (upptäcka ändringar, reagera på varje rad med ny data).