/// <summary>
        ///     Accepts the type which will specify the users custom configuration.
        ///     This type should implement <see cref="IConfigureThisEndpoint" />.
        /// </summary>
        /// <param name="scannableAssembliesFullName">Assemblies full name that were scanned.</param>
        /// <param name="specifier"></param>
        /// <param name="args"></param>
        /// <param name="defaultProfiles"></param>
        public GenericHost(IConfigureThisEndpoint specifier, string[] args, List <Type> defaultProfiles,
                           IEnumerable <string> scannableAssembliesFullName = null)
        {
            this.specifier = specifier;

            endpointNameToUse = specifier.GetType().Namespace ?? specifier.GetType().Assembly.GetName().Name;

            if (scannableAssembliesFullName == null || !scannableAssembliesFullName.Any())
            {
                var assemblyScanner = new AssemblyScanner();
                assemblyScanner.MustReferenceAtLeastOneAssembly.Add(typeof(IHandleMessages <>).Assembly);
                assembliesToScan = assemblyScanner
                                   .GetScannableAssemblies()
                                   .Assemblies;
            }
            else
            {
                assembliesToScan = scannableAssembliesFullName
                                   .Select(Assembly.Load)
                                   .ToList();
            }

            args = AddProfilesFromConfiguration(args);

            profileManager = new ProfileManager(assembliesToScan, args, defaultProfiles);
        }
Exemple #2
0
        /// <summary>
        ///     Accepts the type which will specify the users custom configuration.
        ///     This type should implement <see cref="IConfigureThisEndpoint" />.
        /// </summary>
        /// <param name="specifier"></param>
        /// <param name="args"></param>
        /// <param name="defaultProfiles"></param>
        /// <param name="endpointName"></param>
        /// <param name="scannableAssembliesFullName">Assemblies full name that were scanned.</param>
        public GenericHost(IConfigureThisEndpoint specifier, string[] args, List <Type> defaultProfiles,
                           string endpointName, IEnumerable <string> scannableAssembliesFullName = null)
        {
            this.specifier = specifier;

            if (String.IsNullOrEmpty(endpointName))
            {
                endpointName = specifier.GetType().Namespace ?? specifier.GetType().Assembly.GetName().Name;
            }

            Configure.GetEndpointNameAction          = () => endpointName;
            Configure.DefineEndpointVersionRetriever = () => FileVersionRetriever.GetFileVersion(specifier.GetType());

            if (scannableAssembliesFullName == null)
            {
                var assemblyScanner = new AssemblyScanner();
                assemblyScanner.MustReferenceAtLeastOneAssembly.Add(typeof(IHandleMessages <>).Assembly);
                assembliesToScan = assemblyScanner
                                   .GetScannableAssemblies()
                                   .Assemblies;
            }
            else
            {
                assembliesToScan = scannableAssembliesFullName
                                   .Select(Assembly.Load)
                                   .ToList();
            }

            profileManager = new ProfileManager(assembliesToScan, specifier, args, defaultProfiles);
            ProfileActivator.ProfileManager = profileManager;

            configManager = new ConfigManager(assembliesToScan, specifier);
            wcfManager    = new WcfManager();
            roleManager   = new RoleManager(assembliesToScan);
        }
        void IConfigureLogging.Configure(IConfigureThisEndpoint specifier)
        {
            SetLoggingLibrary.Log4Net <RollingFileAppender>(null,
                                                            a =>
            {
                a.CountDirection     = 1;
                a.DatePattern        = "yyyy-MM-dd";
                a.RollingStyle       = RollingFileAppender.RollingMode.Composite;
                a.MaxFileSize        = 1024 * 1024;
                a.MaxSizeRollBackups = 10;
                a.LockingModel       = new FileAppender.MinimalLock();
                a.StaticLogFileName  = true;
                a.File         = "logfile";
                a.AppendToFile = true;
            });

            if (GetStdHandle(STD_OUTPUT_HANDLE) == IntPtr.Zero)
            {
                return;
            }

            SetLoggingLibrary.Log4Net <ColoredConsoleAppender>(null,
                                                               a =>
            {
                LiteLoggingHandler.PrepareColors(a);
                a.Threshold = Level.Info;
            }
                                                               );
        }
