Pregunta

estoy integrando SqlCacheDependency para su uso en mi DataContext LinqToSql.

Estoy utilizando una clase de extensión para querys Linq encontrar aquí - http://code.msdn.microsoft. com / linqtosqlcache

He cableado el código y cuando abro la página que conseguir esta excepción -

"El Service Broker de SQL Server para la base de datos actual no está activado, y como resultado, no se admiten las notificaciones de consulta. Por favor, activa el Service Broker para esta base de datos si desea utilizar las notificaciones."

su procedentes de este evento en el Global.asax

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

    }

mi pregunta es ...

  1. ¿Cómo activo Service Broker en mi servidor de base de datos SQL 2008? He tratado de ejecutar esta consulta .. ALTER DATABASE SET nombredetabla ENABLE_BROKER pero nunca extremos y corre para siempre, tengo que parar manualmente.

  2. Una vez que tengo este conjunto en el servidor SQL 2008, va a filtrarse a mi DataContext, o tengo necesidad de configurar algo allí también?

gracias por cualquier ayuda

Truegilly

¿Fue útil?

Solución 3

bien aquí es cómo hacer esto si el suyo es discapacitado o tiene que restaurar una copia de seguridad, lo que parece para desactivarlo.

basta con ejecutar este script, que matará a todo el proceso es que una base de datos está utilizando (por la que en 2008 carnt matar manualmente proceso de diferencia de 2005 es más allá de mí) y luego ponga el corredor

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

Otros consejos

En cualquier caso más está buscando una solución a este problema, el siguiente comando funcionó muy bien para mí. Libera todas las otras conexiones a la base de datos en lugar de espera.

ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE

En SQL Server 2012 se puede ir a Properties-> Options -> Service Broker

Habilitar el servicio Broker

Todas las conexiones a la base de datos debe ser dado de baja y la cuenta de usuario con permisos usados ??para habilitar el servicio intermediario.

La siguiente sería ideal (sustituir 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;

También se sugiere la creación de un nuevo papel y la cuenta de usuario con los permisos adecuados (sustituir inicio de sesión de base de datos):

  --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';
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top