我正在使用命名管道连接到使用 EF Code First 的数据库。它在正常的页面请求生命周期中运行良好。
我正在生成一个单独的线程来发送一批电子邮件。该线程被传递一个连接字符串(命名管道)并使用该连接字符串创建一个新的 dbcontext。但由于某种原因,它无法连接:
The underlying provider failed on Open.
如果我将连接字符串切换为用户名密码形式,线程工作正常。
任何人都知道为什么命名管道在正常页面执行中很好但不是线程?
我们的登台服务器是我们使用命名管道的唯一非实时服务器,因此很难追踪到这一点,但它在新的 DbContext 上出错。
示例代码:
var contextConnectionString = dataAccessLayer.ConnectionString;
Task.Factory.StartNew(() =>
{
// Errors on the next line I think
using (var threadSafeDataAccessLayer = new PaladinContext(contextConnectionString))
{
...
}
}
以防万一我在连接字符串中做错了,这里有一个失败的想法:
Data Source=[SERVERNAME]\[INSTANCE_NAME]; Initial Catalog=[correct db name];Integrated Security=SSPI; MultipleActiveResultSets=true
一个成功的:
Data Source=[full url to server]; Initial Catalog=[correct db name]; User Id=[user]; Password=[password];MultipleActiveResultSets=true
重申一下,连接字符串仅在生成的线程中失败。这和我在其他地方使用的一样。
[更新] 在工作连接字符串中,更改 Data Source=[SERVERNAME][INSTANCE_NAME] 不会停止它的工作。所以这也很好用。不希望这是一个红鲱鱼。