コード例 #1
0
 public static IServiceHostBuilder AddLogging(this IServiceHostBuilder builder, string configPath, Action <ILoggingBuilder> optionsAction = null)
 {
     builder.Dependencies.AddLogging(options =>
     {
         options.AddConfiguration(builder.Configuration.Build().GetSection(configPath));
         optionsAction?.Invoke(options);
     });
     return(builder);
 }
コード例 #2
0
 public static IServiceHostBuilder UseServiceCache(this IServiceHostBuilder hostBuilder)
 {
     return(hostBuilder.MapServices(mapper =>
     {
         var serviceCacheProvider = mapper.Resolve <ICacheNodeProvider>();
         var addressDescriptors = serviceCacheProvider.GetServiceCaches().ToList();
         mapper.Resolve <IServiceCacheManager>().SetCachesAsync(addressDescriptors);
     }));
 }
コード例 #3
0
 public static IServiceHostBuilder UseLog4net(this IServiceHostBuilder hostBuilder, Func <string, LogLevel, bool> filter, string log4NetConfigFile = "log4net.config")
 {
     return(hostBuilder.MapServices(mapper =>
     {
         mapper.Resolve <ILoggerFactory>().AddConsole(filter);
         log4NetConfigFile = EnvironmentHelper.GetEnvironmentVariable(log4NetConfigFile);
         mapper.Resolve <ILoggerFactory>().AddProvider(new Log4NetProvider(log4NetConfigFile));
     }));
 }
コード例 #4
0
 public static IServiceHostBuilder UseNLog(this IServiceHostBuilder hostBuilder, Func <string, LogLevel, bool> filter, string log4NetConfigFile = "log4net.config")
 {
     return(hostBuilder.MapServices(mapper =>
     {
         mapper.Resolve <ILoggerFactory>().AddConsole(filter);
         NLog.LogManager.LoadConfiguration(log4NetConfigFile);
         mapper.Resolve <ILoggerFactory>().AddProvider(new NLogProvider());
     }));
 }
コード例 #5
0
        public static IServiceHostBuilder WithJwtAuth([NotNull] this IServiceHostBuilder serviceHostBuilder)
        {
            if (serviceHostBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceHostBuilder));
            }

            return(serviceHostBuilder.Configure(new JwtAuthHostConfigurator()));
        }
コード例 #6
0
 public static IServiceHostBuilder UseNLog(this IServiceHostBuilder hostBuilder, string log4NetConfigFile = "nLog.config")
 {
     return(hostBuilder.MapServices(mapper =>
     {
         mapper.Resolve <ILoggerFactory>().AddConsole((c, l) => (int)l >= 3);
         NLog.LogManager.LoadConfiguration(log4NetConfigFile);
         mapper.Resolve <ILoggerFactory>().AddProvider(new NLogProvider());
     }));
 }
コード例 #7
0
 public static IServiceHostBuilder UseProxy(this IServiceHostBuilder hostBuilder)
 {
     return(hostBuilder.MapServices(mapper =>
     {
         mapper.Resolve <IServiceEngineLifetime>().ServiceEngineStarted.Register(() =>
         {
             mapper.Resolve <IServiceProxyFactory>();
         });
     }));
 }
コード例 #8
0
 public static IServiceHostBuilder UseNLog(this IServiceHostBuilder hostBuilder, Func <string, LogLevel, bool> filter, string nlogConfigFile = "nLog.config")
 {
     return(hostBuilder.MapServices(mapper =>
     {
         mapper.Resolve <ILoggerFactory>().AddConsole(filter);
         nlogConfigFile = EnvironmentHelper.GetEnvironmentVariable(nlogConfigFile);
         NLog.LogManager.LoadConfiguration(nlogConfigFile);
         mapper.Resolve <ILoggerFactory>().AddProvider(new NLogProvider());
     }));
 }
コード例 #9
0
 public static IServiceHostBuilder SubscribeAt(this IServiceHostBuilder hostBuilder)
 {
     return(hostBuilder.MapServices(mapper =>
     {
         mapper.Resolve <IServiceEngineLifetime>().ServiceEngineStarted.Register(() =>
         {
             mapper.Resolve <ISubscriptionAdapt>().SubscribeAt();
         });
     }));
 }
