Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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
有人对10Gen支持的c#驱动程序有问题吗_C#_Mongodb_Mongodb .net Driver - Fatal编程技术网

有人对10Gen支持的c#驱动程序有问题吗

有人对10Gen支持的c#驱动程序有问题吗,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我看到了很多这样的错误 “远程主机已强制关闭现有连接” 在Mongo日志中,自从我从开源c#驱动程序切换到10Gen支持的驱动程序后。一旦发生此错误,我的网站将变得无响应。我觉得这与连接池的实现方式有关。请参阅下面的日志,我正在从集合中删除索引,删除所有项,然后通过添加所有需要的行“重新创建”集合,然后重新为集合编制索引。在这一切完成几分钟后,我总是会得到错误:“一个现有的连接被远程主机强行关闭” [conn46] run command admin.$cmd { ismaster: 1 } [

我看到了很多这样的错误

“远程主机已强制关闭现有连接”

在Mongo日志中,自从我从开源c#驱动程序切换到10Gen支持的驱动程序后。一旦发生此错误,我的网站将变得无响应。我觉得这与连接池的实现方式有关。请参阅下面的日志,我正在从集合中删除索引,删除所有项,然后通过添加所有需要的行“重新创建”集合,然后重新为集合编制索引。在这一切完成几分钟后,我总是会得到错误:“一个现有的连接被远程主机强行关闭”

[conn46] run command admin.$cmd { ismaster: 1 }
[conn46] query admin.$cmd ntoreturn:1 command: { ismaster: 1 } reslen:64 0ms
[conn46] query BtSearchCache.system.indexes reslen:1407 nreturned:7 0ms

drop indexes
[conn46] run command BtSearchCache.$cmd { deleteIndexes: "Board_41", index: "ix_QuickSearch" }
[conn46] CMD: dropIndexes BtSearchCache.Board_41
[conn46] dropIndexes: ix_QuickSearch not found
[conn46] query BtSearchCache.$cmd ntoreturn:1 command: { deleteIndexes: "Board_41", index: "ix_QuickSearch" } reslen:81 1ms

remove all data from collection
[conn46] remove  query: {} 1428ms

insert data (thousands of rows, omitted here)

[conn46] insert BtSearchCache.Board_41 0ms
[conn46] insert BtSearchCache.Board_41 0ms
[conn46] insert BtSearchCache.Board_41 1ms
[conn46] insert BtSearchCache.Board_41 0ms
[conn46] insert BtSearchCache.system.indexes 0ms

create indexes
[conn46] run command admin.$cmd { getlasterror: 1 }
[conn46] query admin.$cmd ntoreturn:1 command: { getlasterror: 1 } reslen:65 0ms

ERROR a few minutes later
[conn46] MessagingPort recv() errno:10054 An existing connection was forcibly closed by the remote host. 192.168.100.216:51111
[conn46] SocketException: 9001 socket exception
[conn46] end connection 192.168.100.216:51111

我不知道为什么会这样,但我知道您需要重新启动应用程序以解决此问题。当您重新启动mongodb时,这个错误总是会出现。因此,每次重新启动mongo db之后,您都需要重新启动应用程序(我想您使用的是iis)

如果您知道这个工具,当mongovue重新启动时,您也无法连接到mongodb


希望这有助于您解决问题。

后续:Google上的mongodb用户组也提出了这个问题,大部分讨论都发生在那里。最后,我们发现一个特定的查询导致mongo服务器崩溃(该错误在当前版本的服务器中已经修复),而C#驱动程序只是报告了导致的连接故障。这不是C#驱动程序中的错误,不需要对驱动程序进行修复。服务器恢复后,C#驱动程序将重新连接。

对于我们来说,即使mongo没有重新启动,这种情况也会发生。我们从未重新启动mongo,它可能会在没有重新启动的情况下运行数月,除非出于某种原因需要重新启动DB服务器MB mongo DB重新启动了吗?无论如何,我认为iis重启应该可以解决连接问题。驱动程序允许我们使用$或查询进行查询,结果发现mongodb服务器在使用$或查询时出现内存分配错误,因此驱动程序似乎是无缘无故断开连接的,但实际上是mongo因为mem alloc而重新启动