MongoDB,C#,QueryFailure标志不是master而slaveOk = false

时间:2015-02-01 14:42:00

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

我有一个网站已经运行了好几个月,现在,突然间,没有任何作用。该站点使用MVC 5完成,并使用MongoDB进行存储。

我最好的猜测是,MongoDB主机正在搞乱,导致问题,但是......

将来如何避免此问题?我可以改变一些设置吗?

这里是错误和堆栈跟踪:

  

QueryFailure标志不是master而slaveOk = false(响应是{" $ err":"不是master和slaveOk = false"," code":13435 })。

     

在MongoDB.Driver.Internal.MongoReplyMessage 1.ReadHeaderFrom(BsonBuffer buffer) at MongoDB.Driver.Internal.MongoReplyMessage 1.ReadFrom(BsonBuffer buffer)      在MongoDB.Driver.Internal.MongoConnection.ReceiveMessage [TDocument](BsonBinaryReaderSettings readerSettings,IBsonSerializer serializer,IBsonSerializationOptions serializationOptions)      在MongoDB.Driver.Operations.QueryOperation 1.GetFirstBatch(IConnectionProvider connectionProvider) at MongoDB.Driver.Operations.QueryOperation 1.Execute(IConnectionProvider connectionProvider)      在System.Linq.Buffer 1..ctor(IEnumerable 1来源)      在System.Linq.OrderedEnumerable 1.<GetEnumerator>d__0.MoveNext() at System.Linq.Enumerable.<TakeIterator>d__3a 1.MoveNext()      在System.Collections.Generic.List 1..ctor(IEnumerable 1个集合)      在System.Linq.Enumerable.ToList [TSource](IEnumerable 1 source) at ScaleModellingCentral.Web.UI.Controllers.HomeController.Read() at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary 2个参数)      在System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary 2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 2.CallEndDelegate(IAsyncResult asyncResult)      在System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d()      在System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters。&lt;&gt; c__DisplayClass46.b__3f()      在System.Web.Mvc.Async.AsyncControllerActionInvoker。&lt;&gt; c__DisplayClass33.b__32(IAsyncResult asyncResult)      在System.Web.Mvc.Async.AsyncControllerActionInvoker。&lt;&gt; c__DisplayClass21。&lt;&gt; c__DisplayClass2b.b__1c()      在System.Web.Mvc.Async.AsyncControllerActionInvoker。&lt;&gt; c__DisplayClass21.b__1e(IAsyncResult asyncResult)

1 个答案:

答案 0 :(得分:4)

这是一个引发问题的托管问题。

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

快速解决方法是使用&#34;?slaveOk = true&#34;对连接字符串进行后缀。固定阅读。写作仍然失败。

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

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

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