WCF basicHttpBinding: откат при сбое ответа клиенту

Я открываю службу WCF через basicHttpBinding , которая выполняет несколько операций с базой данных.

Я хочу гарантировать, что если клиент не получит ответа, операции с базой данных будут отменены ( без какого-либо потока транзакций через WCF ). Например. клиент вызывает метод «DoX», который выполняется на сервере, но до его завершения происходит сбой клиента. После этого операции с базой данных следует откатить, как только ответ не может быть отправлен клиенту.

Есть ли способ сделать это? Будет ли атрибут [OperationBehavior (TransactionScopeRequired = true)] работать таким образом? Есть ли возможность обрабатывать ошибки связи на стороне сервера?

Обновление 1: Кажется, [OperationBehavior (TransactionScopeRequired = true)] фиксирует транзакцию до того, как ответ будет отправлен клиенту и таким образом, не может использоваться для отката, если клиент не получает ответа.

Обновление 2: Чтобы еще раз четко заявить, у меня нет необходимости, чтобы транзакция каким-либо образом взаимодействовала со стороной клиента. Клиент не должен знать о транзакции, иметь возможность отменить или зафиксировать ее, и никакая транзакция не должна проходить через привязку. Единственное место, где я хочу откат транзакции, находится на стороне сервера, если транспортный канал не может доставить сообщение принимающему клиенту. В случае TCP / IP эта информация должна быть легко доступна серверу. (Нет ACK TCP-пакета, отправленного обратно клиенту)

Таким образом, гипотетический поток выполнения на стороне сервера (обратите внимание на отсутствие стороны клиента) должен быть:

Receive client request

Start transaction

Execute all logic inside the service operation

Send reply back to client

if (reply.failedToReceive) { transaction.Rollback() } // due to a failing TCP/IP transmission
6
задан GaussZ 21 February 2012 в 20:40
поделиться