Асинхронный запуск OWIN (с использованием Hangfire)

Я использую Hangfire с хранилищем SQL на удаленном сервере SQL и запускаю его вместе с моим существующим сайтом MVC. Мой класс запуска очень прост:

public void Configuration(IAppBuilder app) 
{
        app.UseHangfire(config =>
        {
            config.UseSqlServerStorage("MY_CONNECTION_STRING");
            config.UseServer();
        });
}

Проблема в том, что любая задержка в подключении к удаленному серверу задерживает запуск моего сайта MVC. Есть ли способ запустить OWIN асинхронно, чтобы проект мог отвечать на запросы независимо от того, что происходит во время запуска OWIN, включая фатальные ошибки?


person DuncanMack    schedule 09.02.2015    source источник


Ответы (1)


Логика инициализации Hangfire выполняется в выделенном потоке, чтобы сократить время запуска вашего приложения. Итак, метод UseServer создает только новый поток, без какой-либо дополнительной логики.

Метод UseSqlServerStorage подключается к вашей базе данных, чтобы проверить вашу текущую схему для запуска автоматических миграций, если это необходимо (один простой запрос к таблице Hangfire.Schema). Это поведение по умолчанию, однако вы можете отключить его:

var options = new SqlServerStorageOptions
{
    PrepareSchemaIfNecessary = false
};

var storage = new SqlServerStorage("<name or connection string>", options);

После выполнения этого шага Hangfire не будет подключаться к вашей базе данных при запуске (и никакой другой класс этого делать не будет). Но следите за примечаниями к выпуску, они будут содержать информацию об изменениях в хранилище базы данных.

person odinserj    schedule 10.02.2015