Получить имя метода для выполнения при использовании сервисной фабрики ServiceRemoting - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь сделать запись в журнале 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

У меня есть службы без сохранения состояния, если это будет иметь значение.

Любойпомощь очень ценится

...