Я пытаюсь сделать запись в журнале Application Insights, и я бы хотел регистрировать каждый вызов зависимости.
Я делаю это на основе следующего ответа SO о том, как установить значения заголовка: link
В методе RequestResponseAsync я создаю свой объект DependencyTelemetry и могу войти в системууслуга, на которую направляется вызов, продолжительность и т. д. Однако я также хотел бы иметь возможность установить имя метода, который вызывается внутри службы, но я не могу найти его где-либо.Мы говорим о WebApi для вызовов службы SF и службы SF для вызовов службы SF.
Может кто-нибудь сообщить, если я нахожусь на правильном пути, или я должен переопределить какой-то другой метод.
Вот мой пользовательский код, основанный на ранее связанном ответе SO:
public async Task<IServiceRemotingResponseMessage>
RequestResponseAsync(IServiceRemotingRequestMessage requestMessage)
{
var correlationId = SetCorrelationId(requestMessage);
IServiceRemotingResponseMessage response = null;
var startTime = DateTime.UtcNow;
var timer = Stopwatch.StartNew();
try
{
response = await _inner.RequestResponseAsync(requestMessage);
timer.Stop();
return response;
}
finally
{
CreateDependencyTelemetry(correlationId, _inner.ResolvedServicePartition.ServiceName.AbsoluteUri, startTime, timer.Elapsed, response != null, _inner.ResolvedServicePartition.ServiceName.AbsoluteUri, response == null ? "400" : "200");
}
}
private static string SetCorrelationId(IServiceRemotingRequestMessage requestMessage)
{
string correlationId;
if (Activity.Current != null)
correlationId = Activity.Current.RootId;
else
correlationId = (string)CallContext.GetData(Constants.CorrelationId);
requestMessage.GetHeader().AddHeader(Constants.CorrelationId, Encoding.ASCII.GetBytes(correlationId));
return correlationId;
}
private void CreateDependencyTelemetry(string correlationId,string target, DateTime startTime, TimeSpan duration, bool success, string name, string resultCode = "200")
{
var dependencyTelemetry = new DependencyTelemetry();
dependencyTelemetry.Context.Operation.Id = correlationId;
dependencyTelemetry.Type = "ServiceFabricServiceRemoting";
dependencyTelemetry.ResultCode = resultCode; //TODO: Create better result codes?
dependencyTelemetry.Name = name; //TODO: Provide specific method name
dependencyTelemetry.Success = success;
dependencyTelemetry.Duration = duration;
dependencyTelemetry.Timestamp = startTime;
dependencyTelemetry.Target = target;
_telemetryClient.TrackDependency(dependencyTelemetry);
}
Это создает журналы отслеживания зависимостей, в которых имя зависимости выглядит следующим образом: fabric: / ProjectName / ServiceName
И мне бы хотелось, чтобы это выглядело так: fabric: / ProjectName / Servicename / ServiceMethodName
У меня есть службы без сохранения состояния, если это будет иметь значение.
Любойпомощь очень ценится