Exemple #4
0
        public GenericHost(IConfigureThisEndpoint specifier, string[] args, List<Type> defaultProfiles, string endpointName, IEnumerable<string> scannableAssembliesFullName = null)
        {
            this.specifier = specifier;

            if (String.IsNullOrEmpty(endpointName))
            {
                endpointName = specifier.GetType().Namespace ?? specifier.GetType().Assembly.GetName().Name;
            }

            endpointNameToUse = endpointName;
            endpointVersionToUse = FileVersionRetriever.GetFileVersion(specifier.GetType());

            if (scannableAssembliesFullName == null || !scannableAssembliesFullName.Any())
            {
                var assemblyScanner = new AssemblyScanner();
                assemblyScanner.MustReferenceAtLeastOneAssembly.Add(typeof(IHandleMessages<>).Assembly);
                assembliesToScan = assemblyScanner
                    .GetScannableAssemblies()
                    .Assemblies;
            }
            else
            {
                assembliesToScan = scannableAssembliesFullName
                    .Select(Assembly.Load)
                    .ToList();
            }

            profileManager = new ProfileManager(assembliesToScan, args, defaultProfiles);

            wcfManager = new WcfManager();
        }
        void IConfigureLogging.Configure(IConfigureThisEndpoint specifier)
        {
            var logToConsole = GetStdHandle(STD_OUTPUT_HANDLE) != IntPtr.Zero;

            if (Log4NetConfigurator.Log4NetExists)
            {
                SetLoggingLibrary.Log4Net(null, Log4NetAppenderFactory.CreateRollingFileAppender(null, "logfile"));

                if (logToConsole)
                {
                    SetLoggingLibrary.Log4Net(null, Log4NetAppenderFactory.CreateColoredConsoleAppender("Info"));
                }
            }
            else if (NLogConfigurator.NLogExists)
            {
                const string layout = "${longdate}|${level:uppercase=true}|${logger}|${message}${onexception:${newline}${exception:format=tostring}}";

                var targets = new List <object> {
                    NLogTargetFactory.CreateRollingFileTarget("logfile", layout)
                };

                if (logToConsole)
                {
                    targets.Add(NLogTargetFactory.CreateColoredConsoleTarget(layout));
                }

                SetLoggingLibrary.NLog(null, targets.ToArray());
            }
            else
            {
                ConfigureInternalLog4Net.Production(logToConsole);
            }
        }
        /// <summary>
        ///     Accepts the type which will specify the users custom configuration.
        ///     This type should implement <see cref="IConfigureThisEndpoint" />.
        /// </summary>
        /// <param name="scannableAssembliesFullName">Assemblies full name that were scanned.</param>
        /// <param name="specifier"></param>
        /// <param name="args"></param>
        /// <param name="defaultProfiles"></param>
        public GenericHost(IConfigureThisEndpoint specifier, string[] args, List<Type> defaultProfiles,
            IEnumerable<string> scannableAssembliesFullName = null)
        {
            this.specifier = specifier;

            endpointNameToUse = specifier.GetType().Namespace ?? specifier.GetType().Assembly.GetName().Name;

            if (scannableAssembliesFullName == null || !scannableAssembliesFullName.Any())
            {
                var assemblyScanner = new AssemblyScanner();
                assemblyScanner.MustReferenceAtLeastOneAssembly.Add(typeof(IHandleMessages<>).Assembly);
                assembliesToScan = assemblyScanner
                    .GetScannableAssemblies()
                    .Assemblies;
            }
            else
            {
                assembliesToScan = scannableAssembliesFullName
                    .Select(Assembly.Load)
                    .ToList();
            }

            args = AddProfilesFromConfiguration(args);

            profileManager = new ProfileManager(assembliesToScan, args, defaultProfiles);
        }
		public static void ConfigureRole(IConfigureThisEndpoint specified)
		{
			var nameSpace = "http://plexisweb.com";

			var ns = ConfigurationManager.AppSettings["serializer.nameSpace"];

			if(!string.IsNullOrEmpty(ns))
				nameSpace = ns;

			if (specified is AsA_Service)
			{
				var uniConfig = Configure.Instance
					.XmlSerializer(nameSpace)
					.MsmqTransport()
						.IsTransactional(true)
						.IsolationLevel(IsolationLevel.ReadCommitted)
						.PurgeOnStartup(false)
					.UnicastBus()
						.ImpersonateSender(false)
						.DoNotAutoSubscribe();


				if (specified is IOrderHandlers)
					(specified as IOrderHandlers).SpecifyOrder(new Order(uniConfig));
				else
					uniConfig.LoadMessageHandlers();

			}
		}