コード例 #10
0
        public static IServiceHostBuilder WithAssemblyDependencies([NotNull] this IServiceHostBuilder serviceHostBuilder,
                                                                   Assembly assembly)
        {
            if (serviceHostBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceHostBuilder));
            }

            return(serviceHostBuilder.Configure(new IocHostConfigurator(assembly)));
        }
コード例 #11
0
        public static IServiceHostBuilder UseServer(this IServiceHostBuilder hostBuilder, string ip, int port, string token = "True")
        {
            return(hostBuilder.MapServices(mapper =>
            {
                BuildServiceEngine(mapper);
                mapper.Resolve <IServiceCommandManager>().SetServiceCommandsAsync();
                var serviceEntryManager = mapper.Resolve <IServiceEntryManager>();
                string serviceToken = mapper.Resolve <IServiceTokenGenerator>().GeneratorToken(token);
                int _port = AppConfig.ServerOptions.Port == 0? port: AppConfig.ServerOptions.Port;
                string _ip = AppConfig.ServerOptions.Ip ?? ip;
                _port = AppConfig.ServerOptions.IpEndpoint?.Port ?? _port;
                _ip = AppConfig.ServerOptions.IpEndpoint?.Address.ToString() ?? _ip;

                if (_ip.IndexOf(".") < 0 || _ip == "" || _ip == "0.0.0.0")
                {
                    NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
                    foreach (NetworkInterface adapter in nics)
                    {
                        if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet && (_ip == "" || _ip == "0.0.0.0" || _ip == adapter.Name))
                        {
                            IPInterfaceProperties ipxx = adapter.GetIPProperties();
                            UnicastIPAddressInformationCollection ipCollection = ipxx.UnicastAddresses;
                            foreach (UnicastIPAddressInformation ipadd in ipCollection)
                            {
                                if (ipadd.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                                {
                                    _ip = ipadd.Address.ToString();
                                }
                            }
                        }
                    }
                }

                new ServiceRouteWatch(mapper.Resolve <CPlatformContainer>(), () =>
                {
                    var addressDescriptors = serviceEntryManager.GetEntries().Select(i =>
                                                                                     new ServiceRoute
                    {
                        Address = new[] { new IpAddressModel {
                                              Ip = _ip, Port = _port, ProcessorTime = Process.GetCurrentProcess().TotalProcessorTime.TotalSeconds, Token = serviceToken
                                          } },
                        ServiceDescriptor = i.Descriptor
                    }).ToList();
                    mapper.Resolve <IServiceRouteManager>().SetRoutesAsync(addressDescriptors);
                });

                mapper.Resolve <IModuleProvider>().Initialize();
                var serviceHost = mapper.Resolve <Runtime.Server.IServiceHost>();
                Task.Factory.StartNew(async() =>
                {
                    await serviceHost.StartAsync(new IPEndPoint(IPAddress.Parse(_ip), _port));
                }).Wait();
            }));
        }
コード例 #12
0
        public static IServiceHostBuilder WithSessionId([NotNull] this IServiceHostBuilder serviceHostBuilder)
        {
            if (serviceHostBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceHostBuilder));
            }

            return(serviceHostBuilder
                   .Configure(new SessionIdHostConfigurator())
                   .WithRequestMiddleware <SessionIdRequestMiddleware>());
        }
コード例 #13
0
        public static IServiceHostBuilder WithApiVersionning(this IServiceHostBuilder serviceHostBuilder)
        {
            if (serviceHostBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceHostBuilder));
            }

            serviceHostBuilder.Configure(new VersioningHostConfigurator());

            return(serviceHostBuilder);
        }
コード例 #14
0
        public static IServiceHostBuilder WithConfigFile(
            [NotNull] this IServiceHostBuilder serviceHostBuilder,
            [NotNull] string fileName)
        {
            if (serviceHostBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceHostBuilder));
            }

            return(serviceHostBuilder.Configure(new ConfigFileHostConfigurator(fileName)));
        }
コード例 #15
0
        public static IServiceHostBuilder WithRequestMiddleware <TRequestExecutor>(
            [NotNull] this IServiceHostBuilder serviceHostBuilder)
            where TRequestExecutor : class, IRequestMiddleware
        {
            if (serviceHostBuilder == null)
            {
                throw new ArgumentNullException(nameof(serviceHostBuilder));
            }

            return(serviceHostBuilder.Configure(new RequestMiddlewareConfigurator <TRequestExecutor>()));
        }
