1

少し背景:

私は、北米の約 40 人の現場従業員が使用している Windows .NET アプリケーションを持っています。このプログラムにより、ユーザーは現場 (インターネット アクセスから離れている) にいる間にデータを入力でき、夜間に Sql Server 2005 データベースに同期されます。数日前、2 人のユーザーが、サーバー データベース (.NET の SqlConnection クラスを使用) に接続しようとするアクションを実行したときに、次のエラーが発生したと報告しました。

System.Data.SqlClient.SqlException: SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Server への接続を開けませんでした)

私たちの現場の従業員は通常、ホテルの Wi-Fi 接続で作業しています。最初は、2 人とも偶然にも同じ日に「非協力的な」ネットワークに接続したと思っていました。翌日、別のホテルに移動したところ、これらのユーザーの 1 人では問題が解消されましたが、もう 1 人では問題が続きました。

エラー メッセージを提供するだけでなく、この背景の目的は次のことを指摘することです。

  • この問題は、このソフトウェアを 1 年以上使用して初めて発生したものであり、
  • ユーザーの大半は、同じソフトウェアを使用してサーバー データベースに接続しても問題はありません。

これにより、問題がサーバーにあると考えるのを躊躇します (このエラーについて読んだほとんどのフォーラムやブログでは、SQL Server が適切に構成されていることを確認するための手順が提供されています)。

エラー メッセージの名前付きパイプ プロバイダーの部分に気付き、おそらくこのユーザーのコンピューターまたはネットワークが原因で、TCP ではなくパイプ経由で接続を試みているのではないかと推測したので、リモートで TCP/IP と名前付きパイプの両方を許可するようにサーバーを構成しようとしました。以前は TCP/IP のみに設定されていました。この設定を変更した後、この 1 人のユーザーに対してエラーが続きました。

そこで、この 1 人のユーザーのコンピューター、ソフトウェア、インターネット接続の何が特別で、SQL Server への接続を妨げているのかについてブレインストーミングを行う必要があります。

私たちの接続文字列はサーバーの URL (IP アドレスではない) を使用していますが、彼のラップトップがそのアドレスで URL を見つけるのに問題があるのではないかと思いました。しかし、彼は同じ URL からホストされている Web サイトにアクセスできたので、問題は別の場所にあると思います。

どんなアイデアでも大歓迎です。ありがとう!

4

2 に答える 2

3

おそらく、この問題をすでに解決しているか、先に進んでいると思いますが、SQL サーバー インスタンスに接続するときにエラー 40/名前付きパイプの問題で同様の問題を抱えている場合は、次の簡単な解決策が役に立ちました。

接続文字列にプレフィックスを追加することで、クライアント プログラムに TCP (または名前付きパイプ、またはその他の利用可能な方法) を強制的に使用させることができます。

.NET SQLConnection の例では、SQLConnection の接続文字列で次のように指定します。

Server=tcp:192.168.0.1;Integrated Security=SSPI; database=sampledb

詳細については、このブログ エントリを参照してください。

于 2012-11-20T23:49:31.440 に答える
1

特定のポートでのみトラフィックを許可する可能性があるホテルのファイアウォールによってブロックされている可能性はありますか?

于 2010-07-09T02:56:15.167 に答える