Exemple #8
0
        public GenericHost(IConfigureThisEndpoint specifier, string[] args, List <Type> defaultProfiles, string endpointName, IEnumerable <string> scannableAssembliesFullName = null)
        {
            this.specifier = specifier;

            if (string.IsNullOrEmpty(endpointName))
            {
                endpointName = specifier.GetType().Namespace ?? specifier.GetType().Assembly.GetName().Name;
            }

            endpointNameToUse = endpointName;
            List <Assembly> assembliesToScan;

            if (scannableAssembliesFullName == null || !scannableAssembliesFullName.Any())
            {
                var assemblyScanner = new AssemblyScanner();
                assembliesToScan = assemblyScanner
                                   .GetScannableAssemblies()
                                   .Assemblies;
            }
            else
            {
                assembliesToScan = scannableAssembliesFullName
                                   .Select(Assembly.Load)
                                   .ToList();
            }

            profileManager = new ProfileManager(assembliesToScan, args, defaultProfiles);
        }
Exemple #9
0
        /// <summary>
        /// Checks if the specifier contains a given role and uses it to configure the UnicastBus appropriately.
        /// </summary>
        /// <param name="specifier"></param>
        public void ConfigureBusForEndpoint(IConfigureThisEndpoint specifier)
        {
            ConfigUnicastBus config = null;

            foreach (var role in availableRoles)
            {
                var roleType = role.Key;
                if (!roleType.IsAssignableFrom(specifier.GetType()))
                {
                    continue;
                }

                if (config != null)
                {
                    throw new InvalidOperationException("Endpoints can only have one role");
                }

                //apply role
                var roleConfigurer = Activator.CreateInstance(role.Value) as IConfigureRole;

                config = roleConfigurer.ConfigureRole(specifier);
                Logger.Info("Role " + roleType + " configured");
                foreach (var markerProfile in GetMarkerRoles(specifier.GetType(), roleType))
                {
                    Logger.Info("Role " + markerProfile + " is marked.");
                }
            }
        }
Exemple #10
0
        /// <summary>
        /// Checks if the specifier contains a given role and uses it to configure the UnicastBus appropriately.
        /// </summary>
        /// <param name="specifier"></param>
        public void ConfigureBusForEndpoint(IConfigureThisEndpoint specifier)
        {
            ConfigUnicastBus unicastBusConfig = null;

            var roleFound = false;

            foreach (var role in availableRoles)
            {
                var  roleType = role.Key;
                bool handlesRole;


                if (roleType.IsGenericType)
                {
                    handlesRole =
                        specifier.GetType()
                        .GetInterfaces()
                        .Any(
                            x =>
                            x.IsGenericType &&
                            x.GetGenericTypeDefinition() == roleType.GetGenericTypeDefinition());
                }
                else
                {
                    handlesRole = roleType.IsInstanceOfType(specifier);
                }

                if (!handlesRole)
                {
                    continue;
                }
                roleFound = true;

                //apply role
                var roleConfigurer = Activator.CreateInstance(role.Value) as IConfigureRole;

                var config = roleConfigurer.ConfigureRole(specifier);

                if (config != null)
                {
                    if (unicastBusConfig != null)
                    {
                        throw new InvalidOperationException("Only one role can configure the unicastbus");
                    }

                    unicastBusConfig = config;
                }

                Logger.Info("Role " + roleType + " configured");
                foreach (var markerProfile in GetMarkerRoles(specifier.GetType(), roleType))
                {
                    Logger.Info("Role " + markerProfile + " is marked.");
                }
            }
            if (!roleFound)
            {
                throw new Exception("Did you forget to specify the endpoint role? Please make sure you specify the endpoint role as either 'AsA_Client','AsA_Host','AsA_Publisher', 'AsA_Server' or some other custom 'IRole'.");
            }
        }
        /// <summary>
        /// Configures the UnicastBus with typical settings for a server on azure
        /// </summary>
        /// <param name="specifier"></param>
        /// <returns></returns>
        public ConfigUnicastBus ConfigureRole(IConfigureThisEndpoint specifier)
        {
            Configure.Transactions.Enable();
            Configure.Features.Enable <Features.Sagas>();

            return(Configure.Instance.UnicastBus()
                   .RunHandlersUnderIncomingPrincipal(false));
        }
        public DynamicHostController(IConfigureThisEndpoint specifier, string[] requestedProfiles, List<Type> defaultProfiles)
        {
            this.specifier = specifier;
            
            var assembliesToScan = new List<Assembly> {GetType().Assembly};

            profileManager = new ProfileManager(assembliesToScan, requestedProfiles, defaultProfiles);
        }
