Что ж, возможно, потребуется полная перезапись большей части кода C / S, но вместо использования компонентов Indy вы можете вместо этого использовать решение COM +. По сути, вы должны создать компонент COM +, который будет установлен на сервере, и ваши клиентские приложения будут подключаться к этому клиенту и напрямую вызывать функции этого компонента. Он будет иметь управление транзакциями, которое будет обрабатываться самой Windows, и то же самое относится и к обработке транзакций. Технически возможно также создавать события, которые позволили бы серверу выполнять обратные вызовы клиенту, хотя это усложнило бы ситуацию.
Однако я не думаю, что это решение сработает для вас, если у вас нет большого опыта разработки COM в Windows и / или вы достаточно смелы, чтобы попробовать что-то другое.
В прошлом у меня была похожая проблема, когда сотням клиентов приходилось подключаться к одному серверу, совершая все виды транзакций с базой данных. У него крутая кривая обучения, но мне и моей команде удалось заставить все работать, и как только мы поняли методику, это привело к очень стабильному и надежному решению, в котором удалось до 500 пользователей одновременно выполнять обновления и другие действия в одном экстремальный стресс-тест Но опять же, проклятие обучения крутое, поэтому оно может оказаться не тем решением, которое вы ищете.
(Тем не менее, COM + будет использовать множество встроенных в Windows функций, таких как управление транзакциями, пул баз данных и многое другое.)