Dienstabsturz durch "NullReferenceException"

26. September 2019 11:55

Ich habe wieder ein sehr ausgefallenes Problem. Ein Kunde berichtet, dass der NAV Dienst in unregelmäßigen Abständen abstürzt. Werfe ich einen Blick in die Ereignisanzeige, ist für die fragliche Dienstinstanz ein Eintrag mit einer "NullReferenceException: Object reference not set to an instance of an object" zu sehen. Der Dienst startet sich zwar nach 60000 ms selbst neu, aber die Sache ist trotzdem extrem nervig, da natürlich alle Anwender auf dieser Dienstinstanz gekickt werden.

Code:
Type: System.NullReferenceException
Message: <ii>Object reference not set to an instance of an object.</ii>
StackTrace:
     at Microsoft.Dynamics.Nav.Runtime.NavSqlConnection.SetKeepAlive(Boolean enabled, Int32 keepAliveInterval)
     at Microsoft.Dynamics.Nav.Runtime.NavSqlConnectionScope..ctor(NavDatabase database, Boolean requireNewConnection, TransactionType transactionType, NavSqlConnection lastUsedSqlConnection, Boolean requireExclusiveConnection)
     at Microsoft.Dynamics.Nav.Runtime.NavSqlConnectionScope.Create(NavDatabase database, TransactionType transactionType, IReference`1& lastUsedSqlConnection)
     at Microsoft.Dynamics.Nav.Runtime.NavSqlIsamQueryCommand.<FindAll>d__44.MoveNext()
     at Microsoft.Dynamics.Nav.Runtime.ResultSet.TryGetAtIndex(Int32 index, ReadOnlyRecordBuffer& recordBuffer)
     at Microsoft.Dynamics.Nav.Runtime.ResultSetEnumerator.TryGetRecordBufferFromResultSet(Int32 fetchIndex, MutableRecordBuffer& recordBuffer)
     at Microsoft.Dynamics.Nav.Runtime.ResultSetEnumerator.TryMoveNextImpl(MutableRecordBuffer& recordBuffer)
     at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.Advance(Int32 steps, Boolean moveBackwards, Boolean automaticFindFromPositionOnInvalid, Boolean& resultSetValid, Int32 setSize)
     at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.IssueFindRequest(DataError errorLevel, Boolean reversed, FindType findType, Boolean useCache)
     at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.FindRecordImp(DataError errorLevel, String searchMethod)
     at Microsoft.Dynamics.Nav.Runtime.RecordImplementation.FindRecord(DataError errorLevel, String searchMethod)
     at Microsoft.Dynamics.Nav.Runtime.NavRecord.ALFind(DataError errorLevel, String searchMethod)
     at Microsoft.Dynamics.Nav.Runtime.WebServiceView.SystemWebServiceTable.GetDisallowedObjects()
     at Microsoft.Dynamics.Nav.Runtime.WebServiceView.Create()
     at Microsoft.Dynamics.Nav.Service.WebMetadata.WebServiceTable.MoveFirst()
     at Microsoft.Dynamics.Nav.Service.WebMetadata.ServiceRegistry.<GetEnumerator>d__4.MoveNext()
     at Microsoft.Dynamics.Nav.Service.WebServices.ServiceBroker.FindServiceItem(String fullName)
     at Microsoft.Dynamics.Nav.Service.WebServices.MetadataManager.FindSoapAdapter(String fullName, NavTenant tenant, XmlElement message, Item service)
     at Microsoft.Dynamics.Nav.Service.WebServices.ServiceBroker.DispatchSoap(WebServiceUrlInfo relivantURLPart, XmlReader input, TextWriter output, NavTenant tenant)
     at Microsoft.Dynamics.Nav.Service.WebServices.ServiceBroker.Invoke(Boolean isSoapMessage, Uri url, XmlReader input, TextWriter output, NavUserAuthentication navUserAuth)
Source: Microsoft.Dynamics.Nav.Ncl
HResult: -2147467261
</ii>


Aus dieser Fehlermeldung kann ich leider nicht entnehmen, an welcher Stelle genau das Problem auftritt. Ich habe versucht dem Hinweis auf das Query "<FindAll>d__44.MoveNext()" nachzugehen und den Dienst mit DEBUG Option gestartet, um evtl. in den daraufhin erzeugten CS-Dateien die fragliche Stelle zu finden. Dort werden zwar auch zahlreiche Suchtreffer für "MoveNext()" gefunden, aber leider nichts was mir weiterhelfen könnte.

Hat jemand einen Tipp, wie ich der Fehlerquelle auf die Spur kommen kann?

FG
Thomas