数据库异常之后的SQL超时



我正在使用Castle ActivereCord作为我的ASP.NET WebApplication中的ORM。我正在使用他们的SessionPerrequest诉求,这很好。但是,如果在数据库级别上发生错误(F.E.删除项目或截断错误时的约束错误(字符串或二进制数据将被截断。))我会在错误之后运行的所有查询。这发生了大约十分钟,然后一切都很好。我认为这与交易未正确完成有关。我似乎找不到在错误后正确关闭交易的方法,因此我现在希望最大程度地减少效果。我尝试将命令超时和连接超时设置为较小的数字,但这似乎不起作用。有人知道如何解决这个问题吗?

据我了解您的情况,您的问题有两种可能的来源:

1。数据基准 - 服务器 - 配置您没有使用您正在使用的数据库,所以我只能猜测。如果SQL-Commands引起锁,则可能会等待导致异常并且永远无法解决的旧命令(又称超时)。如果事务存储在日志文件中,则日志文件可能在物理上已经满(非常不可能),并且在解决导致例外的旧命令之前,无法存储未来的命令(aka。Timeout)。可能会有 - 取决于数据库系统 - 通过错误的其他原因的hundrets。以敏捷的方式,很容易测试,如果它是由数据库引起的,那么您只能使用SQL-Commands启动新请求,没有NHIBERNATE,更适合于Wards Data-Base-Experts。如何测试,如果是数据库配置问题?简单的。您只需要引起错误,然后使用管理工具(例如MS SQL Server Management Studio,Oracle SQL Developer等)即可发送相同的SQL-Command,以便与您的软件发送一样。如果来自管理工具的此命令与您的软件具有相同的问题,则是数据库配置问题,您应该能够仅在数据库中复制并求解它。如果管理工具的货币在没有超时的情况下解决,则问题在您的软件的代码或配置中。

2。sessionperrequest不起作用我想,随着"发生约10分钟的发生",您的意思是,在不使用软件10分钟后(大约),问题就会停止。我还猜想,如果您不再休息时间将新的请求从浏览器发送到服务器(IIS),则问题将持续10分钟。这意味着EITER iis-web-Session或iis-application-pool(均由您的软件使用)可以超时并处置了所有静态变量,每个会话变量,每个会话变量以及存储在其中那里!如果您想使用SessionPerreQuest解决方案来避免此问题,那么您必须自己实现SessionPerrequest abreach!您必须在应用程序开始时在应用程序中具有新的NHIBERNATE-SESSION,并在请求结束时处置其自己的Nhiberante-sessionnHibernate本身,无法通过任何配置来激活,您必须自己编码。

问候juy juka

最新更新