Transaction Errors
When an appointmentAppointmentA task scheduled to a resource for a specific period - the scheduled instance you see on the planning board. sync to Business Central fails, the failed transactionTransactionThe recorded call Dime.Scheduler makes to a connected system when the planning changes. It counts as successful on an HTTP 200, which means the endpoint received it, not that the back office processed it. shows up on the Errors page with a message prefixed by a stable codeTransaction error codeA stable code such as DSBC003 that a connector attaches to a failed transaction. Codes never change once issued, so one can be looked up on the transaction errors reference page of its connector. 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 connectorConnectorAn integration that links Dime.Scheduler to a back-office system, routing data in and scheduling decisions back out. or back-officeBack officeThe ERP or business system Dime.Scheduler plans for - most often Microsoft Dynamics 365 Business Central. It owns the master data and remains authoritative over what it receives. 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.BC no reply
DSBC012retried automaticallyCommunicationException with The server did not provide a meaningful reply; this might be caused by a contract mismatch, a premature session shutdown or an internal server error. The reply channel came back empty because the server closed the connection mid-request without sending a SOAP envelope. Unlike DSBC005 there is no inner I/O exception; the failure originates at the WCF channel itself. For an established connector this is a premature session shutdown (a BC app-pool recycle, a session or idle timeout, a server restart, or a proxy dropping a long SOAP call) rather than the contract mismatch the message also warns about: a genuine contract mismatch would fail every call, not sporadically.connectionTimeout, and at any reverse proxy or load balancer idle timeout in front of BC. If the same call fails on every attempt across retries, suspect an actual contract mismatch - a stale WSDL or AL extension - and republish the BC web service.BC gateway JSON error
DSBC013retried automaticallyProtocolException with The content type application/json of the response message does not match the content type of the binding (text/xml; charset=utf-8), and the first bytes of the response are a JSON body like { "statusCode": 500, "message": "Internal server error", "activityId": "..." }. The API gateway in front of BC's SaaS service tier failed before producing a SOAP envelope and returned its JSON error page instead. The SOAP request never reached the AL runtime. The embedded statusCode carries the real HTTP status.DSBC009. A 500 is not retried. If it persists, check BC tenant health in the admin center, and quote the activityId from the response body when opening a Microsoft support case: it is their correlation ID.BC record modified
DSBC014retried automaticallyAnother user has modified the record for this DS Appointment after you retrieved it from the database. Enter your changes again in the updated window, or start the interrupted activity again. This is BC's optimistic concurrency check: the record version changed between the AL code's read and its modify, because another session committed a write to the same row mid-call. Typically that is the BC job queue draining the staging table, a user editing in the client, or a second Dime.Scheduler transaction for the same appointment. Distinct from DSBC011, where the competing transaction is still open and blocks the write; here it already committed and only the version check failed.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.HTTP connection failure
DSHTTP003retried automaticallyHttpRequestException.HttpRequestError is InvalidResponse, ResponseEnded or ConnectionError, and StatusCode is null. The typical symptom is Received an invalid status line: '0'.: a stale pooled connection where the leftover chunk terminator of a previous response is misread as the next response's status line. The HTTP client only retries on its own when no bytes were received, so once a stray byte arrives the parse error surfaces here instead.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.