/// <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); }
/// <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; } ); }
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(); } }
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); }
/// <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."); } } }
/// <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); }
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; }); }
public void Configure(IConfigureThisEndpoint specifier) { NServiceBus.SetLoggingLibrary.Log4Net <RollingFileAppender>(null, rfa => { rfa.File = "d:\\logs\\bus_server.log"; }); }
/// <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)); }
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); }
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; } ); }
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); }
/// <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); }
/// <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)); }
/// <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); }
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); } }
/// <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)); }
/// <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'."); } }
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); } }
/// <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(); }
/// <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); }
/// <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); }
/// <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); }
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"); } }
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(); }