On an early Dynamics 365 for Operations project, we needed to integrate the Azure-hosted Retail Server with an on-premise web API (see MPOS Technical Architecture for how the overall Retail topology fits together).
The integration worked in Dev but broke the moment we promoted it to the UAT sandbox, with:
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
It took some investigation to trace the cause: Dynamics 365 for Operations enforces TLS 1.2, while the destination server only supported TLS 1.0 and 1.1.
What helped diagnose it
- Retail peripherals overview
- TLS 1.2 and .NET support
- Disabling cryptographic protocols for PCI compliance by John Louros
The last link is the most useful of the three — it includes a small console application that tries every combination of TLS protocol between source and destination, and tells you exactly which ones are supported. That's what actually pinned down the mismatch.