public static void InjectTraceContextIntoHttpRequest(Trace currentTrace, System.Net.Http.HttpRequestMessage httpRequestMsg) { //Instantiate ZipkinTraceInjector which helps to transport trace context to WCF Service by injecting trace information into http Headers. ZipkinHttpTraceInjector zkTraceInjector = new ZipkinHttpTraceInjector(); //Inject trace context into Http headers before calling WCF service. zkTraceInjector.Inject(currentTrace, httpRequestMsg.Headers, (c, key, value) => c.Add(key, value)); }
private static void CheckSetHeadersThenGetTrace_NVC(long?parentSpanId) { var spanState = new SpanState(2, 1, parentSpanId, 2, isSampled: null, isDebug: false); var originalTrace = Trace.CreateFromId(spanState); var headers = new NameValueCollection(); var zipkinHttpTraceInjector = new ZipkinHttpTraceInjector(); zipkinHttpTraceInjector.Inject(originalTrace, headers); Trace deserializedTrace; var extractor = new ZipkinHttpTraceExtractor(); Assert.True(extractor.TryExtract(headers, out deserializedTrace)); Assert.AreEqual(originalTrace, deserializedTrace); }
private static void CheckSetHeadersThenGetTrace_Dict(long?parentSpanId) { var spanState = new SpanState(2, 1, parentSpanId, 2, SpanFlags.None); var originalTrace = Trace.CreateFromId(spanState); var headers = new Dictionary <string, string>(); var zipkinHttpTraceInjector = new ZipkinHttpTraceInjector(); zipkinHttpTraceInjector.Inject(originalTrace, headers); Trace deserializedTrace; var extractor = new ZipkinHttpTraceExtractor(); Assert.True(extractor.TryExtract(headers, out deserializedTrace)); Assert.AreEqual(originalTrace, deserializedTrace); }
public void GetTraceThenSetHeadersEqualsOriginal(string encodedTraceId, string encodedSpanId, string encodedParentSpanId, string flagsStr, string sampledStr, int expectedHeadersCount) { Trace parsedTrace; Assert.True(ZipkinHttpTraceExtractor.TryParseTrace(encodedTraceId, encodedSpanId, encodedParentSpanId, sampledStr, flagsStr, out parsedTrace)); var recreatedHeaders = new NameValueCollection(); var injector = new ZipkinHttpTraceInjector(); injector.Inject(parsedTrace, recreatedHeaders); Assert.AreEqual(expectedHeadersCount, recreatedHeaders.Count); Assert.AreEqual(encodedTraceId, recreatedHeaders[ZipkinHttpHeaders.TraceId]); Assert.AreEqual(encodedParentSpanId, recreatedHeaders[ZipkinHttpHeaders.ParentSpanId]); Assert.AreEqual(encodedSpanId, recreatedHeaders[ZipkinHttpHeaders.SpanId]); Assert.AreEqual(flagsStr, recreatedHeaders[ZipkinHttpHeaders.Flags]); }
/// <summary> /// 附加跟踪参数 /// </summary> /// <typeparam name="TE">需要附加的类型</typeparam> /// <param name="carrier">载体</param> /// <param name="action">附加的方式</param> public void Apply <TE>(TE carrier, Action <TE, string, string> action) { var injector = new ZipkinHttpTraceInjector(); injector.Inject(this.Trace, carrier, action); }