Exemple #13
0
 public void Configure(IConfigureThisEndpoint specifier)
 {
     NServiceBus.SetLoggingLibrary.Log4Net <TraceAppender>(null,
                                                           ta =>
     {
         ta.ImmediateFlush = true;
     });
 }
 void IConfigureLogging.Configure(IConfigureThisEndpoint specifier)
 {
     SetLoggingLibrary.Log4Net <AzureAppender>(null,
                                               a =>
     {
         a.ScheduledTransferPeriod = 10;
     });
 }
Exemple #15
0
 public void Configure(IConfigureThisEndpoint specifier)
 {
     NServiceBus.SetLoggingLibrary.Log4Net <RollingFileAppender>(null,
                                                                 rfa =>
     {
         rfa.File = "d:\\logs\\bus_server.log";
     });
 }
Exemple #16
0
 /// <summary>
 /// Configures the UnicastBus with typical settings for a client
 /// </summary>
 /// <param name="specifier"></param>
 /// <returns></returns>
 public ConfigUnicastBus ConfigureRole(IConfigureThisEndpoint specifier)
 {
     return(Configure.Instance
            .MsmqTransport()
            .IsTransactional(false)
            .PurgeOnStartup(true)
            .UnicastBus()
            .ImpersonateSender(false));
 }
Exemple #17
0
        public WcfManager(IEnumerable<Assembly> assembliesToScan, IConfigureThisEndpoint specifier)
        {
            this.specifier = specifier;

            foreach (var a in assembliesToScan)
                foreach (var t in a.GetTypes())
                    if (IsWcfService(t) && !t.IsAbstract)
                        serviceTypes.Add(t);
        }
Exemple #18
0
        public DynamicHostController(IConfigureThisEndpoint specifier, string[] requestedProfiles, IEnumerable <Type> defaultProfiles)
        {
            this.specifier = specifier;

            var assembliesToScan = new[] { GetType().Assembly };

            profileManager = new ProfileManager(assembliesToScan, specifier, requestedProfiles, defaultProfiles);
            configManager  = new ConfigManager(assembliesToScan, specifier);
        }
        public DynamicHostController(IConfigureThisEndpoint specifier, string[] requestedProfiles,IEnumerable<Type> defaultProfiles)
        {
            this.specifier = specifier;

            var assembliesToScan = new[] {GetType().Assembly};

            profileManager = new ProfileManager(assembliesToScan, specifier, requestedProfiles, defaultProfiles);
            configManager = new ConfigManager(assembliesToScan, specifier);
        }
 void IConfigureLogging.Configure(IConfigureThisEndpoint specifier)
 {
     SetLoggingLibrary.Log4Net <ColoredConsoleAppender>(null,
                                                        a =>
     {
         LiteLoggingHandler.PrepareColors(a);
         a.Threshold = Level.Info;
     }
                                                        );
 }
Exemple #21
0
        public DynamicHostController(IConfigureThisEndpoint specifier, string[] requestedProfiles, List <Type> defaultProfiles)
        {
            this.specifier = specifier;

            var assembliesToScan = new List <Assembly> {
                GetType().Assembly
            };

            profileManager = new ProfileManager(assembliesToScan, requestedProfiles, defaultProfiles);
        }
Exemple #22
0
        /// <summary>
        /// Accepts the type which will specify the users custom configuration.
        /// This type should implement <see cref="IConfigureThisEndpoint"/>.
        /// </summary>
        /// <param name="specifier"></param>
        /// <param name="args"></param>
        /// <param name="defaultProfiles"></param>
        public GenericHost(IConfigureThisEndpoint specifier, string[] args, IEnumerable <Type> defaultProfiles)
        {
            this.specifier = specifier;

            var assembliesToScan = AssemblyScanner.GetScannableAssemblies();

            profileManager = new ProfileManager(assembliesToScan, specifier, args, defaultProfiles);
            configManager  = new ConfigManager(assembliesToScan, specifier);
            wcfManager     = new WcfManager(assembliesToScan);
            roleManager    = new RoleManager(assembliesToScan);
        }
