Wie zu verwenden SqlCacheDependency?
Muss ich implementieren SqlCacheDependency für eine Tabelle, die abhängig von dieser Abfrage:
SELECT Nickname FROM dbo.[User]
.
Habe ich eine Methode für diesen Zweck:
private IEnumerable<string> GetNicknamesFromCache()
{
const String cacheValueName = "Nicknames";
var result = HttpRuntime.Cache.Get(cacheValueName) as List<String>;
if (result == null)
{
result = _repository.GetAllNicknames();
var connectionString = ConfigurationManager.ConnectionStrings["RepositoryContext"].ConnectionString;
var sqlConnection = new SqlConnection(connectionString);
var sqlCommand = new SqlCommand("SELECT Nickname FROM dbo.[User]", sqlConnection);
var sqlDependency = new SqlCacheDependency(sqlCommand);
HttpRuntime.Cache.Insert(cacheValueName, result, sqlDependency);
}
return result;
}
Aber wenn ich meine Anwendung funktioniert es nicht.
Ich überprüfte die Liste der Abonnenten (sys.dm_qn_subscriptions
Tisch) und es gab keine Aufzeichnungen.
Untersuchte ich viel Zeit und habe auch schon versucht verschiedene Lösungen, aber Sie funktioniert nicht für mich:
- Vertrauenswürdige Verbindung verwenden, und legen Sie einige Berechtigungen für die public-Rolle:
GRANT CREATE PROCEDURE TO public
GRANT CREATE QUEUE TO public
GRANT CREATE SERVICE TO public
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO public
GRANT SELECT ON OBJECT::dbo.[User] TO public
GRANT RECEIVE ON QueryNotificationErrorsQueue TO public
- verwenden Sie 'sa' - login für Verbindung
- verwenden aspnet_regsql.exe (
aspnet_regsql.exe -S localhost -E -ed -d TestTable -et -t User
) - Konfiguration hinzufügen " auf "system".webServer im web.config:
<caching>
<sqlCacheDependency enabled="true">
<databases>
<add name="Tmpl" pollTime="5000" connectionStringName="RepositoryContext"/>
</databases>
</sqlCacheDependency>
</caching>
- setzen Sie die SqlDependency.Start() in der Global.asax Application_Start-Ereignis
- laufen verschiedene Instanzen von sql server (SQL Server 2008 Express, SQL Server 2008)
Aber Es hat nicht geholfen. Es funktioniert immer noch nicht.
Wie mache ich das?
InformationsquelleAutor der Frage Volodymyr Machula | 2013-05-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich schon gefunden die Lösung.
Zunächst prüfen, ob Service Broker aktiviert ist, für die Tabelle und aktivieren Sie es, wenn nötig:
Als Nächstes erstellen Sie in der SQL Server-neue Rolle
sql_dependency_role
erteilen Sie die Berechtigungen und grant Rolle to Benutzer:Danach fügen Sie C# - code für die Arbeit mit
SqlCacheDependency
oderSqlDependency
(meist die gleichen).Habe ich eine andere Methode und jetzt sieht es so aus:
Nun funktioniert es einwandfrei.
Vergessen Sie nicht aufrufen
SqlDependency.Start
Methode vor dem erstellenSqlCacheDependency
oderSqlDependency
und führen Sie den Befehl an das Ende.InformationsquelleAutor der Antwort Volodymyr Machula