1) Ja, jeg anser det for pålideligt, da det gør det korrekt, formålet var designet til at gøre (cache-invalidering)
2) Nej. Dette er grunden til, at du kun kan abonnere ved at udstede en forespørgsel, dette sikrer, at der ikke er nogen kapløb mellem hentning af data og nye opdateringer, der giver besked
3) Database (eller instans) genstart signalerer alle afventende forespørgselsmeddelelser med en SqlNotificationInfo
værdien af Restart
. Læs hvordan SqlDependency og er baseret på Query Notification
for en bedre forståelse. Som SqlDependency
holder en åben forbindelse til databasen hele tiden, en database utilgængelighed vil blive opdaget af SqlDependency
selv før nogen eksplicit forespørgselsmeddelelse
4) Nej. Mere om dette længere nede...
5) Der er ingen 'glippede data'. Forespørgselsmeddelelse (og dermed SqlDependency) giver dig aldrig besked om hvad data ændret. Det giver dig kun besked om, at det har ændret sig . Du skal altid gå tilbage og læse alle dataene tilbage for at se, hvad der var ændret (og jeg henviser dig tilbage til spørgsmål/svar nr. 2). En nystartet applikation havde endnu ikke forespurgt dataene til at begynde med, så der er ingen ændring at blive underrettet om. Først efter den har først forespurgt dataene, kan den modtage en notifikation.
Ud fra beskrivelsen af dit problem er jeg ikke overbevist om, at du har brug for forespørgselsmeddelelser. Det forekommer mig, at du vil handle på enhver ændring, uanset hvornår den skete, selvom din applikation ikke kørte . Dette er bestemt ikke cache-invalidering, det er ændringssporing. Derfor er du nødt til at implementere en ændringssporingsteknologi, såsom Skift datafangst eller Skift sporing , som begge kun er SQL Server 2008 og nyere (ikke tilgængelig i SQL Server 2005). Med SQL Server 2005 er det ikke ualmindeligt at implementere en trigger og sætte en besked i kø for Servicemægler for at håndtere det samme problem, som du forsøger at håndtere (opdag ændringer, reager på hver række af nye data).