Question

Je suis à l'utilisation SqlCacheDependency intégrais dans mon LinqToSQL datacontext.

J'utilise une classe d'extension pour querys Linq trouvé ici - http://code.msdn.microsoft. com / linqtosqlcache

Je suis câblé le code et quand j'ouvre la page j'obtenir cette exception -

« Le Service Broker SQL Server pour la base de données actuelle n'est pas activé, et comme les notifications de résultats des requêtes ne sont pas pris en charge. S'il vous plaît permettre au Service Broker pour cette base de données si vous souhaitez utiliser les notifications. »

sa venue de cet événement dans le global.asax

        protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
        //In Application Start Event
        System.Data.SqlClient.SqlDependency.Start(new dataContextDataContext().Connection.ConnectionString);

    }

ma question est ...

  1. Comment puis-je activer Service Broker dans mon serveur base de données SQL 2008? J'ai essayé d'exécuter cette requête .. ALTER DATABASE tablename SET ENABLE_BROKER mais il ne finit jamais et fonctionne pour jamais, je dois arrêter manuellement.

  2. une fois que j'ai cet ensemble dans le serveur SQL 2008, il sera filtre vers le bas à mon DataContext, ou dois-je quelque chose configure aussi?

Merci pour toute aide

Truegilly

Était-ce utile?

La solution 3

ok ici est comment faire si le vôtre est désactivé ou que vous avez besoin de restaurer une sauvegarde, qui semble le désactiver.

il suffit d'exécuter ce script, il va tuer tout le processus est qu'une base de données utilise (pourquoi vous Carnt en 2008 de tuer manuellement processus contrairement à 2005 est au-delà de moi) puis définissez le courtier

USE master
go

DECLARE @dbname sysname

SET @dbname = 'YourDBName'

DECLARE @spid int
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname)
WHILE @spid IS NOT NULL
BEGIN
EXECUTE ('KILL ' + @spid)
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid
END


ALTER DATABASE @dbname SET ENABLE_BROKER

Autres conseils

En cas quelqu'un d'autre est à la recherche d'une solution à ce problème, la commande suivante fonctionnait très bien pour moi. Il libère toutes les autres connexions à la base de données au lieu d'attendre.

ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE

Dans Sql Server 2012, vous pouvez aller à Properties-> Options -> Service Broker

Activer le service Broker

Toutes les connexions à la base de données doit être supprimée et compte utilisateur avec les permissions utilisées pour activer le service de courtier.

Ce qui suit serait idéal (remplacer databasename):

     IF ((SELECT is_broker_enabled FROM sys.databases WHERE name = '%DATABASE_NAME%') = 1)
      BEGIN
        ALTER DATABASE %DATABASE_NAME% SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
     END

    ALTER DATABASE %DATABASE_NAME% SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;

Aussi je suggère la création d'un nouveau rôle et le compte utilisateur avec les autorisations appropriées (remplacer la connexion de base de données):

  --DBA creates a new role 
   if not exists (select 1 from sys.database_principals where name='sql_dependency_subscriber' and Type = 'R')
  begin
   EXEC sp_addrole 'sql_dependency_subscriber' 
  end

  --Minimum Required  Permissions needed for SQLDependancy Notification to work
   GRANT CREATE PROCEDURE to sql_dependency_subscriber;
   GRANT CREATE QUEUE to sql_dependency_subscriber; 
   GRANT CREATE SERVICE to sql_dependency_subscriber;
   GRANT REFERENCES on CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] to sql_dependency_subscriber ;
   GRANT VIEW DEFINITION TO sql_dependency_subscriber;

  --Minimum Required  Permissions  needed for SQLDependaney Notification to work
   GRANT SELECT to sql_dependency_subscriber;
   GRANT SUBSCRIBE QUERY NOTIFICATIONS TO sql_dependency_subscriber;
   GRANT RECEIVE ON QueryNotificationErrorsQueue TO sql_dependency_subscriber;
   GRANT REFERENCES on CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] to sql_dependency_subscriber ;
   EXEC sp_addrolemember 'sql_dependency_subscriber', '%DATABASE_LOGIN%';
   EXEC sp_addrolemember 'sql_dependency_subscriber', 'sqldp';
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top