Объединительная плата 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.