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);
        }