【问题标题】:MongoDB, C#, QueryFailure flag was not master and slaveOk=falseMongoDB、C#、QueryFailure 标志不是 master 和 slaveOk=false
【发布时间】:2015-03-31 13:58:38
【问题描述】:

我有一个网站几个月来一直运行良好,但现在,突然之间,没有任何效果。该站点使用 MVC 5 完成,并使用 MongoDB 进行存储。

我最好的猜测是 MongoDB 主机搞砸了,这导致了问题,但是......

我应该怎么做才能避免以后出现这个问题?必须有一些我可以更改的设置?

这是错误和堆栈跟踪:

QueryFailure 标志不是 master 且 slaveOk=false(响应为 { "$err" : "not master and slaveOk=false", "code" : 13435 })。

在 MongoDB.Driver.Internal.MongoReplyMessage1.ReadHeaderFrom(BsonBuffer buffer) at MongoDB.Driver.Internal.MongoReplyMessage1.ReadFrom(BsonBuffer 缓冲区) 在 MongoDB.Driver.Internal.MongoConnection.ReceiveMessage[TDocument](BsonBinaryReaderSettings readerSettings,IBsonSerializer 序列化程序,IBsonSerializationOptions 序列化选项) 在 MongoDB.Driver.Operations.QueryOperation1.GetFirstBatch(IConnectionProvider connectionProvider) at MongoDB.Driver.Operations.QueryOperation1.Execute(IConnectionProvider connectionProvider) 在 System.Linq.Buffer1..ctor(IEnumerable1 源) 在 System.Linq.OrderedEnumerable1.<GetEnumerator>d__0.MoveNext() at System.Linq.Enumerable.<TakeIterator>d__3a1.MoveNext() 在 System.Collections.Generic.List1..ctor(IEnumerable1 集合) 在 System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at ScaleModellingCentral.Web.UI.Controllers.HomeController.Read() at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 参数) 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext 控制器上下文,ActionDescriptor actionDescriptor,IDictionary2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.c__DisplayClass46.b__3f() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass33.b__32(IAsyncResult asyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass21.c__DisplayClass2b.b__1c() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass21.b__1e(IAsyncResult asyncResult)

【问题讨论】:

  • 你解决了吗?我在 MongoHq 上也遇到了同样的问题。

标签: asp.net-mvc mongodb-.net-driver


【解决方案1】:

是托管问题引发了该问题。

我的主服务器/分片出现问题,因此,正如预期的那样,辅助服务器变成了新的主服务器,然后一切都失败了。

快速解决方法是使用“?slaveOk=true”对连接字符串进行后缀。那个固定读数。写入仍然失败。

所以这里真正的问题是我只在连接字符串中输入了(初始)主服务器,所以(C#)驱动程序不知道有两个分片。

相反,如果我编写了正确的连接字符串,该站点将有一些失败的请求,然后驱动程序将切换到新的主分片,而不是继续使用失败的,现在是辅助分片。

        <add name="MongoDB" connectionString="mongodb://<username>:<password>@<server1>:<port1>,<server2>:<port2>/<dbname>" />

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 2019-05-21
    • 2015-07-17
    • 2023-03-10
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多