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

Ste*_*rup 5 asp.net-mvc mongodb-.net-driver

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

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

我该怎么做以避免将来出现这个问题?我必须改变一些设置吗?

这是错误和堆栈跟踪:

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

at MongoDB.Driver.MongoReplyMessage 1.ReadHeaderFrom(BsonBuffer buffer) at MongoDB.Driver.Internal.MongoReplyMessage1.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.QueryOperation1.Execute( System.Linq.Buffer 1..ctor(IEnumerable1上的IConnectionProvider connectionProvider)System.Linq.OrderedEnumerable 1.<GetEnumerator>d__0.MoveNext() at System.Linq.Enumerable.<TakeIterator>d__3a1.MoveNext(1..ctor(IEnumerable)在System.Linq.Enumerable.ToList [TSource]的System.Collections.Generic.List 1 collection)(IEnumerable 1 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 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.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult)在System.Web.Mvc的System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<> c__DisplayClass46.b__3f()上的System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d()处. System.Web.Mvc.Async.AsyncControllerActionInvoker上的System.Web.Mvc.Async.AsyncControllerActionInvoker.<> c__DisplayClass21.<> c__DisplayClass2b.b__1c()中的Async.AsyncControllerActionInvoker.<> c__DisplayClass33.b__32(IAsyncResult asyncResult).<> c__DisplayClass21. b__1e(IAsyncResult asyncResult)

Ste*_*rup 4

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

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

快速修复方法是在连接字符串后添加“?slaveOk=true”。那个固定的阅读。写作仍然失败。

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

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

        <add name="MongoDB" connectionString="mongodb://<username>:<password>@<server1>:<port1>,<server2>:<port2>/<dbname>" />
Run Code Online (Sandbox Code Playgroud)