/// <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 }
// 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(); }
// 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(); }
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(); }
//[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(); }
//[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(); }