我创建了一个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; }]}。
答案 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解决了问题。