Tag: enterprise library

exception处理应用程序块exception在ASP.NET中运行的处理程序无法调用Response.End()

使用.NET 3.5,ASP.NET,Enterprise Library 4.1exception处理和日志块,我编写了一个自定义exception处理程序来显示标准错误页面,如下所示: [ConfigurationElementType(typeof(CustomHandlerData))] public class PageExceptionHandler : IExceptionHandler { public PageExceptionHandler(NameValueCollection ignore) { } public Exception HandleException(Exception ex, Guid handlingInstanceID) { HttpResponse response = HttpContext.Current.Response; response.Clear(); response.ContentEncoding = Encoding.UTF8; response.ContentType = “text/html”; response.Write(BuildErrorPage(ex, handlingInstanceID)); response.Flush(); //response.End(); // SOMETIMES DOES NOT WORK return ex; } } 这是从这样的exception处理策略调用的: 一切正常,除了错误页面被合并到错误发生时显示的任何标记。 我认为将response.End()添加到exception处理程序中可以解决这个问题。 它确实如此,但我随后观察到,有时,ASP.NET在尝试结束响应流时抛出ThreadAbortException 。 这是唯一无法捕获和忽略的exception类型。 哎呀! 谁能告诉我: […]

企业库滚动平面文件没有滚动

我正在尝试轮换日志文件,每周一天,此配置文件无法正常工作。 如果我将其更改为旋转而不是午夜到分钟,则仅记录一个持续一分钟的单个文件。 没有生成新文件。 最新版本的entreprise库是否有任何已知错误,专注于滚动平面文件无法正常工作? 我当前的配置有问题吗? 谢谢!

在MS Enterprise Library或Log4net等第三方组件上创建包装器是一个好习惯吗?

这更像是一个很好的练习题。 我想提供不同的通用库,如Logging,caching等。有很多第三方库,如MS企业库,log4Net,NCache等。 我想知道它是一个很好的做法,直接使用它们或在每个服务上创建包装器并使用DI在代码中注入该服务。 问候

无法解析符号’EnterpriseLibraryContainer’

我刚刚开始试用新的MS Enterprise Library 6.0 Logger块。 当我尝试创建LogWriter时,我收到错误: 无法解析符号’EnterpriseLibraryContainer’ 我有所有的引用和使用,但无法通过此错误。 这个问题有解决方案吗?

使用ODP.NET与企业库DAAB连接Oracle

我们的应用程序使用Enterprise Library DAAB来支持oracle和sql数据库。 其中一个存储过程用于将图像上载到表格。 它是一个BLOB字段,参数设置为DbType.Binary。 这个function对SQL没有任何问题,但是当遇到Oracle时,我遇到了32K参数大小限制问题。 正如SO中所建议的那样,我将代码移到了ODP.NET,但我仍面临同样的问题。 我的App.config文件设置: 在我的应用程序代码中,我使用企业库来访问数据库 Database db = DatabaseFactory.CreateDatabase(); DbCommand cmd = db.GetStoredProcCommand(spName); cmd.CommandType = CommandType.StoredProcedure; db.AddInParameter(cmd, “DOCIMAGE”, DbType.Binary, GetByteArrayFromFile(filePath)); db.AddOutParameter(cmd, “return_value”, DbType.Int32, 128); int row = db.ExecuteNonQuery(cmd); 我的项目中引用了以下程序集: 现在,当我运行应用程序时,Ent Lib DAAP应该使用Oracle.DataAccess.Client,但它仍然通过System.Data.OracleClient连接到oracle db。 所以还有32K的限制。 为什么它没有使用Oracle数据提供程序,因为我已在App.config中明确提到过? 在一篇文章中,提到使用以下代码段作为解决方法, DbProviderFactory providerFactory = DbProviderFactories.GetFactory(“Oracle.DataAccess.Client”); Database db = GenericDatabase(connectionString, providerFactory); 这个看起来很有效。 但实例化的数据库是GenericDatabase而不是OracleDatabase,这可能就是为什么即使这个工作仍然在文件大小超过32K时抛出exception。 如何将ODP.NET与Enterprise Library一起用于32K大小限制问题? 决议 : […]

使用Enterprise Library从ASP.NET传递(数据表)到SQL Server

public void updateSkills(DataTable candidateSkillSets) { string sqlCommand = “Sp_Candidate”; DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand); db.AddInParameter(dbCommand, “candidateSkillSets”,DbType.Object, candidateSkillSets); db.ExecuteNonQuery(dbCommand); } 我有一个像上面这样的方法,这里我通过添加参数将数据表传递给存储过程。“DbType.Object”没有采用数据表类型。 我知道在ADO中我们可以使用“SqlDbType.Structured”,但是对于企业库,它不起作用。 我必须使用什么? 执行命令时出现以下错误 “传入的表格数据流(TDS)远程过程调用(RPC)协议流不正确。参数1(”@candidateSkillSets“):数据类型0x62(sql_variant)具有类型特定元数据的无效类型。”

升级到Enterprise Library 6.0会出现“EnterpriseLibraryContainer”问题

升级到Enterprise Library 6.0后,我遇到以下问题: private static IUnityContainer container = EnterpriseLibraryContainer.Current.GetInstance(); 无法解析EnterpriseLibraryContainer 我在stackoverflow上发现了另一篇关于EnterpriseLibraryCOntainer的post 在Enterprise Library的升级说明中,它指出: “当前上下文中不存在名称’EnterpriseLibraryContainer’ 所有块的引导代码在Enterprise Library的第6版中已更改。 这些块不再使用Unity来管理初始化和配置,现在每个块都包含自己的引导代码。 对EnterpriseLibraryContainer.Current.GetInstance方法的任何调用以解析其中一个Enterprise Library块的类型都应该替换为块特定的引导代码。 例如,要基于app.config文件中的配置创建LogWriter实例,现在可以使用以下代码:LogWriterFactory logWriterFactory = new LogWriterFactory(); var logWriter = logWriterFactory.Create(); 但我不知道如何处理IUnityContainer的情况。 我可以用吗? IUnityContainer容器=新的UnityContainer? 谢谢你的帮助

BackgroundWorkerexception处理

我正在使用以下组件: 图书馆(引发例外) 测试我的日志记录的测试控制台 企业库exception处理应用程序块 企业库日志应用程序块 我正在使用backgroundworker调用库方法。 库会抛出exception,但永远不会调用RunWorkerCompleted处理程序。 捕获exception的唯一方法是使用try / catch块包围我的DoWork处理程序代码。 是否误解了RunWorkerCompletedEventArgs.Error属性? 是不是因为获得了BackgroundWorker捕获的exception? Codesample: static BackgroundWorker w = new BackgroundWorker(); w.DoWork += new DoWorkEventHandler(w_DoWork); w.RunWorkerCompleted += new RunWorkerCompletedEventHandler(w_RunWorkerCompleted); w.RunWorkerAsync(); static void w_DoWork(object sender, DoWorkEventArgs e) { MyClass m = new MyClass(); w.result = m.Compute(); } static void w_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null) […]

