Заявление об ошибке сервера SQL Azure «RECEIVE MSG» не поддерживается в этой версии SQL Server.

Я использовал SQLdependency с SignalR для отображения предупреждений пользователям. Код выглядит следующим образом:

public IEnumerable<AlertInfo> GetData(long UserId)
{
    using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["yafnet"].ConnectionString))
    {
        connection.Open();
        using (SqlCommand command = new SqlCommand(@"SELECT [AlertID],[AlertNote],[AlertDetails],[AlertDate],[Location]
      FROM [dbo].[Alerts] where [UserID]=" + UserId + " AND [IsViewed]=0", connection))
        {
            // Make sure the command object does not already have
            // a notification object associated with it.
            command.Notification = null;
            SqlDependency.Stop(ConfigurationManager.ConnectionStrings["yafnet"].ConnectionString);
            SqlDependency.Start(ConfigurationManager.ConnectionStrings["yafnet"].ConnectionString);

            SqlDependency dependency = new SqlDependency(command);
            dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

            if (connection.State == ConnectionState.Closed)
                connection.Open();

            using (var reader = command.ExecuteReader())
                return reader.Cast<IDataRecord>()
                    .Select(x => new AlertInfo()
                    {
                        AlertID = x.GetInt64(0),
                        AlertNote = x.GetString(1),
                        AlertDetails = x.GetString(2),
                        AlertDate = x.GetDateTime(3),
                        Location = x.GetString(4)
                    }).ToList();
        }
    }
}

Он отлично работает на локальном хосте. Но после загрузки на сервер Azure этот метод выдает следующую ошибку:

Сообщение":"Произошла ошибка.","ExceptionMessage":"Утверждение 'RECEIVE MSG' не поддерживается в этой версии SQL Server.","ExceptionType":"System.Data.SqlClient.SqlException","StackTrace" :" \r\nТрассировка стека сервера: \r\n at System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое значение breakConnection, Action`1 wrapCloseInAction)

В чем может быть проблема?


person Sandip Khillare    schedule 13.11.2015    source источник


Ответы (1)


На самом деле ваша база данных SQL Server должна иметь is_broker_enabled = 1. Вам нужно проверить, включен он или нет.

Чтобы убедиться в этом, используйте команду SELECT name, is_broker_enabled FROM sys.databases. Если ваша база данных показывает результат «1», все в порядке, а если «0», то вы должны включить ее с помощью этой команды ALTER DATABASE yourdb SET ENABLE_BROKER.

Но плохая новость заключается в том, что база данных Azure SQL показывает, что она включена, но больше не поддерживает is_broker_enabled.

Для этого вам необходимо установить полный экземпляр SQL Server на виртуальную машину Azure.

person Abdul Razique    schedule 22.10.2017