我有一个网站已经运行了好几个月,现在,突然间,没有任何作用。该站点使用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.QueryOperation1.GetFirstBatch(IConnectionProvider connectionProvider) at MongoDB.Driver.Operations.QueryOperation
1.Execute(IConnectionProvider connectionProvider) 在System.Linq.Buffer1..ctor(IEnumerable
1来源) 在System.Linq.OrderedEnumerable1.<GetEnumerator>d__0.MoveNext() at System.Linq.Enumerable.<TakeIterator>d__3a
1.MoveNext() 在System.Collections.Generic.List1..ctor(IEnumerable
1个集合) 在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, IDictionary
2个参数) 在System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary2 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)
答案 0 :(得分:4)
这是一个引发问题的托管问题。
我的主服务器/分片存在问题,因此,正如预期的那样,辅助服务器成为新的主服务器,然后一切都失败了。
快速解决方法是使用&#34;?slaveOk = true&#34;对连接字符串进行后缀。固定阅读。写作仍然失败。
所以真正的问题是我只在连接字符串中输入(初始)主服务器,所以(C#)驱动程序不知道有两个分片。
相反,如果我写了正确的连接字符串,那么该网站会有一些失败的请求,然后驱动程序将切换到新的主要而不是继续使用失败的,现在是次要的碎片。
<add name="MongoDB" connectionString="mongodb://<username>:<password>@<server1>:<port1>,<server2>:<port2>/<dbname>" />