1

我正在使用命名管道连接到使用 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] 不会停止它的工作。所以这也很好用。不希望这是一个红鲱鱼。

4

0 回答 0