コード例 #16
0
 public static IServiceHostBuilder UseLog4net(this IServiceHostBuilder hostBuilder, LogLevel minLevel, string log4NetConfigFile = "log4net.config")
 {
     hostBuilder.ConfigureLogging(logger =>
     {
         logger.SetMinimumLevel(minLevel);
     });
     return(hostBuilder.MapServices(mapper =>
     {
         log4NetConfigFile = EnvironmentHelper.GetEnvironmentVariable(log4NetConfigFile);
         mapper.Resolve <ILoggerFactory>().AddProvider(new Log4NetProvider(log4NetConfigFile));
     }));
 }
コード例 #17
0
 internal static IServiceHostBuilder UseLog4netLogger(this IServiceHostBuilder serviceHostBuilder, Log4netOptions options = null)
 {
     serviceHostBuilder.RegisterService(containerBuilder =>
     {
         if (options == null)
         {
             options = new Log4netOptions();
         }
         containerBuilder.RegisterType <Log4netLogger>().WithParameter("options", options).As <ILogger>().SingleInstance();
     });
     return(serviceHostBuilder);
 }
コード例 #18
0
        public static IServiceHostBuilder WithSwagger(this IServiceHostBuilder hostBuilder, string title,
                                                      string description)
        {
            if (hostBuilder == null)
            {
                throw new ArgumentNullException(nameof(hostBuilder));
            }

            hostBuilder.Configure(new SwaggerHostConfigurator(title, description));

            return(hostBuilder);
        }
コード例 #19
0
 public static IServiceHostBuilder UseLog4net(this IServiceHostBuilder hostBuilder, string log4NetConfigFile = "log4net.config")
 {
     hostBuilder.ConfigureLogging(logger =>
     {
         logger.AddConfiguration(CPlatform.AppConfig.GetSection("Logging"));
     });
     return(hostBuilder.MapServices(mapper =>
     {
         var section = CPlatform.AppConfig.GetSection("Logging");
         log4NetConfigFile = EnvironmentHelper.GetEnvironmentVariable(log4NetConfigFile);
         mapper.Resolve <ILoggerFactory>().AddProvider(new Log4NetProvider(log4NetConfigFile));
     }));
 }
コード例 #20
0
 public static IServiceHostBuilder UseSchedule(this IServiceHostBuilder hostBuilder)
 {
     return(hostBuilder.MapServices(mapper =>
     {
         var jobEntities = mapper.Resolve <IJobEntityProvider>().GetJobEntities();
         var surgingScheduleJobManager = mapper.Resolve <ISurgingScheduleJobManager>();
         foreach (var jobEntity in jobEntities)
         {
             surgingScheduleJobManager.ScheduleAsync(jobEntity).Wait();
         }
         surgingScheduleJobManager.Start().Wait();
     }));
 }
コード例 #21
0
 public static IServiceHostBuilder UseNLog(this IServiceHostBuilder hostBuilder, LogLevel minLevel, string nlogConfigFile = "nLog.config")
 {
     hostBuilder.ConfigureLogging(logger =>
     {
         logger.SetMinimumLevel(minLevel);
     });
     return(hostBuilder.MapServices(mapper =>
     {
         nlogConfigFile = EnvironmentHelper.GetEnvironmentVariable(nlogConfigFile);
         NLog.LogManager.LoadConfiguration(nlogConfigFile);
         mapper.Resolve <ILoggerFactory>().AddProvider(new NLogProvider());
     }));
 }
コード例 #22
0
 public static IServiceHostBuilder UseNLog(this IServiceHostBuilder hostBuilder, string nlogConfigFile = "nLog.config")
 {
     hostBuilder.ConfigureLogging(logger =>
     {
         logger.AddConfiguration(CPlatform.AppConfig.GetSection("Logging"));
     });
     return(hostBuilder.MapServices(mapper =>
     {
         var section = CPlatform.AppConfig.GetSection("Logging");
         nlogConfigFile = EnvironmentHelper.GetEnvironmentVariable(nlogConfigFile);
         NLog.LogManager.LoadConfiguration(nlogConfigFile);
         mapper.Resolve <ILoggerFactory>().AddProvider(new NLogProvider());
     }));
 }
