Как выполнить транзакцию базы данных, в которой я создаю новую запись, а затем вызываю веб-службу, используя новый идентификатор записи, возвращенный из базы данных, который также будет управлять той же базой данных? Очевидно, я мог бы обновить все таблицы непосредственно из одного и того же объекта SQLConnection, но логика в вызове веб-службы может быть изменена, и мне действительно нужно убедиться, что изменения, вносимые моим кодом, фиксируются вместе с изменениями, внесенными вызываемой веб-службой.





Если веб-служба несет ответственность за управление базой данных, я бы расширил веб-службу для выполнения действий, которые выполняет ваш код. Смысл использования веб-службы в том, чтобы отделить ваш код от необходимости напрямую работать с базой данных. Внедрение прямых манипуляций с БД в ваш код просто сделает вещи намного более запутанными и сложными в обслуживании.
Это не то, чего вы хотите в реальной транзакции. Транзакции должны быть как можно короче, что означает отсутствие взаимодействия с пользователем во время транзакции или, в данном случае, ожидания ответа веб-службы.
Что касается вашей проблемы, если у вас есть контроль над веб-службой, измените веб-службу, чтобы сделать вызов хранимой процедуры, который выполняет всю транзакцию. Если есть действия, которые ДОЛЖНЫ выполняться каждый раз при вызове службы, они должны быть частью службы.
Я предполагаю, что у вас нет контроля над веб-службой, иначе это не было бы проблемой. Как веб-служба обращается к базе данных? Если он уже использует хранимую процедуру, вы сможете добавить туда необходимую логику. Опять же, я предполагаю, что это не так, иначе это не было бы проблемой. Я предлагаю вам попытаться изменить веб-службу в соответствии с этой архитектурой, если это вообще возможно.
Предполагая, что веб-служба обращается к таблицам напрямую (фу), вам нужно будет поместить в вызывающий код код, который выполняет вставку, вызывает веб-службу, а затем проверяет, выполнила ли веб-служба то, что она должна была делать, и если этого не произошло, тогда ваш код предпримет необходимые действия, чтобы все отменить. По сути, это похоже на самодельный механизм транзакций. Кроме того, он очень запутан, подвержен ошибкам и сложен в обслуживании. Не говоря уже о том, что это не 100% полное доказательство.