Объединительная плата SignalR SQL не запускается на этапе подготовки

Через 3 дня эта проблема у меня в голове.

SignalR не создает свою схему и таблицы SQL объединительной платы в моей среде pre-prod, содержащей один сервер SQL + веб-серверы с балансировкой нагрузки.

Я проверил

  • WebSockets установлены в IIS
  • Доступ к БД позволяет создавать таблицы и схемы
  • .Net 4.5 установлен и используется
  • Рекомендуемые обновления установлены
  • Перечисленные здесь шаги завершены (за исключением развертывания из Visual Studio - я использую MSBUILD для упаковки, а затем использую WebDeploy)

Я поддержал трассировку SignalR. Только мои записи трассировки написаны - ничего от SignalR.

Все работает (включая трассировку) в моей среде разработки, если я работаю в режиме выпуска.

Вот мой процесс запуска с улучшенной трассировкой

//Step 1: Check tracing works
var trace = GlobalHost.TraceManager["TestTrace"];
trace.TraceInformation("Preparing to start SignalR");

//Step 2: Check DB access rights
var connectionString = ConfigurationManager.ConnectionStrings["SignalR"].ConnectionString;
var schema = Guid.NewGuid().ToString("N");
using (var sqlConn = new System.Data.SqlClient.SqlConnection(connectionString))
{
    using (var sqlCmd = new System.Data.SqlClient.SqlCommand())
    {
        sqlConn.Open();
        sqlCmd.Connection = sqlConn;
        sqlCmd.CommandText = String.Format("CREATE SCHEMA [{0}]", schema);
        sqlCmd.ExecuteNonQuery();
        sqlCmd.CommandText = String.Format("SELECT '{0}' AS [Value] INTO [{1}].[ConnectionString]", connectionString, schema);
        sqlCmd.ExecuteNonQuery();
    }
}

//Step 3: Initialise SignalR
GlobalHost.DependencyResolver.UseSqlServer(connectionString);
app.MapSignalR(); //This is meant to trigger lots of logging.

//Step 4: Confirm we've successfully passed SignalR start-up
trace.TraceInformation("Finished starting SignalR");

Любая помощь будет отличной. Приветствия.

1 ответ

Проблема заключалась не в SignalR на стороне сервера, а в процедуре запуска JavaScript на стороне клиента, которая прерывается перед подключением к SignalR Hub.

Кажется, что SignalR не начинает регистрироваться, пока не установлено первое соединение.

По какой-то причине (пока не идентифицированной) процедура запуска SignalR завершилась в среде разработки и была прервана в предсерийном коде. Возможная причина - другая последовательность событий запуска при использовании сжатого JavaScript.

Другие вопросы по тегам