Exemple #23
0
        /// <summary>
        /// Configures the UnicastBus with typical settings for a client
        /// </summary>
        /// <param name="specifier"></param>
        /// <returns></returns>
        public ConfigUnicastBus ConfigureRole(IConfigureThisEndpoint specifier)
        {
            Configure.Transactions.Disable();
            Configure.Features.Disable <Features.SecondLevelRetries>();

            return(Configure.Instance
                   .PurgeOnStartup(true)
                   .DisableTimeoutManager()
                   .UnicastBus()
                   .RunHandlersUnderIncomingPrincipal(false));
        }
 /// <summary>
 /// Configures the UnicastBus with typical settings for a server on azure
 /// </summary>
 /// <param name="specifier"></param>
 /// <returns></returns>
 public ConfigUnicastBus ConfigureRole(IConfigureThisEndpoint specifier)
 {
     return(Configure.Instance
            .DefaultBuilder()
            .AzureConfigurationSource()
            .AzureMessageQueue().IsTransactional(true)
            .Sagas()
            // .PurgeOnStartup(false) // todo
            .UnicastBus()
            .ImpersonateSender(true));
 }
Exemple #25
0
        /// <summary>
        /// Accepts the type which will specify the users custom configuration.
        /// This type should implement <see cref="IConfigureThisEndpoint"/>.
        /// </summary>
        /// <param name="specifier"></param>
        /// <param name="args"></param>
        /// <param name="defaultProfiles"></param>
        public GenericHost(IConfigureThisEndpoint specifier, string[] args,IEnumerable<Type> defaultProfiles)
        {
            this.specifier = specifier;

            var assembliesToScan = AssemblyScanner.GetScannableAssemblies();

            profileManager = new ProfileManager(assembliesToScan, specifier, args,defaultProfiles);
            configManager = new ConfigManager(assembliesToScan, specifier);
            wcfManager = new WcfManager(assembliesToScan);
            roleManager = new RoleManager(assembliesToScan);
        }
Exemple #26
0
        void SetSlaFromAttribute(EndpointConfiguration configuration, IConfigureThisEndpoint configureThisEndpoint)
        {
            var endpointConfigurationType = configureThisEndpoint
                                            .GetType();
            TimeSpan sla;

            if (TryGetSlaFromEndpointConfigType(endpointConfigurationType, out sla))
            {
                configuration.GetSettings().Set("EndpointSLA", sla);
            }
        }
        /// <summary>
        /// Configures the UnicastBus with typical settings for a server
        /// </summary>
        /// <param name="specifier"></param>
        /// <returns></returns>
        public ConfigUnicastBus ConfigureRole(IConfigureThisEndpoint specifier)
        {
            Configure.ScaleOut(s => s.UseSingleBrokerQueue());

            Feature.EnableByDefault <Sagas>();

            return(Configure.Instance
                   .PurgeOnStartup(false)
                   .UnicastBus()
                   .RunHandlersUnderIncomingPrincipal(true));
        }
        public ConfigUnicastBus ConfigureRole(IConfigureThisEndpoint specifier)
        {
            var transportDefinitionType =
                specifier.GetType()
                .GetInterfaces()
                .SelectMany(i => i.GetGenericArguments())
                .Single(t => typeof(TransportDefinition).IsAssignableFrom(t));

            Configure.Instance.UseTransport(transportDefinitionType);

            return(null);
        }
        public DynamicHostController(IConfigureThisEndpoint specifier, string[] requestedProfiles, List <Type> defaultProfiles, string endpointName)
        {
            this.specifier = specifier;
            Configure.GetEndpointNameAction = (Func <string>)(() => endpointName);

            var assembliesToScan = new List <Assembly> {
                GetType().Assembly
            };

            profileManager = new ProfileManager(assembliesToScan, specifier, requestedProfiles, defaultProfiles);
            configManager  = new ConfigManager(assembliesToScan, specifier);
        }
        /// <summary>
        /// Initializes the manager with the assemblies to scan and the endpoint configuration to use
        /// </summary>
        /// <param name="assembliesToScan"></param>
        /// <param name="specifier"></param>
        /// <param name="profileArgs"></param>
        /// <param name="defaultProfiles"></param>
        public ProfileManager(IEnumerable <Assembly> assembliesToScan, IConfigureThisEndpoint specifier, string[] profileArgs, IEnumerable <Type> defaultProfiles)
        {
            this.assembliesToScan = assembliesToScan;
            this.specifier        = specifier;

            activeProfiles = new List <Type>(GetProfilesFrom(assembliesToScan).Where(t => profileArgs.Any(pa => t.FullName.ToLower() == pa.ToLower())));

            if (activeProfiles.Count() == 0)
            {
                activeProfiles = defaultProfiles;
            }
        }
        /// <summary>
        /// Contructs the manager with the given user configuration and the list of assemblies that should be scanned
        /// </summary>
        /// <param name="assembliesToScan"></param>
        /// <param name="specifier"></param>
        public ConfigManager(IEnumerable<Assembly> assembliesToScan, IConfigureThisEndpoint specifier)
        {
            this.specifier = specifier;

            foreach(var a in assembliesToScan)
                foreach(var t in a.GetTypes())
                {
                    if (typeof(IWantCustomInitialization).IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract && !typeof(IConfigureThisEndpoint).IsAssignableFrom(t))
                        toInitialize.Add(t);
                    if (typeof(IWantToRunAtStartup).IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract)
                        toRunAtStartup.Add(t);
                }
        }
