Transaction Errors
When an appointment sync to Business Central fails, the failed transaction shows up on the Errors page with a message prefixed by a stable code in square brackets, e.g. [DSBC003] BC server too busy. The code never changes once issued, so you can search transactions or logs for [DSBC003] to find every appointment that hit the same failure.
Retried codes are picked up automatically by the retry job (3 attempts, exponential backoff with jitter, then the row stays Failed for the next pass). Fix configuration codes need a connector or back-office setup change first - they are not retried. Undiagnosed failure shapes should be sent to support so a rule can be added.
Each section below pairs 💡 (what it means) with 🛠️ (what to do).
Quick lookup
Request channel timeout
The request channel timed out attempting to send after 00:01:00. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout. The HTTP request to 'http://[server]/[instance]/WS/[company]/Page/Appointment' has exceeded the allotted timeout of 00:01:00.
DSBC004DSHTTP001retried automaticallyThe WCF channel timed out before BC responded. The operation may have completed on BC's side regardless. The most common cause is that the web service is not accessible from Dime.Scheduler, typically due to firewall restrictions blocking the connection. Other causes: network latency, BC server under heavy load, large payloads, slow database queries on the BC side, or complex AL business logic.
Transient - retried automatically. If it persists:
- Check firewall and network accessibility:
- Verify the Business Central web service URL is accessible from the Dime.Scheduler cloud.
- Open the required firewall ports to allow traffic from Dime.Scheduler to Business Central.
- On-premises: ensure the web service endpoint is published and accessible externally.
- Cloud: verify the service is not blocked by network security groups or Azure firewall rules.
- Test connectivity using tools like
telnet,curl, or a browser from the Dime.Scheduler cloud.
- Verify connector URL:
- Navigate to Administration > Connectors in Dime.Scheduler.
- Verify the web service URL is correct and accessible.
- Increase the timeout if connectivity is confirmed:
- Edit the Business Central connector.
- Increase the Request Timeout value (for example, from 60 to 120 seconds or higher).
- Optimize Business Central performance:
- Review and optimize custom code in the appointment processing codeunits.
- Check for database locks or slow queries.
- Review the Business Central server event logs for performance issues.
If timeouts occur frequently during specific times of day, this often indicates server load issues. Consider scheduling heavy processing tasks outside of peak planning hours.
HTTP request unauthorized
The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'Basic realm=...'
Variations include 401 Unauthorized and Invalid credentials.
DSBC001DSCFG008fix configurationDSBC001 - WCF rejected the SOAP-level credentials (the configured username/password is wrong or the security mode doesn't match what BC expects). DSCFG008 - the back-office returned HTTP 401 or 403 to the REST/OAuth path. The authentication method configured on the connector does not match what Business Central expects, or the credentials are incorrect or expired.
Step 1 - Check the BC version
- Business Central Cloud (SaaS) - use OAuth 2.0.
- Business Central On-Premises - use Basic Authentication, Windows/NTLM, or OAuth 2.
Step 2 - Fix the authentication
- Go to Administration > Connectors in Dime.Scheduler.
- Edit the Business Central connector.
- Set authentication to the desired authentication method.
- Fill in the required authentication fields.
Follow the OAuth setup guide.
If the test fails with the wrong password, verify the account is not locked in Active Directory or Business Central.
Step 3 - If the test still fails
Check these common issues:
| Problem | Fix |
|---|---|
| OAuth: "Client secret expired" | Generate a new secret in Azure Portal and update the connector |
| OAuth: "Invalid tenant ID" | Verify the tenant ID matches your Azure AD tenant |
| Basic Auth: "Invalid username" | Try without the domain prefix (just USERNAME) |
| Basic Auth: "Account locked" | Unlock the account in Active Directory or BC |
| "Permission denied" | Verify the account has access to Dime.Scheduler tables |
Step 4 - Retry the failed transaction
Once the test connection succeeds, retry the failed appointment from the Errors page.
BC endpoint not found
DSBC002fix configurationEndpointNotFoundException for both "host unreachable" (DNS failure, tunnel offline, connection refused, port closed) and "host answered with 404" - the URL or the service is wrong./WS/<Tenant>/Page/<PageId>) and that the host is reachable from the back-office service. The page may be unpublished, the BC tenant may be down, or the URL may be pointing at a stale environment.BC server too busy
DSBC003retried automaticallyServerTooBusy. The BC tenant is at capacity.BC communication fault
DSBC005retried automaticallySOAP "unknown type" fault
DSBC006fix configurationThe type X is unknown. - usually because the published AL extension is out of date and no longer matches the WSDL the connector was generated against.SOAP "service not found" fault
DSBC007fix configurationService "X" was not found! - the SOAP URL is correct but the requested page (Page/Appointment) is not exposed at that URL.BC REST API missing Location header
DSBC008fix configurationLocation header pointing at the new record - so Dime.Scheduler can't post the follow-up process call.process action manually, or check why BC isn't returning a Location header (custom AL code stripping it, reverse proxy rewriting it, etc.).SOAP HTTP transient (429/5xx)
DSBC009retried automaticallyProtocolException with The remote server returned an unexpected response: (NNN) ... where NNN is 429/502/503/504. BC's HTTP front-end (or a proxy/load-balancer in front of it) is temporarily unhealthy. SOAP-path counterpart of DSHTTP001.BC insufficient permissions
DSBC010fix configurationSorry, the current permissions prevented the action. (Page 2087632 Dime DS Appointment Resources Resources Execute: ). The integration user authenticated successfully but lacks the permission set required to read/execute the page named in the parentheses. Distinct from DSCFG008 (HTTP 401/403 at the transport layer) and DSBC001 (WCF-level credential rejection) - here the user is recognized and the call gets through, but the AL permission check inside BC rejects it.BC lock timeout
DSBC011retried automaticallyWe can't save your changes right now, because the data is being updated in a transaction done by another session. ... Please try again later.. The row the connector was writing was locked by another session's open transaction - pure contention, nothing misconfigured. The call succeeds once the lock clears.HTTPS required for SOAP
DSCFG009fix configurationWebServiceAddress uses http://, but BC's SOAP binding requires Transport security (HTTPS). WCF refuses to open the channel and raises ArgumentException: The provided URI scheme 'http' is invalid; expected 'https'. (Parameter 'via').https://. BC Online only publishes the SOAP endpoint over HTTPS; on-prem BC must have the SOAP service configured with SSL.Back-office not allowed
DSCFG001fix configurationMissing required field
DSCFG002fix configurationJobNo/TaskNo when the back-office requires them.Back-office returned no data
DSCFG003fix configurationSchema mismatch
DSCFG004fix configurationWrong system type (REST vs SOAP)
DSCFG005fix configurationWebServiceAddress on the connector matches the API type (SOAP vs REST) selected on the connector record.OAuth credentials unparseable
DSCFG006fix configurationkey=value;key=value blob and one of the required keys (client_id) is missing or the blob has no semicolons.client_id, client_secret, token_endpoint) are present and semicolon-separated. The OAuth setup guide walks through the full flow.Malformed connector URL
DSCFG007fix configurationWebServiceAddress is not a valid URI (typos, missing scheme, illegal characters).Unsupported connector configuration
DSCFG010fix configurationAuthType or ApiType is None, or an auth flow Dime.Scheduler doesn't ship for that back-office (e.g. one of the disabled OAuth flows on NAV). The transaction message names the specific connector and the unsupported value (e.g. BC (SOAP) connector ACME: None is not supported.).None, which is what trips this code.OAuth client rejected by Entra ID
DSCFG011fix configurationerror: "invalid_client" - most commonly AADSTS7000215: Invalid client secret provided, but the same code also covers expired secrets, a wrong client_id for the tenant, or sending the secret ID instead of the secret value. The credential blob parsed fine (otherwise DSCFG006 would fire); the values just aren't accepted by AAD. Distinct from DSCFG008 (HTTP 401 from the back-office itself) - this one fires before any back-office call, at token acquisition.client_secret. Re-save the connector. The AADSTS sub-code in the recorded message points at the exact reason (e.g. 7000215 = bad secret value, 7000222 = expired secret).HTTP endpoint not found
DSCFG012fix configurationDSBC002 (EndpointNotFoundException on the SOAP path). Not retried - a 404 is a misconfiguration, not a transient blip.WebServiceAddress. Common causes: a typo or stale environment in the URL, the OData API page is not published on the back-office, or the company segment in the OData path is wrong. Confirm the URL resolves to the published API page from the back-office service host.Entra ID tenant not found
DSCFG013fix configurationAADSTS90002: Tenant '<id>' not found. The tenant in the configured OAuth authority doesn't exist, or has no active subscription. Fires at token acquisition, before any back-office call - distinct from DSCFG011 (bad/expired secret) and DSCFG008 (HTTP 401 from the back-office itself). Not retried - a wrong tenant won't self-heal.token_endpoint / authority URL). Confirm it's the correct directory (Tenant) ID from the app registration's Entra ID overview, that you're pointing at the right cloud, and that the tenant has an active subscription.Entra ID app not in tenant
DSCFG014fix configurationAADSTS700016: Application with identifier '<client_id>' was not found in the directory '<tenant>', or the older equivalent AADSTS70001: Application '<client_id>' is not registered for this tenant. The tenant exists (otherwise DSCFG013 would fire) and the secret was never evaluated - AAD couldn't find the app registration in that directory at all. Either the client_id belongs to a different tenant than the one in the authority, the app is single-tenant and hasn't been installed / admin-consented in this directory, or the client_id is stale (the registration was deleted or recreated). Fires at token acquisition, before any back-office call - distinct from DSCFG013 (tenant doesn't exist), DSCFG015 (app exists but service principal is disabled), and DSCFG011 (bad/expired secret). Not retried - a missing app registration won't self-heal.client_id in the connector's OAuth credential blob matches an app registration that lives in the tenant configured in the authority URL. If the app is single-tenant, point the authority at its directory (Tenant) ID. If it's meant to be multi-tenant, have a tenant admin grant admin consent (https://login.microsoftonline.com/<tenant>/adminconsent?client_id=<client_id>) so the service principal is provisioned in that directory.App registration disabled
DSCFG015fix configurationAADSTS7000112: Application '<client_id>'(<name>) is disabled. The app registration exists in the resource tenant (otherwise DSCFG014 would fire) but its service principal object is disabled there - Enabled for users to sign-in is set to No on the enterprise application. Per Microsoft's guidance, the disable can have been done by the resource tenant admin, by the app owner, or globally by Microsoft itself - so the remediation starts with finding out why it's disabled, not just flipping it back on. Fires at token acquisition, before any back-office call. Not retried - a disabled service principal won't self-heal.Update-MgServicePrincipal -ServicePrincipalId <objectId> -AccountEnabled:$true. Once re-enabled, the next retry of the failed transaction will succeed without any connector change.Resource not consented in tenant
DSCFG016fix configurationAADSTS500011: The resource principal named '<resource>' was not found in the tenant named '<tenant>', or the equivalent AADSTS650056: Misconfigured application variant. The connector's client app is fine (otherwise DSCFG014 would fire), but the resource the connector is requesting a token for - typically the Business Central API enterprise app - has no service principal in the customer's tenant. The resource app was never admin-consented into that directory, so AAD has nothing to issue a token to. Fires at token acquisition, before any back-office call. Not retried - missing consent won't self-heal.https://login.microsoftonline.com/<tenant>/adminconsent?client_id=<bc-resource-app-id> so its service principal is provisioned. Distinct from DSCFG014, which is about consenting the client app; here the client is fine and it's the resource that's missing. Once the resource service principal exists in the tenant, the next retry will succeed without any connector change.HTTP transient (429/5xx)
DSHTTP001retried automaticallyRetry-After header is honored if present.HTTP proxy tunnel failure
DSHTTP002retried automaticallyCONNECT request, so the tunnel to the back-office never opened. HttpRequestException.HttpRequestError is ProxyTunnelError; StatusCode is null because no response was received from the destination.proxy.internal.*.dimescheduler.com) rather than the back-office itself - escalate to Dime.Scheduler support.SQL transient
DSDB001retried automaticallyDatabase access
DSDB002retried automaticallyConcurrency conflict
DSDB003retried automaticallySQL timeout
DSDB004retried automaticallyUndiagnosed
DSUNK001undiagnosedFailed so the RetryService picks it up later.General troubleshooting steps
When encountering transaction errors, follow these steps. For more detailed guidance, see the Business Central Troubleshooting guide.
- Check the transaction details:
- Navigate to Administration > Transactions > Errors.
- Click on the failed appointment to view detailed error information.
- Review the error message - the code in square brackets at the start maps to a section above.
- Verify connector configuration:
- Navigate to Administration > Connectors.
- Check the Business Central system:
- Review the Dime.Scheduler Appointments table.
- Verify the web service endpoints are available and responding.
- Retry the transaction:
- After resolving the underlying issue, retry the failed transaction.