来自最新的.Net MongoDb.Driver

时间:2016-01-15 18:52:45

标签: c# mongodb

我创建了一个MongoLab沙箱数据库。我与MongoChef连接,它工作正常。

我通过Nuget安装了MongoDB.Driver 2.2.2。

我制作了一些简单的C#演示代码,但是没有让它成功。

连接字符串直接从MongoChef复制,肯定会有效!

当尝试使用本地Mongo实例时,我会得到相同的行为。但是当尝试使用驱动程序版本2.1.1时,它可以在本地和MongoLab上运行!内部连接行为是否在2.2中以某种方式发生了变化?

    const string connectionString = "mongodb://user:password@ds047095.mongolab.com:47095/dbname";

    var client = new MongoClient(connectionString);

    var db = client.GetDatabase("dbname");
    var skills = db.GetCollection<Skill>("skill");
    skills.InsertOne(new Skill {SkillName = "TEST"});

这是抛出的异常:

使用CompositeServerSelector选择服务器30000ms后出现超时{Selectors = WritableServerSelector,LatencyLimitingServerSelector {AllowedLatencyRange = 00:00:00.0150000}}。群集状态的客户端视图是{ClusterId:&#34; 1&#34;,ConnectionMode:&#34; Automatic&#34;,Type:&#34; Unknown&#34;,State:&#34; Disconnected&#34; ,服务器:[{ServerId:&#34; {ClusterId:1,EndPoint:&#34; 127.0.0.1:27017&#34; }&#34;,EndPoint:&#34; 127.0.0.1:27017&#34;,状态:&#34;断开连接&#34;,输入:&#34;未知&#34;,HeartbeatException:&#34; MongoDB .Driver.MongoConnectionException:打开与服务器的连接时发生异常。 ---&GT; System.MissingMethodException:找不到方法:&#39; MongoDB.Bson.BsonDocument MongoDB.Bson.RawBsonDocument.Materialize(MongoDB.Bson.IO.BsonBinaryReaderSettings)&#39;。    在MongoDB.Driver.Core.WireProtocol.CommandWireProtocol 1.ProcessReply(ConnectionId connectionId, ReplyMessage 1回复)    在MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.d__11.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束---    在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)    在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)    在MongoDB.Driver.Core.Connections.ConnectionInitializer.d__1.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束---    在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)    在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)    在MongoDB.Driver.Core.Connections.BinaryConnection.d__47.MoveNext()    ---内部异常堆栈跟踪结束---    在MongoDB.Driver.Core.Connections.BinaryConnection.d__47.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束---    在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)    在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)    在System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)    在MongoDB.Driver.Core.Servers.ClusterableServer.d__42.MoveNext()&#34; }]}。

5 个答案:

答案 0 :(得分:5)

我遇到了同样的问题并找到了可能的解决方案:检查以下软件包的版本:MongoDB.Driver,MongoDB.Driver.Core,MongoDB.Bson在解决方案中的所有项目中。也许某些软件包有不同的版本,然后将它们更新到最新版本。还要将MongoDB更新到最新版本。希望这会有所帮助。

答案 1 :(得分:1)

使用.net core,docker和mongo DB进行POC时,我遇到了类似的问题。原来是mongodb连接字符串问题。用IP替换“ localhost”后,该问题得到解决。但这在IIS上工作正常。

修复

版本:“ 3.4”

服务:

reverseproxy_mongodemoapp:     图片:rnd / reverseproxy_mongodemoapp     建立:       内容:。       dockerfile:src / reverseproxy / Docker_reverseproxy     数量:       -./var/run/docker.sock:/tmp/docker.sock:ro     端口:       -5500:5500     网络:       -mongodemoappdockernat     重新启动:始终

mongodemoapp:     图片:rnd / mongodemoapp:$ {TAG:-最新}     建立:       内容:。       dockerfile:src / mongodemoapp / Dockerfile     取决于:       -reverseproxy_mongodemoapp     网络:       -mongodemoappdockernat
    重启:总是     环境:       -ASPNETCORE_ENVIRONMENT =开发       -BooksCollectionName = $ {APP_MONGODB_COLLECTION:-Books}       -ConnectionString = $ {APP_MONGODB_CONNECTION:-mongodb://192.168.0.105:27017 /}       -DatabaseName = $ {APP_MONGODB:-BookStore}

网络:   mongodemoappdockernat:     司机:桥

答案 2 :(得分:0)

尝试没有数据库名称的连接字符串:

string connectionString = "mongodb://user:password@ds047095.mongolab.com:47095";

答案 3 :(得分:0)

对我来说,我在网络项目中使用了驱动程序,它运行良好。然后我将这些重构为另一个项目,但忘记删除Web项目中的MongoDB库引用。它花了一段时间,但在从Web项目中删除dll引用后工作。希望它可以帮到某人。

答案 4 :(得分:0)

实际上,从mlab.com免费托管MongoDB时,我遇到了同样的问题。 Mongo指南针成功连接。驱动程序版本2.7.2,是Visual Studio可用的最新版本。 通过将托管服务提供商更改为MondoBD.Atlas解决了问题。