コード例 #23
0
        public static IServiceHostBuilder UseServer(this IServiceHostBuilder hostBuilder, string ip, int port, string token = "True")
        {
            return(hostBuilder.MapServices(mapper =>
            {
                BuildServiceEngine(mapper);
                mapper.Resolve <IServiceCommandManager>().SetServiceCommandsAsync();
                string serviceToken = mapper.Resolve <IServiceTokenGenerator>().GeneratorToken(token);
                int _port = AppConfig.ServerOptions.Port == 0 ? port : AppConfig.ServerOptions.Port;
                string _ip = AppConfig.ServerOptions.Ip ?? ip;
                _port = AppConfig.ServerOptions.IpEndpoint?.Port ?? _port;
                _ip = AppConfig.ServerOptions.IpEndpoint?.Address.ToString() ?? _ip;
                if (_ip.IndexOf(".") < 0 || _ip == "" || _ip == "0.0.0.0")
                {
                    NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
                    foreach (NetworkInterface adapter in nics)
                    {
                        if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet && (_ip == "" || _ip == "0.0.0.0" || _ip == adapter.Name))
                        {
                            IPInterfaceProperties ipxx = adapter.GetIPProperties();
                            UnicastIPAddressInformationCollection ipCollection = ipxx.UnicastAddresses;
                            foreach (UnicastIPAddressInformation ipadd in ipCollection)
                            {
                                if (ipadd.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                                {
                                    _ip = ipadd.Address.ToString();
                                }
                            }
                        }
                    }
                }
                var mappingIp = AppConfig.ServerOptions.MappingIP ?? _ip;
                var mappingPort = AppConfig.ServerOptions.MappingPort;
                if (mappingPort == 0)
                {
                    mappingPort = _port;
                }

                ConfigureRoute(mapper, mappingIp, mappingPort, serviceToken);
                mapper.Resolve <IModuleProvider>().Initialize();
                var serviceHosts = mapper.Resolve <IList <Runtime.Server.IServiceHost> >();
                Task.Factory.StartNew(async() =>
                {
                    foreach (var serviceHost in serviceHosts)
                    {
                        await serviceHost.StartAsync(_ip, _port);
                    }
                    mapper.Resolve <IServiceEngineLifetime>().NotifyStarted();
                }).Wait();
            }));
        }
コード例 #24
0
 public static IServiceHostBuilder UseStartup(this IServiceHostBuilder hostBuilder, Type startupType)
 {
     return(hostBuilder
            .ConfigureServices(services =>
     {
         if (typeof(IStartup).GetTypeInfo().IsAssignableFrom(startupType.GetTypeInfo()))
         {
             services.AddSingleton(typeof(IStartup), startupType);
         }
         else
         {
             services.AddSingleton(typeof(IStartup), sp =>
             {
                 return new ConventionBasedStartup(StartupLoader.LoadMethods(sp, startupType, ""));
             });
         }
     }));
 }
コード例 #25
0
 public static T UseLog4netLogger <T>(this IServiceHostBuilder serviceHostBuilder, LogOptions options = null)
     where T : class, IServiceHostBuilder
 {
     serviceHostBuilder.RegisterService(containerBuilder =>
     {
         if (options == null)
         {
             options = new LogOptions();
         }
         containerBuilder.RegisterType <Log4netLogger>().WithParameter("options", options).As <ILogger>().SingleInstance();
     });
     serviceHostBuilder.AddInitializer(container =>
     {
         var logger = container.Resolve <ILogger>();
         logger.Info($"[config]use Log4net logger");
     });
     return(serviceHostBuilder as T);
 }
コード例 #26
0
        public static IServiceHostBuilder UseServer(this IServiceHostBuilder hostBuilder)
        {
            return(hostBuilder.MapServices(async mapper =>
            {
                int _port = 981;
                string _ip = "127.0.0.1";

                Console.WriteLine($"准备启动服务主机,监听地址:{_ip}:{_port}。");
                var transportHosts = mapper.Resolve <IList <ITransportHost> >();
                Task.Factory.StartNew(async() =>
                {
                    foreach (var transportHost in transportHosts)
                    {
                        await transportHost.StartAsync(_ip, _port);
                    }
                }).Wait();
            }));
        }