Exemple #32
0
        /// <summary>
        /// Configures the UnicastBus with typical settings for a client
        /// </summary>
        /// <param name="specifier"></param>
        /// <returns></returns>
        public ConfigUnicastBus ConfigureRole(IConfigureThisEndpoint specifier)
        {
            if (!Configure.Instance.Configurer.HasComponent <ISendMessages>())
            {
                Configure.Instance.MsmqTransport();
            }

            return(Configure.Instance
                   .PurgeOnStartup(true)
                   .IsTransactional(false)
                   .UnicastBus()
                   .ImpersonateSender(false));
        }
Exemple #33
0
        /// <summary>
        /// Checks if the specifier contains a given role and uses it to configure the UnicastBus appropriately.
        /// </summary>
        public void ConfigureBusForEndpoint(IConfigureThisEndpoint specifier)
        {
            ConfigUnicastBus unicastBusConfig = null;

            var roleFound = false;
            foreach (var role in availableRoles)
            {
                var roleType = role.Key;
                bool handlesRole;

                if (roleType.IsGenericType)
                {
                    handlesRole =
                        specifier.GetType()
                                 .GetInterfaces()
                                 .Any(
                                     x =>
                                     x.IsGenericType &&
                                     x.GetGenericTypeDefinition() == roleType.GetGenericTypeDefinition());
                }
                else
                {
                    handlesRole = roleType.IsInstanceOfType(specifier);
                }

                if (!handlesRole)
                    continue;
                roleFound = true;

                //apply role
                var roleConfigurer = Activator.CreateInstance(role.Value) as IConfigureRole;

                var config = roleConfigurer.ConfigureRole(specifier);

                if (config != null)
                {
                    if (unicastBusConfig != null)
                        throw new InvalidOperationException("Only one role can configure the UnicastBus");

                    unicastBusConfig = config;
                }

                Logger.Info("Role " + roleType + " configured");
                foreach (var markerProfile in GetMarkerRoles(specifier.GetType(), roleType))
                    Logger.Info("Role " + markerProfile + " is marked.");
            }
            if (!roleFound)
            {
                throw new Exception("Did you forget to specify the endpoint role? Please make sure you specify the endpoint role as either 'AsA_Client','AsA_Host','AsA_Publisher', 'AsA_Server' or some other custom 'IRole'.");
            }
        }
