コード例 #1
0
        /// <inheritdoc />
        /// <summary>
        /// Initializes a new <see cref="T:Platibus.IIS.PlatibusHttpHandler" /> with the configuration that will
        /// eventually be returned by the supplied <paramref name="configuration" /> task.
        /// </summary>
        /// <param name="configuration">A task whose result is the configuration to use for this
        /// handler</param>
        public PlatibusHttpHandler(IIISConfiguration configuration)
        {
            _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
            var managedBus = BusManager.SingletonInstance.GetManagedBus(_configuration);

            Bus             = managedBus.Bus;
            _resourceRouter = InitResourceRouter(_configuration, managedBus.TransportService);
        }
コード例 #2
0
        /// <inheritdoc />
        /// <summary>
        /// Initializes a new <see cref="T:Platibus.IIS.PlatibusHttpHandler" /> with the configuration that will
        /// eventually be returned by the supplied <paramref name="configuration" /> task.
        /// </summary>
        /// <param name="configuration">A task whose result is the configuration to use for this
        /// handler</param>
        public PlatibusHttpHandler(Task <IIISConfiguration> configuration)
            : this(configuration?.GetResultFromCompletionSource())
        {
            _configuration = configuration?.GetResultFromCompletionSource() ?? throw new ArgumentNullException(nameof(configuration));
            var managedBus = BusManager.SingletonInstance.GetManagedBus(_configuration);

            Bus             = managedBus.Bus;
            _resourceRouter = InitResourceRouter(_configuration, managedBus.TransportService);
        }
コード例 #3
0
        /// <inheritdoc />
        /// <summary>
        /// Inititializes a new <see cref="T:Platibus.IIS.PlatibusHttpHandler" /> with the specified
        /// <paramref name="bus" /> and <paramref name="configuration" />
        /// </summary>
        /// <param name="configuration">The bus configuration</param>
        /// <param name="bus">The initialized bus instance</param>
        /// <param name="transportService"></param>
        /// <remarks>
        /// Used internally by <see cref="T:Platibus.IIS.PlatibusHttpModule" />.  This method bypasses the
        /// configuration cache and singleton diagnostic service and metrics collector.
        /// </remarks>
        internal PlatibusHttpHandler(IIISConfiguration configuration, IBus bus, HttpTransportService transportService)
        {
            _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
            Bus            = bus ?? throw new ArgumentNullException(nameof(bus));
            if (transportService == null)
            {
                throw new ArgumentNullException(nameof(transportService));
            }

            BaseUri         = configuration.BaseUri;
            _resourceRouter = InitResourceRouter(configuration, transportService);
        }
コード例 #4
0
        private HttpServer(IHttpServerConfiguration configuration)
        {
            _baseUri = configuration.BaseUri;

            _metricsCollector  = new HttpMetricsCollector();
            _diagnosticService = configuration.DiagnosticService;
            _diagnosticService.AddSink(_metricsCollector);

            _subscriptionTrackingService = configuration.SubscriptionTrackingService;
            _messageQueueingService      = configuration.MessageQueueingService;
            _messageJournal = configuration.MessageJournal;

            var transportServiceOptions = new HttpTransportServiceOptions(_baseUri, _messageQueueingService, _subscriptionTrackingService)
            {
                DiagnosticService = configuration.DiagnosticService,
                Endpoints         = configuration.Endpoints,
                MessageJournal    = configuration.MessageJournal,
                BypassTransportLocalDestination = configuration.BypassTransportLocalDestination
            };

            TransportService = new HttpTransportService(transportServiceOptions);

            _bus = new Bus(configuration, _baseUri, TransportService, _messageQueueingService);

            var authorizationService = configuration.AuthorizationService;

            _resourceRouter = new ResourceTypeDictionaryRouter(configuration.BaseUri)
            {
                { "message", new MessageController(TransportService.ReceiveMessage, authorizationService) },
                { "topic", new TopicController(_subscriptionTrackingService, configuration.Topics, authorizationService) },
                { "journal", new JournalController(configuration.MessageJournal, configuration.AuthorizationService) },
                { "metrics", new MetricsController(_metricsCollector) }
            };
            _httpListener = InitHttpListener(_baseUri, configuration.AuthenticationSchemes);

            var acceptBlockOptions = new ExecutionDataflowBlockOptions
            {
                CancellationToken = _cancellationTokenSource.Token
            };

            if (configuration.ConcurrencyLimit > 0)
            {
                acceptBlockOptions.MaxDegreeOfParallelism = configuration.ConcurrencyLimit;
            }

            _acceptBlock = new ActionBlock <HttpListenerContext>(async ctx => await Accept(ctx), acceptBlockOptions);
        }
コード例 #5
0
ファイル: BusManager.cs プロジェクト: tdbrian/Platibus
 private async Task Init(CancellationToken cancellationToken = default(CancellationToken))
 {
     _configuration = await IISConfigurationManager.LoadConfiguration();
     _baseUri = _configuration.BaseUri;
     _subscriptionTrackingService = _configuration.SubscriptionTrackingService;
     _messageQueueingService = _configuration.MessageQueueingService;
     _messageJournalingService = _configuration.MessageJournalingService;
     var endpoints = _configuration.Endpoints;
     _transportService = new HttpTransportService(_baseUri, endpoints, _messageQueueingService, _messageJournalingService, _subscriptionTrackingService);
     _bus = new Bus(_configuration, _baseUri, _transportService, _messageQueueingService);
     await _transportService.Init(cancellationToken);
     await _bus.Init(cancellationToken);
     _resourceRouter = new ResourceTypeDictionaryRouter
     {
         {"message", new MessageController(_bus.HandleMessage)},
         {"topic", new TopicController(_subscriptionTrackingService, _configuration.Topics)}
     };
 }
コード例 #6
0
ファイル: HttpServer.cs プロジェクト: tdbrian/Platibus
        private HttpServer(IHttpServerConfiguration configuration)
        {
            _baseUri = configuration.BaseUri;
            _subscriptionTrackingService = configuration.SubscriptionTrackingService;
            _messageQueueingService = configuration.MessageQueueingService;
            _messageJournalingService = configuration.MessageJournalingService;
            var endpoints = configuration.Endpoints;
            _transportService = new HttpTransportService(_baseUri, endpoints, _messageQueueingService, _messageJournalingService, _subscriptionTrackingService);
            _bus = new Bus(configuration, _baseUri, _transportService, _messageQueueingService);

            _resourceRouter = new ResourceTypeDictionaryRouter
            {
                {"message", new MessageController(_bus.HandleMessage)},
                {"topic", new TopicController(_subscriptionTrackingService, configuration.Topics)}
            };
            _httpListener = InitHttpListener(_baseUri, configuration.AuthenticationSchemes);
        }
コード例 #7
0
 public PlatibusMiddleware(RequestDelegate next, IHttpResourceRouter resourceRouter, IDiagnosticService diagnosticService)
 {
     _next = next;
     _diagnosticService = diagnosticService ?? DiagnosticService.DefaultInstance;
     _resourceRouter    = resourceRouter ?? throw new ArgumentNullException(nameof(resourceRouter));
 }