2

我正在使用 EF 处理具有多个应用程序和服务的站点,并且数据库抛出以下错误:

 The server will drop the connection, because the client driver has sent multiple 
 requests while the session is in single-user mode. This error occurs when a client 
 sends a request to reset the connection while there are batches still running in 
 the session, or when the client sends a request while the session is resetting 
 a connection. Please contact the client driver vendor.

因此,我搜索了每个应用程序和服务的连接字符串,以确保启用了 MultipleActiveResultSets,并且在所有连接中都启用了。

所以运行以下查询

SELECT 
    c.session_id, c.net_transport,
    s.host_name, 
    s.login_name
    , c.connect_time
FROM sys.dm_exec_connections AS c
JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id
ORDER BY login_name

并看到我为相同的 Login_name(相同的应用程序)有多个连接,但有些连接有 TCP net_transport 和其他“会话”,对于相同的 login_name(相同的连接字符串)

什么可能导致某些连接使用 TCP 而不是 Session?

编辑: 此查询返回例如:

session_id   net_transport   host_name    login_name   connect_time                  
196           TCP             P3417722     UserName    2015-01-05 08:57:58.437   
196           SESSION         P3417722     UserName    2015-01-05 08:57:58.437   
.
.
.

请注意,两者都具有相同的 session_id 和相同的 connect_time。

这意味着我有两个使用相同用户名的连接,但一个启用了“Mars”而另一个没有?

4

1 回答 1

0

是的,我一直在我的服务器上看到这一点。

由于使用了连接池技术,某些框架(EF6、LINQ)可以同时拥有 TCP 和 SESSION 连接。

我最喜欢的是 Session 应该是 TCP+MARS ;)

于 2022-01-14T13:08:15.583 回答