我正在使用一个站点,其中包含多个使用 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_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",另一个没有?
是的,我一直在我的服务器上看到这一点。
由于使用了连接池技术,某些框架(EF6、LINQ)可以同时具有 TCP 和 SESSION 连接。
我的宠物是会话应该是TCP + MARS;)