如何关联给定电路或“会话”的Blazor活动

问题描述 投票:0回答:1

假设您有一个简单的服务器端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用户每次单击一个按钮时,将由另一个线程处理请求。

是否有Blazor电路或“会话”的单个标识符,该标识符允许所描述活动的某种相关性?

asp.net-core blazor-server-side
1个回答
0
投票

我已经研究了问题,并为服务器端Blazor创建了示例:https://github.com/akovac35/LoggingSamples

要点如下:

  1. 对于给定的Blazor电路,将有一个HttpContext可以提供可注入自定义相关提供程序的HttpContext.TraceIdentifierHttpContext.RequestServices
  2. 在特定的Blazor页面上,我们通过注入IHttpContextAccessor或实例化new HttpContextAccessor()来访问HttpContext。一旦可以访问HttpContext,就可以获取TraceIdentifier或相关提供程序。对于给定的Blazor电路,该值在应用程序中是相同的,
  3. 日志上下文应始终通过HttpContextAccessor获取TraceIdentifier或相关提供程序,该上下文可以在ASP.NET Core中间件外部实例化,
  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 
© www.soinside.com 2019 - 2024. All rights reserved.