SQL Server共享内存通信协议用法

时间:2011-04-15 17:11:59

标签: .net sql-server ado.net communication-protocol

我通过互联网阅读了很多类似主题的文章和答案,但没有找到解决问题的原因。

我在同一台计算机上连接到SQL Server Express的.NET 4 Windows服务。生产中只有一次碰巧看到以下错误:

“已成功与服务器建立连接,但在登录过程中发生错误。(提供程序:命名管道提供程序,错误:0 - 管道的另一端没有进程。)” 。

如果我们使用命名管道协议,那么出现此错误的原因很明显,因为我们尚未在服务器上启用它们。但我的问题是为什么命名管道协议可以在这里使用?在连接字符串中,我们使用了“ Data Source =。\ SQLEXPRESS ”。考虑到msdn和互联网上的信息,我的理解是当“。”总是使用“共享内存协议”必须使用。那么必须发生什么以便ADO.NET SqlClient决定使用命名管道协议?

大多数时候一切正常,但我需要知道这个过程,以便我们可以在必要时防止此类错误。

提前致谢, 托多尔

1 个答案:

答案 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仅强制共享内存。