Пример #1
0
        public IServiceHubLifetimeManager Create(string hubName)
        {
            switch (_options.ServiceTransportType)
            {
            case ServiceTransportType.Persistent:
            {
                var container         = _serviceProvider.GetRequiredService <IServiceConnectionContainer>();
                var connectionManager = new ServiceConnectionManager <Hub>();
                connectionManager.SetServiceConnection(container);
                return(ActivatorUtilities.CreateInstance <WebSocketsHubLifetimeManager <Hub> >(_serviceProvider, connectionManager));
            }

            case ServiceTransportType.Transient:
            {
                var restHubProtocol           = _serviceProvider.GetService <IRestHubProtocol>();
                var payloadSerializerSettings = _options.JsonSerializerSettings;
                //Currently RestHubProtocol only has Newtonsoft
                if (restHubProtocol != null)
                {
                    var newtonsoftServiceHubProtocolOptions = _serviceProvider.GetService <IOptions <NewtonsoftServiceHubProtocolOptions> >();
                    payloadSerializerSettings = newtonsoftServiceHubProtocolOptions.Value.PayloadSerializerSettings;
                }
                var httpClientFactory = _serviceProvider.GetRequiredService <IHttpClientFactory>();
                var restClient        = new RestClient(httpClientFactory, payloadSerializerSettings, _options.EnableMessageTracing);
                return(new RestHubLifetimeManager(hubName, new ServiceEndpoint(_options.ConnectionString), _options.ProductInfo, _options.ApplicationName, restClient));
            }

            default: throw new InvalidEnumArgumentException(nameof(ServiceManagerOptions.ServiceTransportType), (int)_options.ServiceTransportType, typeof(ServiceTransportType));
            }
        }
        public async void ServiceLifetimeManagerIntegrationTest(string methodName, Type messageType)
        {
            var proxy = new ServiceConnectionProxy();

            var serviceConnectionManager = new ServiceConnectionManager <TestHub>();

            serviceConnectionManager.SetServiceConnection(proxy.ServiceConnectionContainer);

            var serviceLifetimeManager = new ServiceLifetimeManager <TestHub>(serviceConnectionManager,
                                                                              proxy.ClientConnectionManager, HubProtocolResolver, Logger, Marker, _globalHubOptions, _localHubOptions);

            var serverTask = proxy.WaitForServerConnectionAsync(1);

            _ = proxy.StartAsync();
            await proxy.WaitForServerConnectionsInited().OrTimeout();

            await serverTask.OrTimeout();

            var task = proxy.WaitForApplicationMessageAsync(messageType);

            var invokeTask = InvokeMethod(serviceLifetimeManager, methodName);

            if (typeof(IAckableMessage).IsAssignableFrom(messageType))
            {
                await proxy.WriteMessageAsync(new AckMessage(1, (int)AckStatus.Ok));
            }

            // Need to return in time, or it indicate a timeout when sending ack-able messages.
            await invokeTask.OrTimeout();

            var message = await task.OrTimeout();

            VerifyServiceMessage(methodName, message);
        }
Пример #3
0
        public async void ServiceLifetimeManagerIntegrationTest(string methodName, Type messageType)
        {
            var proxy = new ServiceConnectionProxy();

            var serviceConnectionManager = new ServiceConnectionManager <TestHub>();

            serviceConnectionManager.SetServiceConnection(proxy.ServiceConnectionContainer);

            var serviceLifetimeManager = new ServiceLifetimeManager <TestHub>(serviceConnectionManager,
                                                                              proxy.ClientConnectionManager, HubProtocolResolver, Logger, Marker);

            var serverTask = proxy.WaitForServerConnectionAsync(1);

            _ = proxy.StartAsync();
            await proxy.WaitForServerConnectionsInited().OrTimeout();

            await serverTask.OrTimeout();

            var task = proxy.WaitForApplicationMessageAsync(messageType);

            await InvokeMethod(serviceLifetimeManager, methodName);

            var message = await task.OrTimeout();

            VerifyServiceMessage(methodName, message);
        }
        public IServiceHubLifetimeManager Create(string hubName)
        {
            switch (_options.ServiceTransportType)
            {
            case ServiceTransportType.Persistent:
            {
                var container         = _serviceProvider.GetRequiredService <IServiceConnectionContainer>();
                var connectionManager = new ServiceConnectionManager <Hub>();
                connectionManager.SetServiceConnection(container);
                return(ActivatorUtilities.CreateInstance <WebSocketsHubLifetimeManager <Hub> >(_serviceProvider, connectionManager));
            }

            case ServiceTransportType.Transient:
            {
                return(new RestHubLifetimeManager(hubName, new ServiceEndpoint(_options.ConnectionString), _options.ProductInfo, _options.ApplicationName, _options.JsonSerializerSettings));
            }

            default: throw new InvalidEnumArgumentException(nameof(ServiceManagerOptions.ServiceTransportType), (int)_options.ServiceTransportType, typeof(ServiceTransportType));
            }
        }
Пример #5
0
        public async Task <IServiceHubLifetimeManager> CreateAsync(string hubName, CancellationToken cancellationToken, ILoggerFactory loggerFactoryPerHub = null)
        {
            switch (_context.ServiceTransportType)
            {
            case ServiceTransportType.Persistent:
            {
                var container         = _connectionContainerFactory.Create(hubName, loggerFactoryPerHub);
                var connectionManager = new ServiceConnectionManager <Hub>();
                connectionManager.SetServiceConnection(container);
                _ = connectionManager.StartAsync();
                await container.ConnectionInitializedTask.OrTimeout(cancellationToken);

                return(loggerFactoryPerHub == null?ActivatorUtilities.CreateInstance <WebSocketsHubLifetimeManager <Hub> >(_serviceProvider, connectionManager) : ActivatorUtilities.CreateInstance <WebSocketsHubLifetimeManager <Hub> >(_serviceProvider, connectionManager, loggerFactoryPerHub));
            }

            case ServiceTransportType.Transient:
            {
                return(new RestHubLifetimeManager(hubName, _context.ServiceEndpoints.Single(), _context.ProductInfo, _context.ApplicationName));
            }

            default: throw new InvalidEnumArgumentException(nameof(ContextOptions.ServiceTransportType), (int)_context.ServiceTransportType, typeof(ServiceTransportType));
            }
        }