示例#1
0
        private void Apply(IOwinConfiguration configuration)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            Configure(configurer =>
            {
                configurer.Http.IncludeErrorDetailPolicy = _errorDetailPolicy;

                if (!_allowCaching)
                {
                    configurer.Http.MessageHandlers.Add(new NoCachingHandler());
                }

                if (!_allowHttpFormatter)
                {
                    configurer.Http.Formatters.Remove(configurer.Http.Formatters.XmlFormatter);
                }
            });

            foreach (Action <IOwinConfiguration> configurer in _configurers)
            {
                configurer(configuration);
            }
        }
 public static IAppBuilder UsePlatibusMiddleware(this IAppBuilder app, IOwinConfiguration configuration)
 {
     if (app == null)
     {
         throw new ArgumentNullException(nameof(app));
     }
     return(app.UsePlatibusMiddlewareAsync(configuration).GetResultFromCompletionSource());
 }
示例#3
0
        private ResourceTypeDictionaryRouter InitResourceRouter(IOwinConfiguration configuration, HttpTransportService transportService)
        {
            var authorizationService        = configuration.AuthorizationService;
            var subscriptionTrackingService = configuration.SubscriptionTrackingService;

            return(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) },
            });
        }
示例#4
0
        private void Configure(IOwinConfiguration owin)
        {
            if (owin == null)
            {
                throw new ArgumentNullException(nameof(owin));
            }

            owin.Http.Routes.IgnoreRoute("signalR", "signalr/{*pathInfo}");

            IDependencyResolver resolver =
                GlobalHost.DependencyResolver =
                    new CustomResolver(GlobalHost.DependencyResolver, owin.Kernel);

            var hubConfiguration = new HubConfiguration
            {
                Resolver                = resolver,
                EnableDetailedErrors    = _enableDetailedErrors,
                EnableJavaScriptProxies = _enableJavaScriptProxies,
                EnableJSONP             = _enableJSONP
            };

            resolver.Register(typeof(IAssemblyLocator), () => new CustomAssemblyLocator(_assemblies));
            resolver.Register(typeof(IHubActivator), () => new CustomHubActivator(resolver));
            resolver.Register(typeof(IHubDescriptorProvider), () => new CustomHubDescriptorProvider(resolver, owin.Kernel.Resolve <IHubsProvider>()));

            IHubPipeline hubPipeline = resolver.Resolve <IHubPipeline>();

            foreach (var pipelineModule in owin.Kernel.ResolveAll <IHubPipelineModule>())
            {
                hubPipeline.AddModule(pipelineModule);
            }

            owin.App.Map(_path, subApp =>
            {
                _onMap?.Invoke(subApp);

                subApp.RunSignalR(hubConfiguration);
            });

            // TODO: Look at the possibility to add custom trace sources programatically
            // https://msdn.microsoft.com/en-us/library/ms228984(v=vs.110).aspx

            if (!_skipTraceConfiguration)
            {
                ITraceManager traceManager = resolver.Resolve <ITraceManager>();
                traceManager.Switch.Level = _traceLevel;
            }
        }
        private static async Task <IAppBuilder> UsePlatibusMiddlewareAsync(this IAppBuilder app,
                                                                           IOwinConfiguration configuration)
        {
            var baseUri = configuration.BaseUri;
            var subscriptionTrackingService = configuration.SubscriptionTrackingService;
            var messageQueueingService      = configuration.MessageQueueingService;

            var transportServiceOptions = new HttpTransportServiceOptions(baseUri, messageQueueingService, subscriptionTrackingService)
            {
                DiagnosticService = configuration.DiagnosticService,
                Endpoints         = configuration.Endpoints,
                MessageJournal    = configuration.MessageJournal,
                BypassTransportLocalDestination = configuration.BypassTransportLocalDestination
            };

            var transportService = new HttpTransportService(transportServiceOptions);
            var bus = new Bus(configuration, baseUri, transportService, messageQueueingService);

            await transportService.Init();

            await bus.Init();

            var middleware = new PlatibusMiddleware(configuration, bus, transportService);

            var appProperties = new AppProperties(app.Properties);

            appProperties = appProperties.Set("platibus.Bus", bus);
            appProperties.OnAppDisposing.Register(() =>
            {
                middleware.Dispose();
                transportService.Dispose();
                bus.Dispose();
                (messageQueueingService as IDisposable)?.Dispose();
                (subscriptionTrackingService as IDisposable)?.Dispose();
            });

            return(app.Use(middleware.Invoke));
        }
示例#6
0
 public PlatibusMiddleware(IOwinConfiguration configuration, IBus bus, HttpTransportService transportService)
 {
     Configuration   = configuration ?? throw new ArgumentNullException(nameof(bus));
     Bus             = bus ?? throw new ArgumentNullException(nameof(bus));
     _resourceRouter = InitResourceRouter(Configuration, transportService);
 }