public void BehaviorAddsCustomBinding() { using (var host = new HostingContext <SimpleService, ISimpleService>()) { var binding = new NetTcpBinding(); var configuration = new TelemetryConfiguration(); var factory = new ChannelFactory <ISimpleService>(binding, host.GetServiceAddress()); ISimpleService channel = null; try { var behavior = new ClientTelemetryEndpointBehavior(configuration); factory.Endpoint.EndpointBehaviors.Add(behavior); channel = factory.CreateChannel(); var innerChannel = GetInnerChannel(channel); ((IClientChannel)channel).Close(); factory.Close(); Assert.IsInstanceOfType(innerChannel, typeof(ClientTelemetryChannelBase), "Telemetry channel is missing"); } catch { factory.Abort(); if (channel != null) { ((IClientChannel)channel).Abort(); } throw; } } }
public void RequestReply_TelemetryIsWritten() { TestTelemetryChannel.Clear(); using (var host = new HostingContext <SimpleService, ISimpleService>()) { host.Open(); var binding = new NetTcpBinding(); var configuration = new TelemetryConfiguration(); var factory = new ChannelFactory <ISimpleService>(binding, host.GetServiceAddress()); ISimpleService channel = null; try { var behavior = new ClientTelemetryEndpointBehavior(configuration); factory.Endpoint.EndpointBehaviors.Add(behavior); channel = factory.CreateChannel(); channel.GetSimpleData(); ((IClientChannel)channel).Close(); factory.Close(); Assert.IsTrue(TestTelemetryChannel.CollectedData().Count > 0, "No telemetry events written"); } catch { if (channel != null) { ((IClientChannel)channel).Abort(); } factory.Abort(); throw; } } }
private void AddBehaviorIfNotPresent(ServiceEndpoint endpoint) { if (endpoint.Behaviors.OfType <ClientTelemetryEndpointBehavior>().Any()) { // don't add behavior if it's already been added by user code // or the configuration return; } var behavior = new ClientTelemetryEndpointBehavior(this.trackingModule.TelemetryClient) { RootOperationIdHeaderName = this.trackingModule.RootOperationIdHeaderName, ParentOperationIdHeaderName = this.trackingModule.ParentOperationIdHeaderName, SoapRootOperationIdHeaderName = this.trackingModule.SoapRootOperationIdHeaderName, SoapParentOperationIdHeaderName = this.trackingModule.SoapParentOperationIdHeaderName, SoapHeaderNamespace = this.trackingModule.SoapHeaderNamespace }; endpoint.Behaviors.Add(behavior); }
public void BehaviorCreatesCustomBindingWithTimeouts() { var binding = new NetTcpBinding() { OpenTimeout = new TimeSpan(1, 0, 0), SendTimeout = new TimeSpan(2, 0, 0), ReceiveTimeout = new TimeSpan(3, 0, 0), CloseTimeout = new TimeSpan(4, 0, 0) }; var contract = ContractBuilder.CreateDescription(typeof(ISimpleService), typeof(SimpleService)); var ep = new ServiceEndpoint(contract, binding, new EndpointAddress("net.tcp://localhost:8765")); IEndpointBehavior behavior = new ClientTelemetryEndpointBehavior(); behavior.AddBindingParameters(ep, new BindingParameterCollection()); Assert.AreEqual(binding.OpenTimeout, ep.Binding.OpenTimeout); Assert.AreEqual(binding.SendTimeout, ep.Binding.SendTimeout); Assert.AreEqual(binding.ReceiveTimeout, ep.Binding.ReceiveTimeout); Assert.AreEqual(binding.CloseTimeout, ep.Binding.CloseTimeout); }