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_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 が同じであることに注意してください。

これは、同じユーザー名で 2 つの接続があることを意味しますが、1 つは "Mars" が有効になっており、もう 1 つは有効になっていませんか?

4

1 に答える 1

0

ええ、私は私のサーバーで常にそれを見ています。

一部のフレームワーク (EF6、LINQ) では、接続プーリング技術を使用しているため、TCP 接続と SESSION 接続を同時に持つことができます。

私のお気に入りは、Session は TCP+MARS であるべきだということです;)

于 2022-01-14T13:08:15.583 に答える