Docs Menu
Docs Home
/ / /
C#/.NET

接続のトラブルシューティング

項目一覧

  • 接続エラー
  • 接続stringを確認する
  • ファイアウォールを構成する
  • 認証エラー
  • 接続stringを確認する
  • MongoClientSettings プロパティを確認する
  • 認証データベースでユーザーが であることを確認
  • X. 509認証情報エラー
  • ディスク上の証明書の作成と保存
  • メッセージの送信エラー
  • ユーザー権限の確認
  • ファイアウォールを構成する
  • 接続数の確認
  • オープンな接続が多すぎる
  • 接続数の確認
  • タイムアウト エラー
  • connectTimeoutMS の設定
  • 接続数の確認

このページでは、MongoDB .NET/C# ドライバーを使用して MongoDB の配置に接続する際に発生する可能性のある問題に対する潜在的な解決策を提供します。

注意

このページでは、接続の問題のみを説明します。 MongoDB またはドライバーに関するその他の問題が発生した場合は、次のリソースにアクセスしてください。

  • .NET/C# ドライバーのよくある質問(FAQ)

  • 問題とヘルプ」ページには、バグの報告、ドライバーへの貢献、および追加リソースの検索に関する情報が記載されています

  • MongoDB Community フォーラム では、質問、ディスカッション、または一般的なテクニカルサポートが受けられます。

次のエラー メッセージは、ドライバーが指定されたホスト名またはポートでサーバーに接続できないことを示しています。 このエラー メッセージは、複数の状況で生成される可能性があります。 このエラー メッセージの例では、ホスト名は 127.0.0.1で、ポートは27017です。

Error: couldn't connect to server 127.0.0.1:27017

次のセクションでは、問題を解決するために実行できるアクションについて説明します。

接続stringのホスト名とポート番号が両方とも正確であることを確認してください。 MongoDB インスタンスのデフォルトのポート値は27017ですが、MongoDB を別のポートで通信するように構成できます。

MongoDB 配置がリッスンするポートが同じネットワーク上のファイアウォールによってブロックされていないことを確認します。 MongoDB はデフォルトでポート27017を使用します。 MongoDB が使用するデフォルトのポートとその変更方法について詳しくは、「デフォルトの MongoDB ポート 」を参照してください。

警告

MongoDB 配置で使用されるポートであることが確実な場合を除き、ファイアウォールでポートを開かないでください。

認証メカニズムが正しく構成されていない場合、.NET/C# ドライバーは MongoDB インスタンスに接続できない可能性があります。 認証にSCRAM-SHA-256またはSCRAM-SHA-1を使用しており、ドライバーが接続に失敗した場合、ドライバーは次のいずれかのメッセージのようなエラー メッセージを表示することがあります。

Command failed with error 18 (AuthenticationFailed): 'Authentication
failed.' on server <hostname>:<port>.
Authentication failed","attr":{"mechanism":"SCRAM-SHA-256","principalName":
"<db_username>","<auth database>":"<db_username>","client":"127.0.0.1:2012",
"result":"UserNotFound: Could not find user}}
connection() error occurred during connection handshake: auth error:
sasl conversation error: unable to authenticate using mechanism
"SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.

次のセクションでは、問題を解決するために実行できるアクションについて説明します。

無効な接続stringは、接続文字列と SCRAM-SHA-256 または SCRAM-SHA-1 を使用してMongoDBに接続しようとする際に発生する最も一般的な原因です。

Tip

接続文字列の詳細については、接続ガイドの「接続 URI 」を参照してください。

string接続文字列にユーザー名とパスワードが含まれている場合は、それらが正しい形式であることを確認してください。ユーザー名またはパスワードに次の文字のいずれかが含まれている場合、パーセント エンコードされている必要があります。

: / ? # [ ] @

次の例は、"#MyPassword?" をパーセント エンコードする方法を示しています。

Console.WriteLine(System.Web.HttpUtility.UrlEncode("#MyPassword?"));

これにより、次の出力が得られます。

%23MyPassword%3F

MongoDB 配置に接続しようとする際に、 MongoClientSettingsオブジェクトを使用して設定を構成できます。 Credentialプロパティを使用して認証情報を設定できます。 認証情報が正しくない場合、MongoDB 配置に接続しようとすると認証エラーが発生します。

SCRAM-SHA-256またはSCRAM-SHA-1でユーザー名とパスワードを使用して接続を正常に認証するには、認証データベースにユーザー名を定義する必要があります。 デフォルトの認証データベースはadminデータベースです。 認証に別のデータベースを使用するには、 接続stringで authSource オプションを指定します。 次の例では、認証データベースとしてusersを使用するようにドライバーに指示しています。

using MongoDB.Driver;
// Connection URI
const string connectionUri = "mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=users";
// Create a new client and connect to the server
var client = new MongoClient(connectionUri);

