예제 #1
0
        internal static InternalConnectivityMode GetInternalConnectivityMode(ConnectivitySettings connectivitySettings, HttpConnectivitySettings httpConnectivitySettings, Uri uri)
        {
            if (connectivitySettings == null && httpConnectivitySettings == null && ServiceBusEnvironment.SystemConnectivity.Mode == ConnectivityMode.AutoDetect && ConnectivityModeHelper.OverrideInternalConnectivityMode.HasValue)
            {
                return(ConnectivityModeHelper.OverrideInternalConnectivityMode.Value);
            }
            ConnectivityMode connectivityMode = (connectivitySettings != null ? connectivitySettings.Mode : ServiceBusEnvironment.SystemConnectivity.Mode);

            return(ConnectivityModeHelper.GetInternalConnectivityMode(connectivityMode, (httpConnectivitySettings != null ? httpConnectivitySettings.Mode : HttpConnectivityMode.AutoDetect), uri));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="IdentifiedFeatureViewModel"/> class.
 /// </summary>
 public IdentifiedFeatureViewModel(Feature feature, ConnectivityMode connectivityMode)
 {
     if (feature != null)
     {
         Feature          = feature;
         FeatureTable     = feature.FeatureTable as ArcGISFeatureTable;
         PopupManager     = new PopupManager(new Popup(feature, FeatureTable.PopupDefinition));
         ConnectivityMode = connectivityMode;
     }
 }
예제 #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="IdentifiedFeatureViewModel"/> class.
 /// </summary>
 public IdentifiedFeatureViewModel(Feature feature, FeatureTable featureTable, ConnectivityMode connectivityMode)
 {
     if (feature != null)
     {
         Feature          = feature;
         PopupManager     = new PopupManager(new Popup(feature, featureTable.PopupDefinition));
         Fields           = FieldContainer.GetFields(PopupManager);
         FeatureTable     = featureTable;
         ConnectivityMode = connectivityMode;
     }
 }
        public SbmpMessagingFactory(IEnumerable <Uri> baseAddresses, NetMessagingTransportSettings settings)
        {
            bool             flag;
            ConnectivityMode systemConnectivityMode = ConnectivityModeHelper.SystemConnectivityMode;

            this.connectionId = Guid.NewGuid().ToString("N");
            this.Settings     = (NetMessagingTransportSettings)settings.Clone();
            if (systemConnectivityMode == ConnectivityMode.AutoDetect && !this.Settings.GatewayMode)
            {
                this.baseAddresses      = new List <Uri>(baseAddresses);
                this.FirstInBaseAddress = this.baseAddresses.First <Uri>();
                return;
            }
            flag = (systemConnectivityMode != ConnectivityMode.Http ? false : true);
            this.Initialize(flag, baseAddresses);
        }
        public static IRelayedOnewaySender CreateConnection(BindingContext context, RelayedOnewayTransportBindingElement transportBindingElement, Uri uri)
        {
            ConnectivitySettings connectivitySetting = context.BindingParameters.Find <ConnectivitySettings>();
            NameSettings         nameSetting         = context.BindingParameters.Find <NameSettings>();
            ConnectivityMode     connectivityMode    = (connectivitySetting != null ? connectivitySetting.Mode : ConnectivityModeHelper.SystemConnectivityMode);

            if (connectivityMode == ConnectivityMode.AutoDetect)
            {
                connectivityMode = NetworkDetector.DetectConnectivityModeForAutoDetect(uri);
            }
            if (connectivityMode != ConnectivityMode.Tcp)
            {
                return(new RelayedOnewayHttpSender(context, uri, nameSetting.ServiceSettings.TransportProtection == RelayTransportProtectionMode.EndToEnd));
            }
            return(new RelayedOnewayTcpSender(context, transportBindingElement, uri, nameSetting.ServiceSettings.TransportProtection == RelayTransportProtectionMode.EndToEnd, new EventTraceActivity()));
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="MapViewModel"/> class.
        /// </summary>
        public MapViewModel(Map map, ConnectivityMode connectivityMode, int defaultZoomScale)
        {
            ConnectivityMode  = connectivityMode;
            _defaultZoomScale = defaultZoomScale;

            // Initialize the map
            Map = map;

            Map.LoadStatusChanged += Map_LoadStatusChanged;
            Map.LoadAsync();

            // Initialize the location data source for device location
            LocationDataSource = new SystemLocationDataSource();
            LocationDataSource.LocationChanged += (s, l) =>
            {
                _lastLocation     = l;
                IsLocationStarted = true;
            };
        }
예제 #7
0
        static void ConfigureWcfSendCommand(CommandLineApplication wcfCommand)
        {
            wcfCommand.RelayCommand("send", (sendCmd) =>
            {
                sendCmd.Description          = "WcfRelay send command";
                var pathArgument             = sendCmd.Argument("path", "WcfRelay path");
                var connectionStringArgument = sendCmd.Argument("connectionString", "Relay ConnectionString");

                var numberOption           = sendCmd.Option(CommandStrings.NumberTemplate, CommandStrings.NumberDescription, CommandOptionType.SingleValue);
                var bindingOption          = sendCmd.Option(BindingOptionTemplate, BindingOptionDescription, CommandOptionType.SingleValue);
                var noClientAuthOption     = sendCmd.Option("--no-client-auth", "Skip client authentication", CommandOptionType.NoValue);
                var connectivityModeOption = sendCmd.Option(CommandStrings.ConnectivityModeTemplate, CommandStrings.ConnectivityModeDescription, CommandOptionType.SingleValue);
                var requestOption          = sendCmd.Option(CommandStrings.RequestTemplate, CommandStrings.RequestDescription, CommandOptionType.SingleValue);
                var requestDelayOption     = sendCmd.Option("-rd|--request-delay <delay>", "A TimeSpan indicating how long the listener should delay before responding to request", CommandOptionType.SingleValue);
                var openTimeoutOption      = sendCmd.Option("-ot|--open-timeout <timeout>", "A TimeSpan for configuring the Binding.OpenTimeout", CommandOptionType.SingleValue);
                var sendTimeoutOption      = sendCmd.Option("-st|--send-timeout <timeout>", "A TimeSpan for configuring the Binding.SendTimeout", CommandOptionType.SingleValue);
                var readTimeoutOption      = sendCmd.Option("-rt|--receive-timeout <timeout>", "A TimeSpan for configuring the Binding.ReceiveTimeout", CommandOptionType.SingleValue);
                var protocolOption         = sendCmd.AddSecurityProtocolOption();

                sendCmd.OnExecute(() =>
                {
                    ConfigureSecurityProtocol(protocolOption);

                    string connectionString = ConnectionStringUtility.ResolveConnectionString(connectionStringArgument);
                    string path             = pathArgument.Value ?? DefaultPath;
                    string request          = GetStringOption(requestOption, "Test Message Data");
                    if (string.IsNullOrEmpty(connectionString))
                    {
                        TraceMissingArgument(connectionStringArgument.Name);
                        sendCmd.ShowHelp();
                        return(1);
                    }

                    int number = GetIntOption(numberOption, 1);
                    var connectionStringBuilder       = new ServiceBusConnectionStringBuilder(connectionString);
                    Binding binding                   = GetBinding(bindingOption, noClientAuthOption, openTimeoutOption, sendTimeoutOption, readTimeoutOption);
                    ConnectivityMode connectivityMode = GetConnectivityMode(connectivityModeOption);
                    TimeSpan requestDelay             = requestDelayOption.HasValue() ? TimeSpan.Parse(requestDelayOption.Value()) : TimeSpan.Zero;
                    return(VerifySend(request, connectionStringBuilder, path, number, binding, noClientAuthOption.HasValue(), connectivityMode, requestDelay));
                });
            });
        }
예제 #8
0
 private static InternalConnectivityMode GetInternalConnectivityMode(ConnectivityMode detectMode, HttpConnectivityMode defaultHttpDetectMode, Uri uri)
 {
     if (detectMode == ConnectivityMode.Tcp)
     {
         return(InternalConnectivityMode.Tcp);
     }
     if (detectMode != ConnectivityMode.Http || defaultHttpDetectMode == HttpConnectivityMode.AutoDetect)
     {
         if (detectMode != ConnectivityMode.AutoDetect)
         {
             return(NetworkDetector.DetectInternalConnectivityModeForHttp(uri));
         }
         return(NetworkDetector.DetectInternalConnectivityModeForAutoDetect(uri));
     }
     if (defaultHttpDetectMode == HttpConnectivityMode.Http)
     {
         return(InternalConnectivityMode.Http);
     }
     if (defaultHttpDetectMode == HttpConnectivityMode.Https)
     {
         return(InternalConnectivityMode.Https);
     }
     return(InternalConnectivityMode.HttpsWebSocket);
 }
예제 #9
0
            protected override IEnumerator <IteratorTask <object> .TaskStep> GetTasks()
            {
                ConnectivityMode connectivityMode;
                object           obj  = null;
                bool             flag = false;

                try
                {
                    object thisLock = this.relay.ThisLock;
                    object obj1     = thisLock;
                    obj = thisLock;
                    Monitor.Enter(obj1, ref flag);
                    if (this.relay.State != AmqpObjectState.OpenReceived && this.relay.State != AmqpObjectState.Opened)
                    {
                        goto Label0;
                    }
                }
                finally
                {
                    if (flag)
                    {
                        Monitor.Exit(obj);
                    }
                }
                Microsoft.ServiceBus.Common.TimeoutHelper timeoutHelper = new Microsoft.ServiceBus.Common.TimeoutHelper(this.timeout);
                string       host        = this.relay.serviceBusUri.Host;
                AmqpSettings amqpSetting = AmqpRelay.ConnectTask.CreateAmqpSettings();

                connectivityMode = (this.relay.connectivitySettings != null ? this.relay.connectivitySettings.Mode : ServiceBusEnvironment.SystemConnectivity.Mode);
                ConnectivityMode connectivityMode1 = connectivityMode;

                if (connectivityMode1 == ConnectivityMode.Tcp)
                {
                    TcpTransportSettings tcpTransportSetting = new TcpTransportSettings()
                    {
                        Host = host,
                        Port = 5671
                    };
                    TlsTransportSettings tlsTransportSetting = new TlsTransportSettings(tcpTransportSetting)
                    {
                        TargetHost = host
                    };
                    AmqpTransportInitiator amqpTransportInitiator = new AmqpTransportInitiator(amqpSetting, tlsTransportSetting);
                    yield return(base.CallTask(amqpTransportInitiator.ConnectTaskAsync(timeoutHelper.RemainingTime()), IteratorTask <TResult> .ExceptionPolicy.Transfer));
                }
                else if (connectivityMode1 == ConnectivityMode.Http || this.relay.httpConnectivitySettings != null)
                {
                    WebSocketTransportSettings webSocketTransportSetting = new WebSocketTransportSettings(this.relay.serviceBusUri);
                    AmqpTransportInitiator     amqpTransportInitiator1   = new AmqpTransportInitiator(amqpSetting, webSocketTransportSetting);
                    yield return(base.CallTask(amqpTransportInitiator1.ConnectTaskAsync(timeoutHelper.RemainingTime()), IteratorTask <TResult> .ExceptionPolicy.Transfer));
                }
                else
                {
                    TcpTransportSettings tcpTransportSetting1 = new TcpTransportSettings()
                    {
                        Host = host,
                        Port = 5671
                    };
                    TlsTransportSettings tlsTransportSetting1 = new TlsTransportSettings(tcpTransportSetting1)
                    {
                        TargetHost = host
                    };
                    AmqpTransportInitiator amqpTransportInitiator2 = new AmqpTransportInitiator(amqpSetting, tlsTransportSetting1);
                    yield return(base.CallTask(amqpTransportInitiator2.ConnectTaskAsync(Microsoft.ServiceBus.Common.TimeoutHelper.Divide(timeoutHelper.RemainingTime(), 2)), IteratorTask <TResult> .ExceptionPolicy.Continue));

                    if (base.LastTask.Exception != null)
                    {
                        if (timeoutHelper.RemainingTime() == TimeSpan.Zero)
                        {
                            throw base.LastTask.Exception;
                        }
                        WebSocketTransportSettings webSocketTransportSetting1 = new WebSocketTransportSettings(this.relay.serviceBusUri);
                        AmqpTransportInitiator     amqpTransportInitiator3    = new AmqpTransportInitiator(amqpSetting, webSocketTransportSetting1);
                        yield return(base.CallTask(amqpTransportInitiator3.ConnectTaskAsync(timeoutHelper.RemainingTime()), IteratorTask <TResult> .ExceptionPolicy.Transfer));
                    }
                }
                TransportBase transportBase = base.LastTaskResult <TransportBase>();

                string[] strArrays = host.Split(new char[] { '.' });
                strArrays[0] = string.Concat(strArrays[0], "-relay");
                AmqpConnectionSettings amqpConnectionSetting = new AmqpConnectionSettings()
                {
                    ContainerId = Guid.NewGuid().ToString(),
                    HostName    = string.Join(".", strArrays)
                };

                this.relay.connection = new AmqpConnection(transportBase, amqpSetting, amqpConnectionSetting);
                yield return(base.CallTask(this.relay.connection.OpenAsync(timeoutHelper.RemainingTime()), IteratorTask <TResult> .ExceptionPolicy.Transfer));

                AmqpSessionSettings amqpSessionSetting = new AmqpSessionSettings();
                AmqpSession         amqpSession        = this.relay.connection.CreateSession(amqpSessionSetting);

                yield return(base.CallTask(amqpSession.OpenAsync(timeoutHelper.RemainingTime()), IteratorTask <TResult> .ExceptionPolicy.Transfer));

                AmqpLinkSettings amqpLinkSetting = new AmqpLinkSettings()
                {
                    Role = new bool?(false),
                    InitialDeliveryCount = new uint?(0),
                    LinkName             = string.Concat("HttpRelayServer_Link_", Guid.NewGuid()),
                    Target          = new Target(this.relay.serviceBusUri),
                    Source          = new Source(this.relay.serviceBusUri),
                    TotalLinkCredit = 1000,
                    AutoSendFlow    = true
                };
                AmqpLinkSettings amqpLinkSetting1 = amqpLinkSetting;

                if (this.relay.tokenRenewer != null)
                {
                    amqpLinkSetting1.AddProperty(AmqpConstants.SimpleWebTokenPropertyName, this.relay.tokenRenewer.CurrentToken.Token);
                }
                if (!this.relay.TransportSecurityRequired)
                {
                    amqpLinkSetting1.AddProperty(ClientConstants.TransportSecurityRequiredName, false);
                }
                if (!this.relay.RelayClientAuthorizationRequired)
                {
                    amqpLinkSetting1.AddProperty(ClientConstants.ClientAuthenticationRequiredName, false);
                }
                if (this.relay.PublishToRegistry)
                {
                    amqpLinkSetting1.AddProperty(ClientConstants.RequiresPublicRegistry, true);
                }
                if (!string.IsNullOrEmpty(this.relay.ClientAgent))
                {
                    amqpLinkSetting1.AddProperty(ClientConstants.ClientAgent, this.relay.ClientAgent);
                }
                if (!string.IsNullOrEmpty(this.relay.DisplayName))
                {
                    amqpLinkSetting1.AddProperty(ClientConstants.DisplayName, this.relay.DisplayName);
                }
                amqpLinkSetting1.AddProperty(ClientConstants.DynamicRelay, this.relay.IsDynamic);
                amqpLinkSetting1.AddProperty(ClientConstants.ListenerTypeName, this.relay.ListenerType.ToString());
                this.relay.link = new DuplexAmqpLink(amqpSession, amqpLinkSetting1);
                yield return(base.CallTask(this.relay.link.OpenAsync(timeoutHelper.RemainingTime()), IteratorTask <TResult> .ExceptionPolicy.Transfer));

                this.relay.link.SafeAddClosed(this.relay.onAmqpObjectClosed);
                this.relay.link.RegisterMessageListener((AmqpMessage msg) => this.relay.messageListener(this.relay.link, msg));
                this.relay.OnOnline();
Label0:
                yield break;
            }
예제 #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DestinationRelationshipViewModel"/> class.
 /// </summary>
 public DestinationRelationshipViewModel(RelationshipInfo relationshipInfo, ArcGISFeatureTable relatedTable, ConnectivityMode connectivityMode)
 {
     RelationshipInfo = relationshipInfo;
     FeatureTable     = relatedTable;
     ConnectivityMode = connectivityMode;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="DestinationRelationshipViewModel"/> class.
 /// </summary>
 public OriginRelationshipViewModel(RelationshipInfo relationshipInfo, ConnectivityMode connectivityMode)
 {
     RelationshipInfo = relationshipInfo;
     ConnectivityMode = connectivityMode;
 }
예제 #12
0
 public NetEventRelayGatewayOperationServer(string serviceNamespace, string issuerName, string issuerKey, string servicePath, ConnectivityMode onewayConnectivityMode, Type serviceType, bool usePassword)
     : base(serviceNamespace, issuerName, issuerKey, servicePath, onewayConnectivityMode, serviceType, usePassword)
 {
 }
        /// <summary>
        /// Connectivity mode used by Azure Service Bus.
        /// <remarks>Default is ConnectivityMode.Tcp</remarks>
        /// </summary>
        public static void ConnectivityMode(this TransportExtensions <AzureServiceBusTransport> transportExtensions, ConnectivityMode connectivityMode)
        {
            var settings = transportExtensions.GetSettings();

            settings.Set(WellKnownConfigurationKeys.Connectivity.ConnectivityMode, connectivityMode);
        }
 public ConnectivityConfig(ConnectivityMode algorithmType)
 {
     this.algorithmType = algorithmType;
     Directed           = algorithmType == ConnectivityMode.StronglyConnectedComponents;
 }
예제 #15
0
 public EditViewModel(ConnectivityMode connectivityMode)
 {
     ConnectivityMode = connectivityMode;
 }
예제 #16
0
        public static int VerifyListen(string connectionString, string path, Binding binding, ConnectivityMode connectivityMode, string response, ServiceThrottlingBehavior throttlingBehavior)
        {
            RelayTraceSource.TraceInfo($"Open relay listener using {binding.GetType().Name}, ConnectivityMode.{connectivityMode}...");
            ServiceHost serviceHost = null;

            try
            {
                var connectionStringBuilder = new ServiceBusConnectionStringBuilder(connectionString);
                var tp = TokenProvider.CreateSharedAccessSignatureTokenProvider(connectionStringBuilder.SharedAccessKeyName, connectionStringBuilder.SharedAccessKey);

                string relayNamespace = connectionStringBuilder.Endpoints.First().Host;
                ServiceBusEnvironment.SystemConnectivity.Mode = connectivityMode;
                EchoService.DefaultResponse = response;
                if (!(binding is WebHttpRelayBinding))
                {
                    serviceHost = new ServiceHost(typeof(EchoService));
                }
                else
                {
                    serviceHost = new WebServiceHost(typeof(EchoService));
                }

                Type            contractType       = IsOneWay(binding) ? typeof(ITestOneway) : typeof(IEcho);
                ServiceEndpoint endpoint           = serviceHost.AddServiceEndpoint(contractType, binding, new Uri($"{binding.Scheme}://{relayNamespace}/{path}"));
                var             listenerActivityId = Guid.NewGuid();
                RelayTraceSource.TraceVerbose($"Listener ActivityId:{listenerActivityId}");
                endpoint.EndpointBehaviors.Add(new TransportClientEndpointBehavior(tp)
                {
                    ActivityId = listenerActivityId
                });
                serviceHost.Description.Behaviors.Add(throttlingBehavior);

                // Trace status changes
                var connectionStatus = new ConnectionStatusBehavior();
                connectionStatus.Connecting += (s, e) => RelayTraceSource.TraceException(connectionStatus.LastError, TraceEventType.Warning, "Relay listener Re-Connecting");
                connectionStatus.Online     += (s, e) => RelayTraceSource.Instance.TraceEvent(TraceEventType.Information, (int)ConsoleColor.Green, "Relay Listener is online");
                EventHandler offlineHandler = (s, e) => RelayTraceSource.TraceException(connectionStatus.LastError, "Relay Listener is OFFLINE");
                connectionStatus.Offline += offlineHandler;
                endpoint.EndpointBehaviors.Add(connectionStatus);
                serviceHost.Faulted += (s, e) => RelayTraceSource.TraceException(connectionStatus.LastError, "Relay listener ServiceHost Faulted");

                serviceHost.Open();
                RelayTraceSource.TraceInfo("Relay listener \"" + endpoint.Address.Uri + "\" is open");
                RelayTraceSource.TraceInfo("Press <ENTER> to close the listener ");
                Console.ReadLine();

                RelayTraceSource.TraceInfo("Closing Connection...");
                connectionStatus.Offline -= offlineHandler; // Avoid a spurious trace on expected shutdown.
                serviceHost.Close();
                RelayTraceSource.TraceInfo("Closed");
                return(0);
            }
            catch (Exception)
            {
                serviceHost?.Abort();
                throw;
            }
        }
예제 #17
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DestinationRelationshipViewModel"/> class.
 /// </summary>
 public OriginRelationshipViewModel(ArcGISFeatureTable relatedTable, ConnectivityMode connectivityMode)
 {
     RelatedTable     = relatedTable;
     ConnectivityMode = connectivityMode;
 }
        private void InitBindingInCode(string solutionName, string solutionPassword, string servicePath, ConnectivityMode onewayConnectivityMode, Type serviceType)
        {
            //ServiceBusEnvironment.OnewayConnectivity.Mode = onewayConnectivityMode;



            Uri address = ServiceBusEnvironment.CreateServiceUri("sb", solutionName, servicePath);

            ServiceUri = address.ToString();
            Host       = new ServiceHost(serviceType, address);

            ContractDescription contractDescription = ContractDescription.GetContract(typeof(IOnewayEnergyServiceOperations), typeof(OnewayEnergyServiceOperations));
            ServiceEndpoint     serviceEndPoint     = new ServiceEndpoint(contractDescription);

            serviceEndPoint.Address = new EndpointAddress(ServiceUri);
            serviceEndPoint.Binding = new NetOnewayRelayBinding();

            TransportClientEndpointBehavior behavior = ServiceBusHelper.GetUsernamePasswordBehavior(solutionName, solutionPassword);

            serviceEndPoint.Behaviors.Add(behavior);
            Host.Description.Endpoints.Add(serviceEndPoint);

            ServiceRegistrySettings settings = new ServiceRegistrySettings();

            settings.DiscoveryMode = DiscoveryType.Public;
            settings.DisplayName   = address.ToString();
            foreach (ServiceEndpoint se in Host.Description.Endpoints)
            {
                se.Behaviors.Add(settings);
            }

            Host.Open();
        }
        //typeof(OnewayEnergyServiceOperations)
        private void InitService(string serviceNamespace, string issuerName, string issuerKey, string servicePath, ConnectivityMode onewayConnectivityMode, Type serviceType, bool usePassword)
        {
            ServiceBusEnvironment.SystemConnectivity.Mode = onewayConnectivityMode;

            // Host = new ServiceHost(serviceType, address);
            Host = new ServiceHost(serviceType);
            if (usePassword)
            {
                TransportClientEndpointBehavior behavior = ServiceBusHelper.GetUsernamePasswordBehavior(issuerName, issuerKey);
                Host.Description.Endpoints[0].Behaviors.Add(behavior);
            }

            ServiceUri = Host.Description.Endpoints[0].ListenUri.ToString();
            ServiceRegistrySettings settings = new ServiceRegistrySettings();

            settings.DiscoveryMode = DiscoveryType.Public;
            settings.DisplayName   = ServiceUri;
            foreach (ServiceEndpoint se in Host.Description.Endpoints)
            {
                se.Behaviors.Add(settings);
            }


            Host.Open();
        }
 public NetOnewayEnergyServiceOperationsServer(string serviceNamespace, string issuerName, string issuerKey, string servicePath, ConnectivityMode onewayConnectivityMode, Type serviceType, bool usePassword)
 {
     InitService(serviceNamespace, issuerName, issuerKey, servicePath, onewayConnectivityMode, serviceType, usePassword);
 }
예제 #21
0
        public static int VerifySend(
            string request, ServiceBusConnectionStringBuilder connectionString, string path, int number, Binding binding, bool noClientAuth, ConnectivityMode connectivityMode, TimeSpan requestDelay)
        {
            RelayTraceSource.TraceInfo($"Send to relay listener using {binding.GetType().Name}, ConnectivityMode.{connectivityMode}...");
            string relayNamespace = connectionString.Endpoints.First().Host;
            string keyName        = connectionString.SharedAccessKeyName;
            string keyValue       = connectionString.SharedAccessKey;

            if (IsOneWay(binding))
            {
                return(VerifySendCore <ITestOnewayClient>(request, relayNamespace, path, number, binding, noClientAuth, connectivityMode, keyName, keyValue, requestDelay));
            }
            else
            {
                return(VerifySendCore <IEchoClient>(request, relayNamespace, path, number, binding, noClientAuth, connectivityMode, keyName, keyValue, requestDelay));
            }
        }
예제 #22
0
        static int VerifySendCore <TChannel>(
            string request, string relayNamespace, string path, int number, Binding binding, bool noClientAuth, ConnectivityMode connectivityMode, string keyName, string keyValue, TimeSpan requestDelay)
            where TChannel : class, IClientChannel
        {
            ChannelFactory <TChannel> channelFactory = null;
            TChannel channel = null;

            try
            {
                ServiceBusEnvironment.SystemConnectivity.Mode = connectivityMode;
                Uri address = new Uri($"{binding.Scheme}://{relayNamespace}/{path}");
                if (binding is WebHttpRelayBinding)
                {
                    channelFactory = new WebChannelFactory <TChannel>(binding, address);
                }
                else
                {
                    channelFactory = new ChannelFactory <TChannel>(binding, new EndpointAddress(address));
                }

                var tp = TokenProvider.CreateSharedAccessSignatureTokenProvider(keyName, keyValue);
                if (!noClientAuth)
                {
                    channelFactory.Endpoint.EndpointBehaviors.Add(new TransportClientEndpointBehavior(tp));
                }

                RelayTraceSource.TraceVerbose("Sender opening channel factory");
                var stopwatch = new Stopwatch();
                stopwatch.Restart();
                channelFactory.Open();
                RelayTraceSource.TraceVerbose($"Sender opened channel factory in {stopwatch.ElapsedMilliseconds} ms");

                channel = channelFactory.CreateChannel();
                RelayTraceSource.TraceInfo("Sender opening channel");
                using (new OperationContextScope(channel))
                {
                    Guid trackingId = Guid.NewGuid();
                    RelayTraceSource.TraceVerbose($"Channel TrackingId:{trackingId}");
                    if (binding.MessageVersion.Addressing != AddressingVersion.None)
                    {
                        OperationContext.Current.OutgoingMessageHeaders.MessageId = new UniqueId(trackingId);
                    }

                    stopwatch.Restart();
                    channel.Open();
                    RelayTraceSource.TraceVerbose($"Sender opened channel in {stopwatch.ElapsedMilliseconds} ms");
                    RelayTraceSource.TraceVerbose($"Channel SessionId:{channel.SessionId}");
                }

                for (int i = 0; i < number; i++)
                {
                    using (new OperationContextScope(channel))
                    {
                        var messageId = Guid.NewGuid();
                        RelayTraceSource.TraceVerbose($"Sending MessageId:{messageId}");
                        if (binding.MessageVersion.Addressing != AddressingVersion.None)
                        {
                            OperationContext.Current.OutgoingMessageHeaders.MessageId = new UniqueId(messageId);
                        }

                        stopwatch.Restart();
                        if (channel is IEchoClient echoChannel)
                        {
                            string response = echoChannel.Echo(DateTime.UtcNow, request, requestDelay);
                            RelayTraceSource.TraceInfo($"Sender received response: {response} ({stopwatch.ElapsedMilliseconds} ms)");
                        }
                        else if (channel is ITestOnewayClient onewayClient)
                        {
                            onewayClient.Operation(DateTime.UtcNow, request);
                            RelayTraceSource.TraceInfo($"Sender sent oneway request: {request} ({stopwatch.ElapsedMilliseconds} ms)");
                        }
                        else
                        {
                            throw new NotSupportedException($"Contract {typeof(TChannel)} is not supported");
                        }
                    }
                }

                RelayTraceSource.TraceInfo("Sender closing channel");
                stopwatch.Restart();
                channel.Close();
                RelayTraceSource.TraceVerbose($"Sender closed channel in {stopwatch.ElapsedMilliseconds} ms");
                channel = null;

                RelayTraceSource.TraceVerbose("Sender closing channel factory");
                stopwatch.Restart();
                channelFactory.Close();
                RelayTraceSource.TraceVerbose($"Sender closed channel factory in {stopwatch.ElapsedMilliseconds} ms");
                channelFactory = null;

                return(0);
            }
            finally
            {
                channel?.Abort();
                channelFactory?.Abort();
            }
        }