Comment utiliser SqlCacheDependency?

J'ai besoin pour mettre en œuvre SqlCacheDependency pour une table qui dépendra de cette requête:
SELECT Nickname FROM dbo.[User].

J'ai créé une méthode pour cela:

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;
    }

Mais quand je lance mon application ne fonctionne pas.
J'ai vérifié la liste des abonnés (sys.dm_qn_subscriptions table) et il n'y a pas de documents.

J'ai étudié beaucoup de temps et que vous avez déjà essayé plusieurs solutions, mais ils ne fonctionne pas pour moi:

  • de confiance de connexion et définissez des autorisations pour le rôle du public:

    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

  • utiliser " sa " login pour la connexion

  • utilisation aspnet_regsql.exe (aspnet_regsql.exe -S localhost -E -ed -d TestTable -et -t User)
  • ajouter une configuration de système.serveur web dans le web.config:

    <caching>

    <sqlCacheDependency enabled="true">

    <databases>

    <add name="Tmpl" pollTime="5000" connectionStringName="RepositoryContext"/>

    </databases>

    </sqlCacheDependency>

    </caching>

  • mettre le SqlDependency.Démarrer() dans le Global.asax événement Application_Start

  • exécuter à différentes instances de sql server (SQL Server 2008 Express, SQL Server 2008)

Mais Il n'a pas aidé. Cela ne fonctionne toujours pas.

Comment puis-je le faire fonctionner?

OriginalL'auteur Volodymyr Machula | 2013-05-05