Как использовать хранилище Miniprofiler для поддержки нескольких веб-экземпляров?

Я подключил Miniprofiler к своему локальному проекту ASP.NET Core, и он работает должным образом. Теперь мне нужно, чтобы он работал в размещенной среде, где есть несколько экземпляров одного и того же веб-сайта и нет прикрепленных сеансов. Насколько я понимаю, это должно поддерживаться, если вы просто установите параметр хранилища при настройке профилировщика. Однако настройка хранилища, похоже, ничего не дает. Я инициализирую хранилище так:

var redisConnection = "...";
MiniProfiler.DefaultOptions.Storage = new RedisStorage(redisConnection);
app.UseMiniProfiler();

После этого я ожидал, что смогу открыть профилированную страницу, и результат будет добавлен в мой кеш Redis. Тогда я бы также ожидал, что новый экземпляр моего веб-сайта будет содержать исходный результат профилирования. Однако при создании новых результатов профиля в кэш ничего не записывается.

Чтобы проверить соединение, я попытался вручную сохранить экземпляр профилировщика (storage.Save()), и он будет сохранен в хранилище. Но опять же, сохраненный результат не загружается при отображении результатов профилировщика (и, тем не менее, ни один из примеров, которые я видел, не требует от вас этого). У меня такое чувство, что я упустил какой-то момент в том, как должно работать хранилище.


person Morten Christiansen    schedule 22.08.2019    source источник


Ответы (1)


Оказывается, мое предположение о том, что будет использоваться MiniProfiler.DefaultOptions.Storage, было неверным. После изменения моего установочного кода на следующий, он работает.

// Startup.cs ConfigureServices
var redisConnection = "...";
services.AddMiniProfiler(o =>
{
    o.RouteBasePath = "/profiler";
    o.Storage = new RedisStorage(redisConnection); // This is new
});

// Startup.cs Configure
app.UseMiniProfiler();
person Morten Christiansen    schedule 02.09.2019