我通过互联网阅读了很多类似主题的文章和答案,但没有找到解决问题的原因。
我在同一台计算机上连接到SQL Server Express的.NET 4 Windows服务。生产中只有一次碰巧看到以下错误:
“已成功与服务器建立连接,但在登录过程中发生错误。(提供程序:命名管道提供程序,错误:0 - 管道的另一端没有进程。)” 。
如果我们使用命名管道协议,那么出现此错误的原因很明显,因为我们尚未在服务器上启用它们。但我的问题是为什么命名管道协议可以在这里使用?在连接字符串中,我们使用了“ Data Source =。\ SQLEXPRESS ”。考虑到msdn和互联网上的信息,我的理解是当“。”总是使用“共享内存协议”必须使用。那么必须发生什么以便ADO.NET SqlClient决定使用命名管道协议?
大多数时候一切正常,但我需要知道这个过程,以便我们可以在必要时防止此类错误。
提前致谢, 托多尔
答案 0 :(得分:4)
您应该在sys.dm_exec_connections
查看您的服务器,看看您的客户实际使用了哪种网络传输。
通常,客户端尝试SM(如果是本地服务器),然后尝试NP,然后尝试TCP。尝试连接到(local)
遵循相同的规则,如果它不会,那么如果服务器不在SM协议上监听,则工具和应用无法连接到本地服务器!您看到错误指示客户端尝试NP指向SM尝试失败的情况,这可能是由于服务器繁忙,或者服务器正在重新启动或类似情况。系统事件日志和ERRORLOG可能在发生此问题时包含更多信息。
您可以通过修改连接字符串来强制客户端使用特定协议,按How to use the server name parameter in a connection string to specify the client network library,使用servername=lpc:.\SQLEXPRESS
仅强制共享内存。