Skip to main content

.NET Business Connector Session Terminated

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.

Popular posts from this blog

What does this mean: "The form datasource query object does not support changing its AllowCrossCompany property after the form has executed the query."?

I have made a form with datasources vendtable and vendtrans. Inside vendtable_ds.executequery() looks like this: QueryBuildDataSource queryBuildDatasource ,queryBDS_VendTrans_Invoice; ; queryBuildDatasource = this.query().dataSourceTable(tablenum(vendtable)); queryBDS_VendTrans_Invoice = this.query().dataSourceTable(tablenum(vendtrans)); if (curext() == "MASTERCOMP") { this.query().allowCrossCompany(true); } else { this.query().allowCrossCompany(false); } //FilterVendorName = stringedit control on form if (FilterVendorName.text()) { queryBuildDatasource.addRange(fieldNum(VendTable,Name)).value(strfmt("*%1*", FilterVendorName.text())); } else { queryBuildDatasource.clearRange(fieldNum(VendTable,Name)); } //FilterInvoiceNumber = stringedit control on form if (FilterInvoiceNumber.valueStr() == "") { queryBDS_VendTrans_Invoice.enabled(false); } else { queryBDS_VendTrans_Invoice.enabled(true); queryBDS_VendTrans_In...

Credit Note [Dynamics AX] using X++

This post will help to create credit note for a sales order based on the invent lot id. All the invoices raised for a particular sales line – Lot Id will be raised back as a credit note. Information on Credit Note: A credit note or credit memorandum (memo) is a commercial document issued by a seller to a buyer. The seller usually issues a Credit Memo for the same or lower amount than the invoice, and then repays the money to the buyer or sets it off against a balance due from other transactions Below Code will help to create credit note for all the invoices raised against the sales line -lot id. Please note: This code can be customized as per your requirements. This is just a template to help creating credit note using X++ code. Please test the code before use. static void SR_CreateCreditNote_Sales(Args _args) { // Coded by Sreenath Reddy CustInvoiceTrans custInvoiceTrans; Dialog dialog = new Dialog(“Create credit note – for sales.”); DialogField dfInv...