我设置了数据库镜像,然后使用了这个 connectionstring 连接到它:

    Data Source={0};Failover Partner={1};Initial Catalog=AdventureWorks;
    Integrated Security=True;

在数据库中添加一些数据后,我关闭主体服务器,因此镜像服务器成为主体服务器。我再次打开连接,出现此错误:

    System.Data.SqlClient.SqlException: A transport-level error has 
occurred when sending the request to the server. (provider: Shared Memory 
Provider, error: 0 - No process is on the other end of the pipe.)

我认为通过在连接字符串中指定故障转移伙伴,ADO.NET 将为我完成这项工作。那我现在该怎么办呢?

有帮助吗?

解决方案

幸运的是,我固定了这个问题。所有我需要做的就是调用ClearPool方法:

SqlConnection.ClearPool(conn);

此方法将清除连接池。然后,问题不见了。我很高兴。

感谢您,所有的你,对我们的支持。 :d

其他提示

我不会.NET的东西的专家,但你需要将SQL Native Client(SQLNCLI)来处理故障转移。 “ado.net” 可以是SQLOLEDB

截至到Windows Server 2003,至少它不是默认安装的。这是不是独立或SQL客户端工具的一部分,所以我怀疑你使用SQLOLEDB

在你关机的校长,你验证故障转移实际上成了校长?如果没有在SQL Server上自动故障转移,那么你的镜子仍然是一面镜子。

我们发现,如果您没有设置足够大的超时,就会发生这种情况。

https://serverfault.com/questions/249589/db-auto-failover-in-c-does-not-work-when-the-principal-server-physically-goes-o

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top