Exemple #34
0
 static bool TryGetTransportDefinitionType(IConfigureThisEndpoint specifier, out Type transportDefinitionType)
 {
     var transportType= specifier.GetType()
         .GetInterfaces()
         .Where(x => x.IsGenericType)
         .SingleOrDefault(x => x.GetGenericTypeDefinition() == typeof(UsingTransport<>));
     if (transportType != null)
     {
         transportDefinitionType = transportType.GetGenericArguments().First();
         return true;
     }
     transportDefinitionType = null;
     return false;
 }
        /// <summary>
        /// Constructs the manager with the given user configuration and the list of assemblies that should be scanned
        /// </summary>
        public ConfigManager(List<Assembly> assembliesToScan, IConfigureThisEndpoint specifier)
        {
            this.specifier = specifier;

            toInitialize = assembliesToScan
                .AllTypesAssignableTo<IWantCustomInitialization>()
                .WhereConcrete()
                .Where(t => !typeof(IConfigureThisEndpoint).IsAssignableFrom(t))
                .ToList();
            toRunAtStartup = assembliesToScan
                .AllTypesAssignableTo<IWantToRunAtStartup>()
                .WhereConcrete()
                .ToList();
        }
 public static void TweakConfigurationBuilder(IConfigureThisEndpoint specifier, BusConfiguration config)
 {
     if (specifier is AsA_Worker)
     {
         config.Transactions().Enable();
         config.EnableFeature<Features.Sagas>();
     }
     
     Type transportDefinitionType;
     if (TryGetTransportDefinitionType(specifier, out transportDefinitionType))
     {
         config.UseTransport(transportDefinitionType);
     }
 }
Exemple #37
0
        /// <summary>
        /// Constructs the manager with the given user configuration and the list of assemblies that should be scanned
        /// </summary>
        public ConfigManager(List <Assembly> assembliesToScan, IConfigureThisEndpoint specifier)
        {
            this.specifier = specifier;

            toInitialize = assembliesToScan
                           .AllTypesAssignableTo <IWantCustomInitialization>()
                           .WhereConcrete()
                           .Where(t => !typeof(IConfigureThisEndpoint).IsAssignableFrom(t))
                           .ToList();
            toRunAtStartup = assembliesToScan
                             .AllTypesAssignableTo <IWantToRunAtStartup>()
                             .WhereConcrete()
                             .ToList();
        }
Exemple #38
0
        /// <summary>
        /// Accepts the type which will specify the users custom configuration.
        /// This type should implement <see cref="IConfigureThisEndpoint"/>.
        /// </summary>
        /// <param name="specifier"></param>
        /// <param name="args"></param>
        /// <param name="defaultProfiles"></param>
        /// <param name="endpointName"></param>
        public GenericHost(IConfigureThisEndpoint specifier, string[] args, IEnumerable <Type> defaultProfiles, string endpointName)
        {
            this.specifier = specifier;
            Configure.GetEndpointNameAction = () => endpointName;

            var assembliesToScan = AssemblyScanner.GetScannableAssemblies()
                                   .ToList();

            profileManager = new ProfileManager(assembliesToScan, specifier, args, defaultProfiles);
            ProfileActivator.ProfileManager = profileManager;

            configManager = new ConfigManager(assembliesToScan, specifier);
            wcfManager    = new WcfManager(assembliesToScan);
            roleManager   = new RoleManager(assembliesToScan);
        }
Exemple #39
0
        /// <summary>
        /// Accepts the type which will specify the users custom configuration.
        /// This type should implement <see cref="IConfigureThisEndpoint"/>.
        /// </summary>
        /// <param name="specifier"></param>
        /// <param name="args"></param>
        /// <param name="defaultProfiles"></param>
        /// <param name="endpointName"></param>
        public GenericHost(IConfigureThisEndpoint specifier, string[] args, IEnumerable<Type> defaultProfiles, string endpointName)
        {
            this.specifier = specifier;
            Configure.GetEndpointNameAction = () => endpointName;

            var assembliesToScan = AssemblyScanner.GetScannableAssemblies()
                .ToList();

            profileManager = new ProfileManager(assembliesToScan, specifier, args, defaultProfiles);
            ProfileActivator.ProfileManager = profileManager;

            configManager = new ConfigManager(assembliesToScan, specifier);
            wcfManager = new WcfManager(assembliesToScan);
            roleManager = new RoleManager(assembliesToScan);
        }
