- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的服务中,我有一个后台线程,它会尽最大努力保存特定实体类型的对象流。代码大致如下:
while (AllowRun)
{
try
{
using (DbContext context = GetNewDbContext())
{
while (AllowRun && context.GetConnection().State == ConnectionState.Open)
{
TEntity entity = null;
try
{
while (pendingLogs.Count > 0)
{
lock (pendingLogs)
{
entity = null;
if (pendingLogs.Count > 0)
{
entity = pendingLogs[0];
pendingLogs.RemoveAt(0);
}
}
if (entity != null)
{
context.Entities.Add(entity);
}
}
context.SaveChanges();
}
catch (Exception e)
{
// (1)
// Log exception and continue execution
}
}
}
}
catch (Exception e)
{
// Log context initialization failure and continue execution
}
}
(这主要是实际代码,我省略了一些不相关的部分,这些部分试图将弹出的对象保存在内存中,直到我们能够在 (1)
捕获异常时再次将内容保存到 DB > 阻止)
因此,从本质上讲,这是一个无限循环,试图从某个列表中读取项目并将它们保存到 Db。如果我们检测到与数据库的连接由于某种原因失败,它只会尝试重新打开它并继续。问题是有时(到目前为止我还没有弄清楚如何重现它),上面的代码在调用 context.SaveChanges()
时开始产生以下异常(在 (1 )
block ):
System.Data.EntityException: An error occurred while starting a transaction on the provider connection. See the inner exception for details. --->
System.InvalidOperationException: The requested operation cannot be completed because the connection has been broken.
错误已记录,但当执行返回到 context.GetConnection().State == ConnectionState.Open
检查时,它的计算结果为 true。因此,当上下文报告其数据库连接已打开时,我们处于一种状态,但我们无法针对该上下文运行查询。重新启动服务可解决问题(以及在调试器中扰乱 AllowRun
变量以强制重新创建上下文)。所以问题是因为我不能信任上下文的连接状态,我如何验证我可以对数据库运行查询?
此外,是否有一种干净的方法来确定连接是否处于“健康”状态?我的意思是,EntityException
本身并不表示我应该重置连接,只有当它的 InnerException 是带有某些特定消息的 InvalidOperationException
时,是的,是时候重置它。但是,现在我猜还会有其他情况,ConnectionState 指示一切正常,但我无法查询 DB。我能否主动捕捉它们,而不是等到它开始咬我?
最佳答案
日志频率是多少?
如果此循环花费的时间超过连接超时时间,则在执行 savechanges 时关闭连接。
while (pendingLogs.Count > 0)
{
lock (pendingLogs)
{
entity = null;
if (pendingLogs.Count > 0)
{
entity = pendingLogs[0];
pendingLogs.RemoveAt(0);
}
}
if (entity != null)
{
context.Entities.Add(entity);
}
}
context.SaveChanges();
关于c# - DB ConnectionState = Open 但 context.SaveChanges 抛出 "connection broken"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40519027/
我正在处理一个巨大的 xml 文档(其中包含大约一百万个条目),然后使用 rabbitmq 将格式化版本导入数据库。每次发布大约 200,000 个条目后,我都会收到一个 broken pipe 错误
2022-06-27 10:01:17.501 ERROR 1 --- [nio-5010-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Ser
当我在删除软件包时看到奇怪的行为时,我有点像 linux 新手并且一直在设置我的系统。 即,当我尝试使用 Synaptic 删除新安装的软件包时,它有时会提示该软件包已损坏并且我无法完成我的任务。第二
为什么我会收到“xyz 上的内部链接损坏”,其中 xyz 不是托管网站的服务器的 IP 地址? 更具体地说:我的网站地址是“myExample.com”,还有另一个 IP 地址,我们称之为“anoth
我正在用 Java 编写一个简单的服务器,并且我能够在服务器端检索来自客户端的传入数据,但由于 2000 毫秒的超时而无法在客户端检索传入数据。有谁知道为什么会超时? 这是服务器的代码: privat
使用此 HTML 和 CSS: code { background-color: grey; padding: 2px 7px; line-height: 24px; /* this do
这是一个页面,如果设备无法连接,我将尝试从文件系统加载备份 var
为什么该模式被认为已损坏?我觉得还好吗?有什么想法吗? public static Singleton getInst() { if (instace == null) createInst(
根据documentation : Once an iterator’s __next__() method raises StopIteration, it must continue to do
可能是一个业余爱好者的标志,我想知道问题是不是公案(而不是我),但是,考虑一下这个公案 def test_calling_global_methods_without_parentheses
我正在使用 chrome://inspect/#devices通过cordova检查我的android-app构建的WebView。它在我的 Mac 上运行模拟器。可以找到该设备,但如果我在 WebV
我有一个 headless Ubuntu 服务器。我从 Mac 上通过 SSH 在服务器上运行命令(snapraid 同步)。指挥说大约需要6个小时,所以我就留了一夜。 当我今天早上下来时,Mac 上
我正在实现与 Android 应用程序通信的服务器端应用程序。安卓应用程序之前已经实现了原来与C++ Server的通信。现在我想用java代码替换C++服务器。 Android 应用程序与服务器通信
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我对 2D 引擎的世界还很陌生。我弄清楚了如何加载图像并将其显示为 Sprite 和其他东西,但有一个问题困扰着我。例如,当“火箭”击中一个物体时,它会对其造成伤害并留下一个弹坑。我想在那个物体上显示
我无法使用 IF 语句来执行“正确”的操作,即代码; public function getUID($email) { $query = $this->dbh->prepare("SELECT
我认为这是一个非常简单的设置,但不知何故我遗漏了一些东西...... 这是传出的 HTML。这是一个简单的固定宽度 2 列布局: ... ... ... ...
我在使此布局在 IE 中正常工作时遇到了一些问题。问题是,当我有一些小型大写字母、带下划线的文本时,将垂直对齐设置为中间的图像会打断下划线。小写字母的下划线向下移动。 See the picture.
我正在使用 YUI 来重置浏览器类,然后我带来了 在几个自定义样式表中...我已经看到这种情况发生了几次,但我认为我从未缩小过原因范围: 表格正在拉入图像以组成带阴影的方形表格...但由于某种原因,它
在这个片段中我有两个部分。 第一个显示两列(使用 display: flex;)和一个列上方的标题。我必须使用一个中间标签(在本例中为文章)将“flex”保持在原位。 但我想知道是否有一个 CSS 属
我是一名优秀的程序员,十分优秀!