使用三元语法将参数设置为DBNull.Value会产生错误?

我有以下代码来设置一个参数,该参数将在INSERT语句中用于在SQL Server数据库中设置VARCHAR列。 我的值对象(名为ilo)有一个名为Description的属性,它被初始化为String.Empty,然后被设置为从XML读取的某个值,或者如果该XML元素为空,它只保留为String.Empty。 因此,当插入数据库时​​,如果属性仍设置为String.Empty,我想让它插入一个空值。 database.AddInParameter(cmd, “@description”, DbType.String, (ilo.Description.Equals(string.Empty)) ? DBNull.Value : ilo.Description); 所以基本上我是说,如果ilo.Description等于string.empty,请将参数设置为DBNull.Value,否则将其设置为ilo.Description。 这在Visual Studio中出现以下错误… 错误141无法确定条件表达式的类型,因为’System.DBNull’和’string’之间没有隐式转换 为什么? 奇怪的是,我可以做到以下没有错误,这应该与使用上面的内联条件语法完全相同!?! if(ilo.Description.Equals(string.Empty)) { database.AddInParameter(cmd, “@description”, DbType.String, DBNull.Value); } else { database.AddInParameter(cmd, “@description”, DbType.String, ilo.Description); } 我搜索了其他post,找到了下面的post,但它并没有真正回答我的问题。 EntLib将“空”值绑定到参数的方法 我对WHY更感兴趣,因为明显的解决方法是使用if / else语句而不是内联(三元)语法? 在这个链接上有一个答案,但我想要一个更好的解释,因为它似乎是我的BS,这不起作用; 我称之为虫子! http://msdn.microsoft.com/en-us/library/ty67wk28.aspx

在Unity中使用抽象工厂作为注入?

我在一些控制器实例中注册了一个抽象工厂注入。 我可以注册那个抽象工厂并将其用作注塑工厂吗? 这就是我所拥有的: public interface ILevelFactory { Levels Create(); } .RegisterType() .RegisterType(new InjectionFactory((c) => StaticLevelFactory.GetLevels())) 期望的情况: .RegisterType() .RegisterType(*** look up and use ILevelFactory ***) 简而言之,我想摆脱StaticLevelFactory。