Esempio n. 1
0
 /// <summary>
 /// 将DbCommand的拦截器以单例的形式添加到DbInterception静态对象中
 /// </summary>
 /// <param name="action"></param>
 public static void UsingSingletonInterceptor(DbCommandInterceptor interceptor)
 {
     #region SQL语句拦截器,拦截器只加载一次
     var property = typeof(DbCommandDispatcher).GetProperty("InternalDispatcher", BindingFlags.Instance | BindingFlags.NonPublic);
     if (property != null)
     {
         var val = property.GetValue(System.Data.Entity.Infrastructure.Interception.DbInterception.Dispatch.Command);
         if (val != null)
         {
             var list = val.GetType().GetField("_interceptors", BindingFlags.Instance | BindingFlags.NonPublic);
             if (list != null)
             {
                 var listVal = list.GetValue(val) as List <System.Data.Entity.Infrastructure.Interception.IDbCommandInterceptor>;
                 if (listVal != null)
                 {
                     if (listVal.FirstOrDefault(i => i.ToString() == interceptor.GetType().ToString()) == null)
                     {
                         System.Data.Entity.Infrastructure.Interception.DbInterception.Add(interceptor);
                     }
                 }
             }
         }
     }
     #endregion
 }
Esempio n. 2
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app)
        {
            //由于.Net Core默认只会从wwwroot目录加载静态文件,其他文件夹的静态文件无法正常访问。
            //而我们希望将图片上传到网站根目录的upload文件夹下,所以需要额外在Startup.cs类的Configure方法中
            //string resource = Path.Combine(Directory.GetCurrentDirectory(), "upload");
            //if (!FileHelper.IsExistDirectory(resource))
            //{
            //    FileHelper.CreateFolder(resource);
            //}
            //app.UseStaticFiles(new StaticFileOptions
            //{
            //    FileProvider = new PhysicalFileProvider(resource),
            //    RequestPath = "/upload",
            //    OnPrepareResponse = ctx =>
            //    {
            //        ctx.Context.Response.Headers.Append("Cache-Control", "public,max-age=36000");
            //    }
            //});
            //虚拟目录
            //如需使用,所有URL修改,例:"/Home/Index"改成'@Url.Content("~/Home/Index")',部署访问首页必须带虚拟目录;
            //if (!string.IsNullOrEmpty(GlobalContext.SystemConfig.VirtualDirectory))
            //{
            //    app.UsePathBase(new PathString(GlobalContext.SystemConfig.VirtualDirectory)); // 让 Pathbase 中间件成为第一个处理请求的中间件, 才能正确的模拟虚拟路径
            //}
            if (WebHostEnvironment.IsDevelopment())
            {
                //打印sql
                IDbCommandInterceptor interceptor = new DbCommandInterceptor();
                DbInterception.Add(interceptor);
                GlobalContext.SystemConfig.Debug = true;
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error?msg=404");
            }
            //文件地址Resource
            //静态资源wwwroot
            app.UseStaticFiles(new StaticFileOptions
            {
                ContentTypeProvider = new CustomerFileExtensionContentTypeProvider(),
                OnPrepareResponse   = GlobalContext.SetCacheControl
            });
            //session
            app.UseSession();
            //路径
            app.UseRouting();
            //MVC路由
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapHub <MessageHub>("/chatHub");
                endpoints.MapControllerRoute("areas", "{area:exists}/{controller=Home}/{action=Index}/{id?}");
                endpoints.MapControllerRoute("default", "{controller=Login}/{action=Index}/{id?}");
            });
            GlobalContext.ServiceProvider = app.ApplicationServices;
            //获取前面注入的Quartz调度类
            var quartz = app.ApplicationServices.GetRequiredService <JobCenter>();

            quartz.Start();
        }
