Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MongoClient设置时无法进行身份验证_C#_Mongodb .net Driver - Fatal编程技术网

C# 使用MongoClient设置时无法进行身份验证

C# 使用MongoClient设置时无法进行身份验证,c#,mongodb-.net-driver,C#,Mongodb .net Driver,我正在尝试连接到MongoDb数据库 我的客户端:带MongoDb.Driver 2.6.1的ASP.NET Core 2 我的服务器:MongoDb 3.6.5社区版,单机版(无副本集),Windows server 2016上的64位 通过连接字符串进行的身份验证正在工作: public MongoDbContext(AppSettings appSettings) { var connectionString = "mongodb://myUsername:myPassword

我正在尝试连接到MongoDb数据库

  • 我的客户端:带MongoDb.Driver 2.6.1的ASP.NET Core 2
  • 我的服务器:MongoDb 3.6.5社区版,单机版(无副本集),Windows server 2016上的64位
通过连接字符串进行的身份验证正在工作:

public MongoDbContext(AppSettings appSettings)
{
    var connectionString = "mongodb://myUsername:myPassword@myDomain.com:27017/myDatabaseName";

    _client = new MongoClient(connectionString);

    // ...
}
public MongoDbContext(AppSettings appSettings)
{
    var credentials = MongoCredential.CreateMongoCRCredential(databaseName: "myDatabaseName", username: "myUsername", password: "myPassword");
    var server = new MongoServerAddress(host: "myDomain.com", port: 27017);

    var mongoClientSettings = new MongoClientSettings
    {
        Credential = credentials,
        Server = server,
        ConnectionMode = ConnectionMode.Standalone,
        ServerSelectionTimeout = TimeSpan.FromSeconds(3)
    };

    _client = new MongoClient(mongoClientSettings);

   // ...
}
MongoClient设置的身份验证不起作用:

public MongoDbContext(AppSettings appSettings)
{
    var connectionString = "mongodb://myUsername:myPassword@myDomain.com:27017/myDatabaseName";

    _client = new MongoClient(connectionString);

    // ...
}
public MongoDbContext(AppSettings appSettings)
{
    var credentials = MongoCredential.CreateMongoCRCredential(databaseName: "myDatabaseName", username: "myUsername", password: "myPassword");
    var server = new MongoServerAddress(host: "myDomain.com", port: 27017);

    var mongoClientSettings = new MongoClientSettings
    {
        Credential = credentials,
        Server = server,
        ConnectionMode = ConnectionMode.Standalone,
        ServerSelectionTimeout = TimeSpan.FromSeconds(3)
    };

    _client = new MongoClient(mongoClientSettings);

   // ...
}
TimeoutException:使用CompositeServerSelector{Selectors=MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector,LatencyMitingServerSelector{AllowedLatencyRange=00:00.0150000}选择服务器3000ms后发生超时。群集状态的客户端视图是{ClusterId:“1”,连接模式:“Standalone”,类型:“Standalone”,状态:“Disconnected”,服务器:[{ServerId:{ClusterId:1,端点:“Unspecified/myDomain.com:27017”},端点:“Unspecified/myDomain.com:27017”,状态:“Disconnected”,类型:“Unknown”,异常:“MongoDB.Driver.MongoConnectionException:打开与服务器的连接时发生异常。-->MongoDB.Driver.MongoAuthenticationException:无法对数据库“myDatabaseName”上的用户名“myUsername”进行身份验证。-->MongoDB.Driver.MongoCommandException:命令身份验证失败:身份验证失败。”

我对这两种方法使用了完全相同的值(大写和小写)。但只有
mongoclientseting
方法引发了异常。不过,出于不同的原因,我宁愿使用
mongoclientseting
方法,而不是基于连接字符串的方法

我是否遗漏了什么,或者这是C#的MongoDb驱动程序中的一个bug

为了避免误解:在上面的示例中,我将所有真实值(用户名、密码等)交换为假值


感谢您的帮助!

这是一个与调用
MongoCredential.createMongorCredential有关的身份验证问题,它使用
MONGODB-CR
(质询响应)身份验证机制创建凭据

将提供的异常跟踪到

而原来的问题是使用MongoDb.Driver 2.6.1

但是,工作连接字符串没有任何
authMechanism
身份验证选项,这意味着它将使用默认身份验证机制

用于创建与使用连接字符串类似的默认凭据

var credentials = MongoCredential.CreateCredential(
    databaseName: "myDatabaseName", 
    username: "myUsername", 
    password: "myPassword"
);

哇。早上好,Nkosi。你的tipp很有效。太好了。但是我的原始代码不起作用这一事实是一个bug,对吗?无论如何,非常感谢。我的代码现在干净多了。