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

Schreibe einen Kommentar