Я работаю над настройкой распределенной трассировки для своего приложения. Одно из подключений в приложении — это подключение WebSocket с использованием SignalR. Оба конца подключения SignalR являются основными приложениями asp.net. Один из них является службой Windows (клиент), а другой работает под управлением веб-сервера (сервер).
Связь будет исходить из обоих направлений, поэтому у меня будут идентификаторы TraceId, исходящие из запросов с обеих сторон соединения. Есть ли в SignalR средство для передачи этой информации о трассировке туда и обратно? Я искал повсюду, и почти нет информации о том, что SignalR поддерживает контексты трассировки W3C или даже пользовательскую реализованную систему трассировки, такую как .net core до 2.0.
Я попытался создать новую активность при выполнении запроса на стороне сервера, но я не думаю, что какая-либо информация о трассировке поступает к клиенту. Возможно, я ищу не в том месте, но когда я проверяю System.Diagnostics.Activity.CurrentActivity
на клиенте, я получаю только null
, хотя на сервере у меня была следующая активность во время звонка.
System.Diagnostics.Activity.Current
{System.Diagnostics.Activity}
ActivityTraceFlags: None
Baggage: {System.Collections.Generic.KeyValuePair<string, string>[0]}
Context: {System.Diagnostics.ActivityContext}
DisplayName: "Microsoft.AspNetCore.Hosting.HttpRequestIn"
Duration: {00:00:00}
Events: {System.Diagnostics.ActivityEvent[0]}
Id: "00-eb7a4125a171a6438a44ddda5a637cd0-f7c16b0bb8512443-00"
IdFormat: W3C
IsAllDataRequested: true
Kind: Internal
Links: {System.Diagnostics.ActivityLink[0]}
OperationName: "Microsoft.AspNetCore.Hosting.HttpRequestIn"
Parent: null
ParentId: null
ParentSpanId: {0000000000000000}
Recorded: false
RootId: "eb7a4125a171a6438a44ddda5a637cd0"
Source: {System.Diagnostics.ActivitySource}
SpanId: {f7c16b0bb8512443}
StartTimeUtc: {7/13/2021 11:26:13 PM}
TagObjects: {System.Collections.Generic.KeyValuePair<string, object>[0]}
Tags: {System.Collections.Generic.KeyValuePair<string, string>[0]}
TraceId: {eb7a4125a171a6438a44ddda5a637cd0}
TraceStateString: null
Я надеюсь, что кто-то там может пролить свет на это.
Спасибо!
-=-=-=-= Редактировать -=-=-=-=
Похоже, что по крайней мере некоторый уровень трассировки контекста W3C поддерживается SignalR при размещении в приложении Blazor. Не знаю, что с этим делать. https://github.com/dotnet/aspnetcore/issues/29846