5

インターネットで同様のトピックの記事と回答をたくさん読みましたが、問題の理由が見つかりませんでした。

同じマシン上の SQL Server Express に接続する .NET 4 Windows サービスがあります。本番環境で 1 回だけ、次のエラーが表示されました。

「サーバーとの接続は正常に確立されましたが、ログイン プロセス中にエラーが発生しました。(プロバイダー: 名前付きパイプ プロバイダー、エラー: 0 - パイプの反対側にプロセスがありません。)」.

名前付きパイプ プロトコルを使用している場合、このエラーが発生する理由は明らかです。これは、サーバーでそれらを有効にしていないためです。しかし、ここで私の質問は、名前付きパイププロトコルをここで使用できる理由は何ですか? 接続文字列では、" Data Source=.\SQLEXPRESS " を使用しました。msdn およびインターネット上の情報を念頭に置いて、「.」常に「共有メモリ プロトコル」を使用する必要があります。では、ADO.NET SqlClient が代わりに名前付きパイプ プロトコルを使用することを決定するには、どうすればよいのでしょうか?

ほとんどの場合、すべてが正常に機能していますが、必要に応じてこの種のエラーを防止できるように、プロセスを知る必要があります。

前もってありがとう、トドル

4

1 に答える 1

4

サーバーを見てsys.dm_exec_connections、クライアントが実際に使用しているネットトランスポートを確認する必要があります。

通常、クライアントは、ローカル サーバーの場合は SM を試行し、次に NP を試行し、次に TCP を試行します。サーバーがSM プロトコルをリッスンしない場合、同じルールに従うために接続を試み(local)ます。そうしないと、ツールとアプリはローカル サーバーに接続できません。クライアントが NP を試行したことを示すエラーが表示されるという事実は、SM の試行が失敗した状況を示しています。これは、サーバーのビジー状態が原因で発生する可能性があるか、サーバーが再起動中または同様の場合に発生する可能性があります。システム イベント ログと ERRORLOG には、この問題が発生したときの詳細情報が含まれている場合があります。

How to use the server name parameter in a connection string to specify the client network libraryに従って、接続文字列を変更することにより、クライアントが特定のプロトコルを使用するservername=lpc:.\SQLEXPRESSように強制できます。共有メモリのみを強制的に使用します。

于 2011-04-15T17:29:15.300 に答える