从服务器接收结果时发生传输级错误。 “管道已经结束了。”
Posted
技术标签:
【中文标题】从服务器接收结果时发生传输级错误。 “管道已经结束了。”【英文标题】:A transport-level error has occurred when receiving results from the server. "The pipe has been ended." 【发布时间】:2018-06-11 08:29:17 【问题描述】:我目前在连接 SQL localdb 的 SQL 服务器 express 实例的构建服务器上运行一些单元测试时遇到以下异常。
System.Data.SqlClient.SqlException: A transport-level error has occurred when receiving results from the server. (provider: Named Pipes Provider, error: 0 - The pipe has been ended.) ---> System.ComponentModel.Win32Exception: The pipe has been ended.
由于各种原因,例如读取或插入单元测试的测试数据,此错误最近一直弹出。
我们的开发机器和构建服务器使用 SQL 本地数据库 (MSSQLLOCALDB) 的默认实例,我们只在构建服务器上看到过这个问题。这可能是因为构建服务器在同一台服务器上并行运行多组单元测试,并且管道正在为我们结束吗?每组单元测试都使用自己的数据库,因此它们不应相互冲突。
查看 Stack Overflow 和 Google 上的类似问题,我尝试通过为 SQLEXPRESS 启用“命名管道”和“TCP/IP”协议来解决该问题,但未能成功解决该问题。
任何帮助将不胜感激,如果需要,我可以提供任何额外信息。
谢谢
【问题讨论】:
我们能看到抛出这个异常的区域周围的代码吗?我猜你是用 C# 编写的。 @Dragonthoughts 是的,我们正在为我们的 ORM 使用 C# 以及 Dapper 和 Dapper Extensions 的混合。这是 Dapper 的最小方法,我们只是调用标准的 Dapper Extensions 插入方法,如此处所示 (github.com/tmsmith/Dapper-Extensions#simple-insert-operation)。到目前为止,我们的方法实现还没有看到这个错误,只是单元测试抛出了这个异常。 【参考方案1】:原来我们用于创建本地数据库的 nuget 包比预期更早地关闭了默认实例的管道。我们通过为每组测试创建一个新的 localdb 实例并在测试运行后删除该实例来解决此问题。
【讨论】:
以上是关于从服务器接收结果时发生传输级错误。 “管道已经结束了。”的主要内容,如果未能解决你的问题,请参考以下文章
记一次数据库奇怪问题 “在从服务器接收结果时发生传输级错误。 (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。)"...
在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。)