Home > Software design >  why cannot get outgoing response from application insights dependency telemetry?
why cannot get outgoing response from application insights dependency telemetry?

Time:01-19

I use below code to get the outgoing request/response from telemetry initializer in my Asp.Net Core service:

    public void Initialize(ITelemetry telemetry)
    {
        if (telemetry is DependencyTelemetry)
        {
            var dependencyTelemetry = telemetry as DependencyTelemetry;

            if (dependencyTelemetry.TryGetOperationDetail("HttpRequest", out var request))
            {
                var httpRequest = request as HttpRequestMessage;
            }

            if (dependencyTelemetry.TryGetOperationDetail("HttpResponse", out var response))
            {
                var httpResponse = response as HttpResponseMessage;
            }
        }
    }

I can get request successfully with above code, but the response from TryGetOperationDetail is always null. Anything wrong in my code?

CodePudding user response:

For me, This code recorded all the headers sent to dependency and also response have been tracked.

public void Initialize(ITelemetry telemetry)
    {
        var dependecyTelemetry = telemetry as DependencyTelemetry;
        if (dependecyTelemetry == null) return;

        if (dependecyTelemetry.TryGetOperationDetail("HttpRequest", out object request)
            && request is HttpRequestMessage httpRequest)
        {
            foreach (var item in httpRequest.Headers)
            {
                if (!dependecyTelemetry.Properties.ContainsKey(item.Key))
                    dependecyTelemetry.Properties.Add(item.Key, string.Join(Environment.NewLine, item.Value));
            }
        }
        if (dependecyTelemetry.TryGetOperationDetail("HttpResponse", out object response)
            && response is HttpResponseMessage httpResponse)
        {
            var responseBody = httpResponse.Content.ReadAsStringAsync().GetAwaiter().GetResult();
            if (!string.IsNullOrEmpty(responseBody))
                dependecyTelemetry.Properties.Add("ResponseBody", responseBody);
        }
    }

For further reference on telemetry refer this site

  •  Tags:  
  • Related