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

Tod*_*rov 5 .net sql-server ado.net communication-protocol

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

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

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

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

大多数时候一切都工作得很好,但我需要知道这个过程,以便我们可以在需要时防止此类错误.

提前谢谢,托多尔

Rem*_*anu 4

您应该查看您的服务器sys.dm_exec_connections并查看您的客户端实际使用的网络传输。

通常,如果本地服务器,客户端会尝试 SM,然后尝试 NP,最后尝试 TCP。尝试连接以(local)遵循相同的规则,如果不这样做,那么如果服务器不侦听SM 协议,工具和应用程序将无法连接到本地服务器!事实上,您看到指示客户端尝试 NP 的错误表明 SM 尝试失败,这可能是由于服务器繁忙、服务器正在重新启动或类似情况而发生。系统事件日志和 ERRORLOG 可能包含发生此问题时的更多信息。

您可以通过修改连接字符串来强制客户端使用特定协议,如如何使用连接字符串中的服务器名称参数来指定客户端网络库servername=lpc:.\SQLEXPRESS仅使用强制共享内存。