When client with RTC tries to connect it immediately shuts down, but on server side I’ve managed to successfully start RTC client. I don’t know where might be the problem. There is another strang strange thing. I’ve started another RTC server with webservices which runs copy of database that gives me trouble - and everything works on this instance… Here is copy of Event viewer log from server, maybe it could help to give some idea how to solve this issue: Service: Service: MicrosoftDynamicsNavServer$NAV2009R2 User: \ Type: System.IndexOutOfRangeException Message: Index was outside the bounds of the array. StackTrace: at Microsoft.Dynamics.Nav.Runtime.PermissionManager.PermissionCache.GetDictionaryForType(ObjectType objectType) at Microsoft.Dynamics.Nav.Runtime.PermissionManager.InitializeFromCSide(IntPtr unmanagedExecutePermissions, Int32 numberOfElements, Boolean userHasAllPermissions) at Microsoft.Dynamics.Nav.Runtime.NativeMethods.AdapterLoadExecutePermissions(IntPtr connectionHandle, ExecutePermissionBuilder executePermissionBuilderHandler, Int32 systemTableOrTableDataOnly) at Microsoft.Dynamics.Nav.Runtime.NavConnection.Open() at Microsoft.Dynamics.Nav.Service.NSService.<>c__DisplayClass4.b__2(Connection connection) at Microsoft.Dynamics.Nav.Service.NSService.ExecuteOperation[T](String operationName, ServiceOperation1 operation, Connection connection, Boolean revertLanguageChanges, WindowsIdentity impersonationIdentity) Source: Microsoft.Dynamics.Nav.Ncl And another error for same user immediately after first one: User: \ Type: System.AccessViolationException Message: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. StackTrace: at Microsoft.Dynamics.Nav.Runtime.NativeMethods.AdapterCloseConnection(IntPtr connectionHandle, Boolean withGrace) at Microsoft.Dynamics.Nav.Runtime.NavConnection.CloseConnection(Boolean withGrace) at Microsoft.Dynamics.Nav.Runtime.NavConnection.Dispose(Boolean disposing) at Microsoft.Dynamics.Nav.Service.Connection.Dispose(Boolean disposing) at Microsoft.Dynamics.Nav.Runtime.TreeObject.Dispose() at Microsoft.Dynamics.Nav.Service.NSService.ExecuteOperation[T](String operationName, ServiceOperation
1 operation, Connection connection, Boolean revertLanguageChanges, WindowsIdentity impersonationIdentity) at Microsoft.Dynamics.Nav.Service.NSService.ExecuteOperation[T](String operationName, Boolean revertLanguageChanges, ServiceOperation`1 operation) at Microsoft.Dynamics.Nav.Service.NSService.OpenConnection(ConnectionRequest connectionRequest) Source: Microsoft.Dynamics.Nav.Ncl
After days spent datamining and debugging I finally found out what was the problem with RTC connection. It was in user permissions.
In one particular row of one permission which is assigned to all NAV users there is value option field “Object Type” which has no option value, but object ID value. After entering correct values into table, synchronizing users and restarting services everyone could user RTC regulary.
I’m pretty sure that this error didn’t come from any work inside NAV, but from external source - SQL procedure or SQL injection.
Unfortunately I can confirm there is no need for SQL injection
With NAV 2013 is still possible for RTC user to enter Object Type = 90130 in Permissions table some how and get RTC collapsing after login for all users with affected Role ID. Thank you for solution !
NAV Server eventlog:
Server instance: XYZ_NAV_70_PROD
Session type: RoleTailoredClient
Session ID: 87
User: XYZ\xyz
Type: Microsoft.Dynamics.Nav.Types.Exceptions.NavALException
SuppressMessage: False
FatalityScope: None
Message: Index out of range exception.
HResult: -2146233088
Type: System.IndexOutOfRangeException
Message: Index was outside the bounds of the array.
StackTrace:
at Microsoft.Dynamics.Nav.Runtime.PermissionCache.TryGetValue(ApplicationObjectId objectId, PermissionMask& result)
at Microsoft.Dynamics.Nav.Runtime.NavRole.ReadPermissions()
at Microsoft.Dynamics.Nav.Runtime.NavRole.get_Permissions()
at Microsoft.Dynamics.Nav.Runtime.PermissionManager.GetPermissions(ApplicationObjectId objectId)
at Microsoft.Dynamics.Nav.Runtime.PermissionSetBase.InternalHasPermisisons(NavApplicationObjectBase callingObject, PermissionMask permissions, Func2 checkTableEmpty, PermissionMask additionalIndirectPermissions) at Microsoft.Dynamics.Nav.Runtime.PermissionSetBase.VerifyPermissions(NavApplicationObjectBase callingObject, PermissionMask permissionMask, Func
2 checkTableEmpty, PermissionMask additionalIndirectPermissions)
at Microsoft.Dynamics.Nav.Runtime.PermissionSetBase.VerifyPermissions(NavApplicationObjectBase callingObject, PermissionMask permissionMask, Func`2 checkTableEmpty)
at Microsoft.Dynamics.Nav.Runtime.NavMethodScope…ctor(NavApplicationObjectBase applicationObject)
at Microsoft.Dynamics.Nav.BusinessApplication.Codeunit1.CompanyClose()
at Microsoft.Dynamics.Nav.BusinessApplication.Codeunit1.OnInvoke(Int32 memberId, Object[] args)
at Microsoft.Dynamics.Nav.Runtime.NavCodeunit1.Invoke(Int32 methodId, Object[] arguments)
Source: Microsoft.Dynamics.Nav.Ncl
HResult: -2146233080