Esempio n. 3
0
 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
 {
     if (env.IsDevelopment())
     {
         //打印sql
         IDbCommandInterceptor interceptor = new DbCommandInterceptor();
         DbInterception.Add(interceptor);
         app.UseDeveloperExceptionPage();
         GlobalContext.SystemConfig.Debug = true;
     }
     else
     {
         app.UseDeveloperExceptionPage();
     }
     app.UseStaticFiles(new StaticFileOptions
     {
         OnPrepareResponse = GlobalContext.SetCacheControl
     });
     app.UseMiddleware(typeof(GlobalExceptionMiddleware));
     //跨域设置
     app.UseCors(builder => builder.AllowAnyOrigin()
                 .AllowAnyMethod()
                 .AllowAnyHeader());
     //app.UseCors(builder =>
     //{
     //    builder.WithOrigins(GlobalContext.SystemConfig.AllowCorsSite.Split(',')).AllowAnyHeader().AllowAnyMethod().AllowCredentials();
     //});
     //允许body重用
     app.Use(next => context =>
     {
         context.Request.EnableBuffering();
         return(next(context));
     });
     app.UseSwagger(c =>
     {
         c.RouteTemplate = "api-doc/{documentName}/swagger.json";
     });
     app.UseSwaggerUI(c =>
     {
         c.RoutePrefix = "api-doc";
         c.SwaggerEndpoint("v1/swagger.json", "HaotianCloud Api v1");
     });
     app.UseRouting();
     app.UseEndpoints(endpoints =>
     {
         endpoints.MapControllerRoute("default", "api/{controller=ApiHome}/{action=Index}/{id?}");
     });
     GlobalContext.ServiceProvider = app.ApplicationServices;
 }
        public async Task InterceptAsync_DoesNot_CollectQueries_When_NotEnabled()
        {
            // arrange
#if !NET45
            var recorder = new AWSXRayRecorder {
                XRayOptions = new XRayOptions()
            };
#else
            var recorder = new AWSXRayRecorder();
#endif
            recorder.BeginSegment("test");
            var interceptor = new DbCommandInterceptor(recorder);

            // act
            await interceptor.InterceptAsync(() => Task.FromResult(0), _command);

            // assert
            var segment = AWSXRayRecorder.Instance.TraceContext.GetEntity();

            AssertNotCollected(recorder);
            recorder.EndSegment();
        }
        public void TestTrustedConnection_DoesNotCollectUserID()
        {
            // arrange
#if !NET45
            var recorder = new AWSXRayRecorder {
                XRayOptions = new XRayOptions()
            };
#else
            var recorder = new AWSXRayRecorder();
#endif
            InitializeMockTrustedConnection();
            recorder.BeginSegment("test");
            var interceptor = new DbCommandInterceptor(recorder);

            // act
            interceptor.Intercept(() => 0, _command);

            // assert
            var segment = AWSXRayRecorder.Instance.TraceContext.GetEntity();

            AssertNotCollected(recorder, true);
            recorder.EndSegment();
        }
        public async Task InterceptAsync_DoesNot_CollectQueries_When_EnabledGlobally_And_DisabledLocally()
        {
            // arrange
#if !NET45
            var recorder = new AWSXRayRecorder {
                XRayOptions = new XRayOptions {
                    CollectSqlQueries = true
                }
            };
#else
            ConfigurationManager.AppSettings[_collectSqlQueriesKey] = "true";
            AppSettings.Reset();
            var recorder = new AWSXRayRecorder();
#endif
            var interceptor = new DbCommandInterceptor(recorder, collectSqlQueries: false);
            recorder.BeginSegment("test");

            // act
            await interceptor.InterceptAsync(() => Task.FromResult(0), _command);

            // assert
            AssertNotCollected(recorder);
            recorder.EndSegment();
        }
        public void Intercept_CollectsQueries_When_EnabledGlobally()
        {
            // arrange
#if !NET45
            var recorder = new AWSXRayRecorder {
                XRayOptions = new XRayOptions {
                    CollectSqlQueries = true
                }
            };
#else
            ConfigurationManager.AppSettings[_collectSqlQueriesKey] = "true";
            AppSettings.Reset();
            var recorder = new AWSXRayRecorder();
#endif
            var interceptor = new DbCommandInterceptor(recorder);
            recorder.BeginSegment("test");

            // act
            interceptor.Intercept(() => 0, _command);

            // assert
            AssertCollected(recorder);
            recorder.EndSegment();
        }
