“登录失败”错误从未再次出现,好奇吗?但是,其他连接错误似乎可以通过猛击服务器来解释。错误发生的随机性仍然是一个谜。
登录失败。登录来自不受信任的域,不能用于 Windows 身份验证
我想让我的代码并行运行,所以我将 foreach 循环更改为并行 foreach 循环。这似乎很简单。每个循环都连接到数据库,查找一些内容,执行一些逻辑,添加一些内容,关闭连接。但我得到上述错误?
我正在使用我的本地 sql 服务器和实体框架(每个循环都使用它自己的上下文)。使用相同的本地登录名连接多次是否有问题?我是如何解决这个问题的?
我已经(在尝试转换为 parallel.foreach 循环之前)将我正在 foreach 循环的对象列表拆分为四组(单独的 csv 文件)并运行我的程序的四个并发实例(总体上运行速度比一个快,因此并行的想法)。所以似乎连接到数据库不应该是一个问题?
有任何想法吗?
编辑:这是以前
var gtgGenerator = new CustomGtgGenerator();
var connectionString = ConfigurationManager.ConnectionStrings["BioEntities"].ConnectionString;
var allAccessionsFromObs = _GetAccessionListFromDataFiles(collectionId);
ForEach(cloneIdAndAccessions in allAccessionsFromObs)
DoWork(gtgGenerator, taxonId, organismId, cloneIdAndAccessions, connectionString));
后
var gtgGenerator = new CustomGtgGenerator();
var connectionString = ConfigurationManager.ConnectionStrings["BioEntities"].ConnectionString;
var allAccessionsFromObs = _GetAccessionListFromDataFiles(collectionId);
Parallel.ForEach(allAccessionsFromObs, cloneIdAndAccessions => DoWork(gtgGenerator, taxonId, organismId, cloneIdAndAccessions, connectionString));
在 DoWork 内部,我使用 BioEntities
using (var bioEntities = new BioEntities(connectionString)) {...}
越来越好奇了……
我在 DoWork 方法中添加了一些代码:
Debug.WriteLine(“Executing “ + itemName + ” as “ + WindowsIdentity.GetCurrent().Name);
它神秘地开始工作(实际上很好/很快)。但最终我得到了同样的例外(大约一个小时后)。但我能够追踪到这个..?
A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
EDIT2: 嗯..我今天早上进来工作并把它烧了(痴迷于理解为什么它会工作一点点),到目前为止它工作得很好(而且很快!)。偶尔:线程 '' (0x27c8) 以代码 0 (0x0) 退出。线程 '' (0x26b8) 以代码 0 (0x0) 退出。
但除此之外,它还没有搞砸吗?坦率地说,这让我更担心。这是一次性的,所以我可以使用它(如果它有效),但发生了什么?会不会是 NLOG,登录多个线程会阻塞东西并导致 sql 超时?我真的不明白。一旦它再次停止工作,我将尝试解决问题。有没有办法重置 sql server,我不知道为什么它会工作一个小时,然后搞砸,然后永远不会工作超过几秒钟,现在(重新启动后)工作(大约 30 分钟至今)?