Как соотнести активность Blazor для данной схемы или «сеанса» - PullRequest
1 голос
/ 06 января 2020

Предположим, у вас есть простое серверное приложение Blazor, содержащее одну веб-страницу с одной кнопкой, например:

@page "/counter"

<h1>Counter</h1>

<p>Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private async Task IncrementCount()
    {
        currentCount++;
    }
}

Каждый раз, когда пользователь GUEST нажимает одну кнопку, другой поток обрабатывает запрос.

Существует ли один идентификатор схемы Блазора или "сеанса", который позволил бы некоторую корреляцию описанной активности?

1 Ответ

0 голосов
/ 09 марта 2020

Я исследовал проблему и создал образец для серверной части Blazor: https://github.com/akovac35/Logging.Samples

Основные моменты следующие:

  1. Для для данной схемы Blazor будет один HttpContext, который может предоставить HttpContext.TraceIdentifier или HttpContext.RequestServices , через который может быть введен пользовательский поставщик корреляции,
  2. для конкретного На странице Blazor мы получаем доступ к HttpContext, вводя IHttpContextAccessor или создавая new HttpContextAccessor(). Получив доступ к HttpContext, мы можем получить TraceIdentifier или поставщика корреляции. Это значение одинаково во всем приложении для заданной схемы Blazor. * В контексте журнала
  3. всегда должен быть получен TraceIdentifier или поставщик корреляции через HttpContextAccessor, экземпляр которого можно создать вне ASP. NET Промежуточное ПО ядра,
  4. Объединение пунктов 2 и 3, приведенных выше, позволяет нам коррелировать активность цепи Blazor (пользовательская "сессия").

Следующий отрывок журнала показывает, как во время одной и той же цепочки действий изменяется с 8 на 10, пока значение корреляции fe515ed1-d387-4b95-aef2-79eccc978017 остается неизменным. Таким образом, мы можем быстро выявить реальную проблему, запросив значение корреляции у пользователя и проверив журналы на случай ошибки в приложении.

[21:40:10.495 +01:00] VRB 8 fe515ed1-d387-4b95-aef2-79eccc978017 <WebApp.Pages.Counter:IncrementCount:25> Entering 
[21:40:10.509 +01:00] INF 8 fe515ed1-d387-4b95-aef2-79eccc978017 <WebApp.Pages.Counter:IncrementCount:28> currentCount: 2 
[21:40:10.595 +01:00] VRB 8 fe515ed1-d387-4b95-aef2-79eccc978017 <Shared.Mocks.BusinessLogicMock`1:FirstLevelAsync:41> Entering: 500 
[21:40:10.691 +01:00] VRB 8 fe515ed1-d387-4b95-aef2-79eccc978017 <Shared.Mocks.BusinessLogicMock`1:SecondLevelAsync:51> Entering: 500 
[21:40:10.776 +01:00] VRB 8 fe515ed1-d387-4b95-aef2-79eccc978017 <Shared.Mocks.BusinessLogicMock`1:ThirdLevelAsync:61> Entering: 500 
[21:40:11.362 +01:00] VRB 10 fe515ed1-d387-4b95-aef2-79eccc978017 <Shared.Mocks.BusinessLogicMock`1:ThirdLevelAsync:65> Exiting: 500 
[21:40:11.378 +01:00] VRB 10 fe515ed1-d387-4b95-aef2-79eccc978017 <Shared.Mocks.BusinessLogicMock`1:SecondLevelAsync:55> Exiting: 500 
[21:40:11.396 +01:00] VRB 10 fe515ed1-d387-4b95-aef2-79eccc978017 <Shared.Mocks.BusinessLogicMock`1:FirstLevelAsync:45> Exiting: 500 
[21:40:11.490 +01:00] VRB 10 fe515ed1-d387-4b95-aef2-79eccc978017 <WebApp.Pages.Counter:IncrementCount:34> Exiting 
...