Esempio n. 8
0
        public static void Main(string[] args)
        {
            int    m        = 1;
            bool   testAll  = false;
            string fileName = string.Empty;
            string line     = args.Length > 0 ? args[0] : string.Empty;

            if (!string.IsNullOrEmpty(line))
            {
                args = line.Split(';');
                if (args.Length > 0)
                {
                    m = Convert.ToInt32(args[0]);
                }
                if (args.Length > 1)
                {
                    testAll = args[1] == "1" ? true : false;
                }
            }

            ITest        test         = null;
            DatabaseType databaseType = DatabaseType.None;

            // 命令拦截
            var interceptor = new DbCommandInterceptor
            {
                OnExecuting = cmd =>
                {
                    var writer = System.IO.File.AppendText(fileName);
                    writer.WriteLine(cmd.CommandText);
                    if (cmd.Parameters != null)
                    {
                        for (int i = 0; i < cmd.Parameters.Count; i++)
                        {
                            IDbDataParameter p = (IDbDataParameter)cmd.Parameters[i];
                            writer.Write("N\"");
                            writer.Write(p.ParameterName);
                            writer.Write(" = ");
                            writer.Write((p.Value ?? string.Empty).ToString().Replace("\"", "\"\""));
                            writer.Write(", ");
                            writer.Write("DbType = {0}, ", p.DbType);
                            writer.Write("Size = {0}, ", p.Size);
                            writer.Write("Precision = {0}, ", p.Precision);
                            writer.Write("Scale = {0}, ", p.Scale);
                            writer.Write("Direction = {0}", p.Direction);
                            writer.Write("\"");
                            writer.WriteLine();
                            if (i == cmd.Parameters.Count - 1)
                            {
                                writer.WriteLine();
                            }
                        }
                    }

                    writer.Close();
                },
                OnExecuted = cmd => { }
            };

            DbInterception.Add(interceptor);

            for (int i = 1; i <= 4; i++)
            {
                if (testAll)
                {
                    m = i;
                }

                if (m == 1)
                {
                    test         = new SqlServer.SqlServerTest();
                    databaseType = DatabaseType.SqlServer;
                }
                else if (m == 2)
                {
                    test         = new MySql.MySqlTest();
                    databaseType = DatabaseType.MySql;
                }
                else if (m == 3)
                {
                    test         = new Oracle.OracleTest();
                    databaseType = DatabaseType.Oracle;
                }
                else if (m == 4)
                {
                    test         = new Postgre.PostgreTest();
                    databaseType = DatabaseType.Postgre;
                }
                //else if (m == 5)
                //{
                //    test = new SQLite.SQLiteTest();
                //    databaseType = DatabaseType.SQLite;
                //}

                string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
                fileName = baseDirectory + @"\" + databaseType + "Log.sql";
                if (System.IO.File.Exists(fileName))
                {
                    System.IO.File.Delete(fileName);
                }

                if (test != null)
                {
                    Console.WriteLine(databaseType + " BEGIN");
                    test.Run(databaseType);
                    Console.WriteLine(databaseType + " END");
                }

                if (!testAll)
                {
                    break;
                }
            }

            Console.WriteLine("回车退出~");
            Console.ReadLine();
        }
Esempio n. 9
0
        //[STAThread]
        public static void Main(string[] args)
        {
            ITest        test         = null;
            string       fileName     = string.Empty;
            DatabaseType databaseType = DatabaseType.None;
            string       s            = args != null && args.Length > 0 ? args[0] : null;

            if (!string.IsNullOrEmpty(s))
            {
                databaseType = (DatabaseType)Convert.ToByte(s);
            }

            // 命令拦截
            var interceptor = new DbCommandInterceptor
            {
                OnExecuting = cmd =>
                {
                    var writer = System.IO.File.AppendText(fileName);
                    writer.WriteLine(cmd.CommandText);
                    if (cmd.Parameters != null)
                    {
                        for (int i = 0; i < cmd.Parameters.Count; i++)
                        {
                            IDbDataParameter p = (IDbDataParameter)cmd.Parameters[i];
                            writer.Write("-- ");
                            writer.Write(p.ParameterName);
                            writer.Write(" = ");
                            writer.Write(p.Value == null ? string.Empty : (p.Value is byte[]? Common.BytesToHex((byte[])p.Value, true, true) : p.Value));
                            writer.Write(", DbType = {0}, ", p.DbType);
                            if (p.Size != default(int))
                            {
                                writer.Write("Size = {0}, ", p.Size);
                            }
                            if (p.Precision != default(byte))
                            {
                                writer.Write("Precision = {0}, ", p.Precision);
                            }
                            if (p.Scale != default(byte))
                            {
                                writer.Write("Scale = {0}, ", p.Scale);
                            }
                            if (p.Direction != ParameterDirection.Input)
                            {
                                writer.Write("Direction = {0}, ", p.Direction);
                            }
                            writer.WriteLine();
                            if (i == cmd.Parameters.Count - 1)
                            {
                                writer.WriteLine();
                            }
                        }
                    }

                    writer.Close();
                },
                OnExecuted = cmd => { }
            };

            DbInterception.Add(interceptor);


#if net40
            Console.WriteLine("- net 40 -");
#endif
#if net45
            Console.WriteLine("- net 45 -");
#endif
#if netcore
            Console.WriteLine("- net core -");
#endif

            foreach (DatabaseType item in Enum.GetValues(typeof(DatabaseType)))
            {
                if (item == DatabaseType.None)
                {
                    continue;
                }

                DatabaseType myDatabaseType = item;
                if (!string.IsNullOrEmpty(s))
                {
                    myDatabaseType = databaseType;
                }

                string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
                fileName = baseDirectory + @"\Log_" + myDatabaseType + ".sql";
                if (System.IO.File.Exists(fileName))
                {
                    System.IO.File.Delete(fileName);
                }

                List <Option> options = new List <Option>
                {
                    new Option {
                        WithNameAttribute = false, IsDebug = true, CaseSensitive = false
                    },
                    new Option {
                        WithNameAttribute = true, IsDebug = false, CaseSensitive = false
                    },
                };
                if (myDatabaseType == DatabaseType.Oracle || myDatabaseType == DatabaseType.Postgre)
                {
                    options.Add(new Option {
                        WithNameAttribute = false, IsDebug = true, CaseSensitive = true
                    });
                    options.Add(new Option {
                        WithNameAttribute = true, IsDebug = true, CaseSensitive = true
                    });
                }

                foreach (var opt in options)
                {
                    var obj = Activator.CreateInstance(null, string.Format("Riz.XFramework.UnitTest.{0}.{0}Test{1}", myDatabaseType, opt.WithNameAttribute ? "_NA" : string.Empty));
                    test                   = (ITest)(obj.Unwrap());
                    test.IsDebug           = opt.IsDebug;
                    test.CaseSensitive     = opt.CaseSensitive;
                    test.WithNameAttribute = opt.WithNameAttribute;

                    Console.WriteLine("================ " + myDatabaseType + " Begin ================");
                    Console.WriteLine(string.Format("WithNameAttribute => {0},IsDebug => {1},CaseSensitive => {2} ", opt.WithNameAttribute, opt.IsDebug, opt.CaseSensitive));
                    test.Run(myDatabaseType);
                    Console.WriteLine("================ " + myDatabaseType + " END   ================");
                    Console.WriteLine(string.Empty);

                    if (!string.IsNullOrEmpty(s))
                    {
                        break;
                    }
                }
            }

            Console.WriteLine("回车退出~");
            Console.ReadLine();
        }