Exemple #40
0
        /// <summary>
        /// Configures the UnicastBus with typical settings for a listener on azure
        /// </summary>
        /// <param name="specifier"></param>
        /// <returns></returns>
        public ConfigUnicastBus ConfigureRole(IConfigureThisEndpoint specifier)
        {
            var instance = Configure.Instance;

            if (RoleEnvironment.IsAvailable && !IsHostedIn.ChildHostProcess())
            {
                instance.AzureConfigurationSource();
            }

            return(instance
                   .JsonSerializer()
                   .IsTransactional(true)
                   .UnicastBus()
                   .ImpersonateSender(false));
        }
        public static void TweakConfigurationBuilder(IConfigureThisEndpoint specifier, BusConfiguration config)
        {
            if (specifier is AsA_Worker)
            {
                config.Transactions().Enable();
                config.EnableFeature <Features.Sagas>();
            }

            Type transportDefinitionType;

            if (TryGetTransportDefinitionType(specifier, out transportDefinitionType))
            {
                config.UseTransport(transportDefinitionType);
            }
        }
        static bool TryGetTransportDefinitionType(IConfigureThisEndpoint specifier, out Type transportDefinitionType)
        {
            var transportType = specifier.GetType()
                                .GetInterfaces()
                                .Where(x => x.IsGenericType)
                                .SingleOrDefault(x => x.GetGenericTypeDefinition() == typeof(UsingTransport <>));

            if (transportType != null)
            {
                transportDefinitionType = transportType.GetGenericArguments().First();
                return(true);
            }
            transportDefinitionType = null;
            return(false);
        }
Exemple #43
0
 void IConfigureLogging.Configure(IConfigureThisEndpoint specifier)
 {
     if (Log4NetConfigurator.Log4NetExists)
     {
         SetLoggingLibrary.Log4Net(null, Log4NetAppenderFactory.CreateColoredConsoleAppender("Info"));
     }
     else if (NLogConfigurator.NLogExists)
     {
         SetLoggingLibrary.NLog(null, NLogTargetFactory.CreateColoredConsoleTarget());
     }
     else
     {
         ConfigureInternalLog4Net.Integration();
     }
 }
        /// <summary>
        /// Checks if the specifier contains a given role and uses it to configure the UnicastBus appropriately.
        /// </summary>
        /// <param name="specifier"></param>
        public void ConfigureBusForEndpoint(IConfigureThisEndpoint specifier)
        {
            ConfigUnicastBus config = null;

            foreach (var role in availableRoles)
            {
                var roleType = role.Key;
                if (!roleType.IsAssignableFrom(specifier.GetType())) continue;

                if (config != null)
                    throw new InvalidOperationException("Endpoints can only have one role");

                //apply role
                var roleConfigurer = Activator.CreateInstance(role.Value) as IConfigureRole;

                config = roleConfigurer.ConfigureRole(specifier);

                Logger.Info("Role " + roleType + " configured");
            }
        }
Exemple #45
0
        public static void TweakConfigurationBuilder(IConfigureThisEndpoint specifier, BusConfiguration config)
        {
            if (specifier is AsA_Server)
            {
                config.ScaleOut().UseSingleBrokerQueue();
            }
            else if (specifier is AsA_Client)
            {
                config.PurgeOnStartup(true);
                config.Transactions().Disable();

                config.DisableFeature<Features.SecondLevelRetries>();
                config.DisableFeature<StorageDrivenPublishing>();
                config.DisableFeature<TimeoutManager>();
            }

            Type transportDefinitionType;
            if (TryGetTransportDefinitionType(specifier, out transportDefinitionType))
            {
                config.UseTransport(transportDefinitionType);
            }
        }
        /// <summary>
        /// Checks if the specifier is a client or server and sets up the MsmqTransport and UnicastBus approproiately.
        /// </summary>
        /// <param name="specifier"></param>
        public static void ConfigureBusForEndpoint(IConfigureThisEndpoint specifier)
        {
            if (specifier is AsA_Client && specifier is AsA_Server)
                throw new InvalidOperationException("Cannot specify endpoint both as a client and as a server.");

            ConfigUnicastBus config = null;

            if (specifier is AsA_Client)
                config = ConfigureClientRole();

            if (specifier is AsA_Server)
                config = ConfigureServerRole();

            if (specifier is ISpecifyMessageHandlerOrdering)
            {
                if (config == null)
                    throw new ConfigurationErrorsException("You must implement either AsA_Client or AsA_Server to use ISpecifyMessageHandlerOrdering. If you are doing your own bus configuration, specify the order in .UnicastBus().LoadMessageHandlers(order);");

                (specifier as ISpecifyMessageHandlerOrdering).SpecifyOrder(new Order(config));
            }
            else
                if (config != null)
                    config.LoadMessageHandlers();
        }