You were right, that RPC error is of no use, the key was that the session was lost.
I can reproduce the error:
- I start my .NET windows service that uses the BC.NET
- go to AX - Adminstration - Online users
- terminate the BC.NET user sessions
- execute an action that triggerd my service to use the BC.NET
What I then did, is add a try/catch to my service, and a loop so I could reconnect to AX with the BC in case the error occurred.
Like this:
public void DoSmth()
{ int retryCount = 1; while (retryCount >= 0)
{ try { object o = axapta.CallStaticClassMethod("DAXClass", "DAXMethod", "parameter"); break;
} catch (Exception ex)
{ if (retryCount < 0)
{
logger.Error(ex.Message);
} else {
logger.Debug("Retry. Recreating connector instance");
axapta = new Axapta(); this.Login();
retryCount--;
}
}
}
}
The login method looks like this (logger is log4net object):
private void Login()
{ try {
axapta.Logon(null, null, null, null); } catch (Exception ex)
{
logger.Error(ex.Message);
}
}
I'm no .NET expert, but that code worked for me.
Thx for the assistance,
I hope this helps others too.
Best regards,
Klaas.
==========
I found the solution to my particular problem. I doubt it applies to you tho Klaas, there are probably much more common causes of this error.
I was using imersonation when initiating the connection to AX, then reverting it. This is a common partern that works for SQL. Using AX4, this seems to intermittently fail with the “Server has terminated the session” error (AX5 is fine). I stopped using impersonation and it has been working without any issues.
===========
We faced the similar issue in AX 2009 (ax 5.0). Restarting the SQL services fixed the issue but would like to understand the core cause for the same. Any relevant guidance would help. Thank you.
I can reproduce the error:
- I start my .NET windows service that uses the BC.NET
- go to AX - Adminstration - Online users
- terminate the BC.NET user sessions
- execute an action that triggerd my service to use the BC.NET
What I then did, is add a try/catch to my service, and a loop so I could reconnect to AX with the BC in case the error occurred.
Like this:
public void DoSmth()
{ int retryCount = 1; while (retryCount >= 0)
{ try { object o = axapta.CallStaticClassMethod("DAXClass", "DAXMethod", "parameter"); break;
} catch (Exception ex)
{ if (retryCount < 0)
{
logger.Error(ex.Message);
} else {
logger.Debug("Retry. Recreating connector instance");
axapta = new Axapta(); this.Login();
retryCount--;
}
}
}
}
The login method looks like this (logger is log4net object):
private void Login()
{ try {
axapta.Logon(null, null, null, null); } catch (Exception ex)
{
logger.Error(ex.Message);
}
}
I'm no .NET expert, but that code worked for me.
Thx for the assistance,
I hope this helps others too.
Best regards,
Klaas.
==========
I found the solution to my particular problem. I doubt it applies to you tho Klaas, there are probably much more common causes of this error.
I was using imersonation when initiating the connection to AX, then reverting it. This is a common partern that works for SQL. Using AX4, this seems to intermittently fail with the “Server has terminated the session” error (AX5 is fine). I stopped using impersonation and it has been working without any issues.
===========
We faced the similar issue in AX 2009 (ax 5.0). Restarting the SQL services fixed the issue but would like to understand the core cause for the same. Any relevant guidance would help. Thank you.