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