また、 MongoClientSettingsオブジェクトを作成し、それをMongoClientコンストラクターに渡すことで構成設定を設定することもできます。 Credentialプロパティを使用して、認証データベースの指定を含むログイン認証情報を設定できます。 MongoClientSettingsの使用の詳細と例については、「 MongoClientSettings の使用 」を参照してください。

これが問題であるかどうかは、同じコードを使用してローカルマシンでホストされている MongoDB インスタンスに接続しようとすることで確認できます。 同じマシン上の配置では、接続するための認可は必要ありません。

オペレーティング システムとして Windows を使用している場合、.NET/C# ドライバーがメモリ内のX.509認証証明書を見つけられない問題が発生する可能性があります。 このエラーは、次のエラーメッセージとともに発生します。

No credentials are available in the security package

次のセクションでは、問題を解決するのに役立つ方法について説明します。

次のコードを使用して、アプリケーションに必要なX.509証明書を生成します。

using (X509Certificate2 certWithKey = certOnly.CopyWithPrivateKey(key))
{
return new X509Certificate2(certWithKey.Export(X509ContentType.Pkcs12));
}

リクエストを行った後にドライバーがコマンドの送信に失敗すると、次のエラー メッセージが表示される場合があります。

com.mongodb.MongoSocketWriteException: Exception sending message

次のセクションでは、問題を解決するために実行できるアクションについて説明します。

正しいユーザーが MongoDB 配置にアクセスしたことを確認します。 エラー内の「メッセージ」というタームは、ドライバーによって送信されたコマンドである場合があります。 コマンドを送信する権限を持たないユーザーを使用している場合、ドライバーはこのエラーを生成する可能性があります。

また、ユーザーが送信するメッセージに対する適切な権限を持っていることも確認します。 MongoDB は、RBAC(Role-Based Access Control、ロールベースのアクセス制御)を使用して、MongoDB 配置へのアクセスを制御します。 MongoDB で RBAC を構成する方法の詳細については、「ロールベースのアクセス制御 」を参照してください。

ファイアウォールは MongoDB インスタンスと通信するためにオープンなポートが必要です。 ファイアウォールの構成の詳細については、「 接続エラー 」セクションの「 ファイアウォールを構成する 」を参照してください。

MongoClientインスタンスは、接続プール内で同時にオープンする接続の最大数をサポートします。 この制限を定義するパラメータMaxConnectionPoolSizeを構成できます。 デフォルト値は100です。 すでに開いている接続の数がMaxConnectionPoolSizeに等しい場合、サーバーは接続が利用可能になるまで待機します。 この待機時間がMaxConnectionIdleTimeの値を超えると、ドライバーはエラーで応答します。

接続プーリングの機能方法について詳しくは、「 .NET/C# ドライバーで接続プーリングがどのように機能しますか 」を参照してください。 FAQ に記載されています。

ドライバーは接続を開始しようとしたが、最大接続数に達したときに次のエラー メッセージを作成します。

connection refused because too many open connections

次のセクションでは、問題を解決するのに役立つ方法について説明します。

よりオープンな接続を作成する必要がある場合は、 MaxConnectionPoolSizeを増やします。 接続数の確認の詳細については、「 メッセージの送信エラー 」セクションで「 接続数を確認する 」を参照してください

ネットワークがドライバーからサーバーにリクエストを十分な速度で提供できない場合、タイムアウトが発生することがあります。 その場合、次のメッセージのようなエラー メッセージが表示される場合があります。

timed out while checking out a connection from connection pool: context canceled

このエラーが発生した場合は、問題を解決するために次のアクションをお試しください。

ドライバーが到達不能なレプリカセット ノードに到達するのに時間がかかりすぎるため、接続を確立できない場合、ドライバーがハングすることがあります。 connectTimeMS設定を使用すると、ドライバーが接続を確立するために費やす時間を制限できます。 この設定の詳細については、サーバー マニュアルの「タイムアウト オプション 」を参照してください。

connectTimeoutMSの設定が、 のノードに対する最高のネットワーク レイテンシよりも低くないことを確認する必要があります。 セカンダリ ノードの 1 つのレイテンシが 10000 ミリ秒の場合、 connectTimeoutMSを 9000 に設定すると、ドライバーはそのノードに接続できなくなります。

このオプションは 接続stringに設定できます。 次の例では、 connectTimeoutMSを 10000 ミリ秒に設定しています。

using MongoDB.Driver;
// Connection URI
const string connectionUri = "mongodb://<db_username>:<db_password>@<hostname>:<port>/?connectTimeoutMS=10000";
// Create a new client and connect to the server
var client = new MongoClient(connectionUri);

また、 MongoClientSettingsオブジェクトを作成し、それをMongoClientコンストラクターに渡すことで構成設定を設定することもできます。 MongoClientSettingsの使用の詳細と例については、「 MongoClientSettings の使用 」を参照してください。

サーバーへの接続数がMaxConnectionPoolSizeを超える可能性があります。 接続数の確認の詳細については、「 メッセージの送信エラー 」セクションで「 接続数を確認する 」を参照してください

戻る

FAQ