Esempio n. 10
0
        //[STAThread]
        public static void Main(string[] args)
        {
            bool         isDebug       = true;
            bool         caseSensitive = false;
            ITest        test          = null;
            string       fileName      = string.Empty;
            DatabaseType databaseType  = DatabaseType.None;
            string       s             = args != null && args.Length > 0 ? args[0] : null;

            if (!string.IsNullOrEmpty(s))
            {
                databaseType = (DatabaseType)Convert.ToByte(s);
            }

            // 命令拦截
            var interceptor = new DbCommandInterceptor
            {
                OnExecuting = cmd =>
                {
                    var writer = System.IO.File.AppendText(fileName);
                    writer.WriteLine(cmd.CommandText);
                    if (cmd.Parameters != null)
                    {
                        for (int i = 0; i < cmd.Parameters.Count; i++)
                        {
                            IDbDataParameter p = (IDbDataParameter)cmd.Parameters[i];
                            writer.Write("-- ");
                            writer.Write(p.ParameterName);
                            writer.Write(" = ");
                            writer.Write(p.Value == null ? string.Empty : (p.Value is byte[] ? Common.BytesToHex((byte[])p.Value, true, true) : p.Value));
                            writer.Write(", DbType = {0}, ", p.DbType);
                            if (p.Size != default(int))
                            {
                                writer.Write("Size = {0}, ", p.Size);
                            }
                            if (p.Precision != default(byte))
                            {
                                writer.Write("Precision = {0}, ", p.Precision);
                            }
                            if (p.Scale != default(byte))
                            {
                                writer.Write("Scale = {0}, ", p.Scale);
                            }
                            if (p.Direction != ParameterDirection.Input)
                            {
                                writer.Write("Direction = {0}, ", p.Direction);
                            }
                            writer.WriteLine();
                            if (i == cmd.Parameters.Count - 1)
                            {
                                writer.WriteLine();
                            }
                        }
                    }

                    writer.Close();
                },
                OnExecuted = cmd => { }
            };

            DbInterception.Add(interceptor);

            foreach (DatabaseType item in Enum.GetValues(typeof(DatabaseType)))
            {
                if (item == DatabaseType.None)
                {
                    continue;
                }

                DatabaseType myDatabaseType = item;
                if (!string.IsNullOrEmpty(s))
                {
                    myDatabaseType = databaseType;
                }

                string baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
                fileName = baseDirectory + @"\Log_" + myDatabaseType + ".sql";
                if (System.IO.File.Exists(fileName))
                {
                    System.IO.File.Delete(fileName);
                }

                var obj = Activator.CreateInstance(null, string.Format("TZM.XFramework.UnitTest.{0}.{0}Test", myDatabaseType));
                test               = (ITest)(obj.Unwrap());
                test.IsDebug       = isDebug;
                test.CaseSensitive = caseSensitive;


                if (test != null)
                {
                    Console.WriteLine(myDatabaseType + " BEGIN");
                    test.Run(myDatabaseType);
                    Console.WriteLine(myDatabaseType + " END");
                }

                if (!string.IsNullOrEmpty(s))
                {
                    break;
                }
            }

            Console.WriteLine("回车退出~");
            Console.ReadLine();
        }