コード例 #27
0
 public static IServiceHostBuilder SubscribeAt(this IServiceHostBuilder hostBuilder)
 {
     return(hostBuilder.MapServices(mapper =>
     {
         mapper.Resolve <IServiceEngineLifetime>().ServiceEngineStarted.Register(() =>
         {
             mapper.Resolve <ISubscriptionAdapt>().SubscribeAt();
             new ServiceRouteWatch(mapper.Resolve <CPlatformContainer>(), () =>
             {
                 var subscriptionAdapt = mapper.Resolve <ISubscriptionAdapt>();
                 mapper.Resolve <IEventBus>().OnShutdown += (sender, args) =>
                 {
                     subscriptionAdapt.Unsubscribe();
                 };
                 mapper.Resolve <ISubscriptionAdapt>().SubscribeAt();
             });
         });
     }));
 }
コード例 #28
0
 public static IServiceHostBuilder UseClient(this IServiceHostBuilder hostBuilder)
 {
     return(hostBuilder.MapServices(mapper =>
     {
         var serviceEntryManager = mapper.Resolve <IServiceEntryManager>();
         var addressDescriptors = serviceEntryManager.GetEntries().Select(i =>
         {
             i.Descriptor.Metadatas = null;
             return new ServiceSubscriber
             {
                 Address = new[] { new IpAddressModel {
                                       Ip = Dns.GetHostEntry(Dns.GetHostName())
                                            .AddressList.FirstOrDefault <IPAddress>
                                                (a => a.AddressFamily.ToString().Equals("InterNetwork")).ToString()
                                   } },
                 ServiceDescriptor = i.Descriptor
             };
         }).ToList();
         mapper.Resolve <IServiceSubscribeManager>().SetSubscribersAsync(addressDescriptors);
     }));
 }
コード例 #29
0
 public static IServiceHostBuilder UseClient(this IServiceHostBuilder hostBuilder)
 {
     return(hostBuilder.MapServices(mapper =>
     {
         var serviceEntryManager = mapper.Resolve <IServiceEntryManager>();
         var addressDescriptors = serviceEntryManager.GetEntries().Select(i =>
         {
             i.Descriptor.Metadatas = null;
             if (!string.IsNullOrEmpty(AppConfig.ServerOptions.MappingIP))
             {
                 return new ServiceSubscriber
                 {
                     Address = new[] {
                         new MappingAddressModel {
                             InnerIp = Dns.GetHostEntry(Dns.GetHostName())
                                       .AddressList.FirstOrDefault <IPAddress>(a => a.AddressFamily.ToString().Equals("InterNetwork")).ToString(),
                             //MappingIp = AppConfig.ServerOptions.MappingIP,
                         }
                     },
                     ServiceDescriptor = i.Descriptor
                 };
             }
             else
             {
                 return new ServiceSubscriber
                 {
                     Address = new[] {
                         new IpAddressModel {
                             Ip = Dns.GetHostEntry(Dns.GetHostName())
                                  .AddressList.FirstOrDefault <IPAddress>(a => a.AddressFamily.ToString().Equals("InterNetwork")).ToString()
                         }
                     },
                     ServiceDescriptor = i.Descriptor
                 };
             }
         }).ToList();
         mapper.Resolve <IServiceSubscribeManager>().SetSubscribersAsync(addressDescriptors);
         mapper.Resolve <IModuleProvider>().Initialize();
     }));
 }
コード例 #30
0
 public static IServiceHostBuilder UseServer(this IServiceHostBuilder hostBuilder, string ip, int port, string token = "True")
 {
     return(hostBuilder.MapServices(mapper =>
     {
         mapper.Resolve <IServiceCommandManager>().SetServiceCommandsAsync();
         var serviceEntryManager = mapper.Resolve <IServiceEntryManager>();
         bool enableToken;
         string serviceToken;
         if (!bool.TryParse(token, out enableToken))
         {
             serviceToken = token;
         }
         else
         {
             if (enableToken)
             {
                 serviceToken = Guid.NewGuid().ToString("N");
             }
             else
             {
                 serviceToken = null;
             }
         }
         var addressDescriptors = serviceEntryManager.GetEntries().Select(i =>
                                                                          new ServiceRoute
         {
             Address = new[] { new IpAddressModel {
                                   Ip = ip, Port = port, Token = serviceToken
                               } },
             ServiceDescriptor = i.Descriptor
         }).ToList();
         mapper.Resolve <IServiceRouteManager>().SetRoutesAsync(addressDescriptors);
         var serviceHost = mapper.Resolve <Runtime.Server.IServiceHost>();
         Task.Factory.StartNew(async() =>
         {
             await serviceHost.StartAsync(new IPEndPoint(IPAddress.Parse(ip), port));
         }).Wait();
     }));
 }