데이터베이스에서 여러 작업을 실행하는 basicHttpBinding
을 통해 WCF 서비스를 노출하고 있습니다.WCF basicHttpBinding : 클라이언트에 대한 응답이 실패 할 때 롤백
클라이언트가 응답을받지 못하면 WCF을 통한 트랜잭션 흐름이없는 롤백된다는 보장을 원합니다. 예. 클라이언트는 서버에서 실행되는 "DoX"메소드를 호출하지만 클라이언트가 종료되기 전에 클라이언트가 충돌합니다. 그런 다음 응답을 클라이언트에 보낼 수 없으면 데이터베이스 작업을 롤백해야합니다.
그렇게 할 방법이 있습니까? 이러한 방식으로 [OperationBehavior(TransactionScopeRequired=true)]
속성이 작동합니까? 서버 측에서 통신 오류를 처리 할 수 있습니까?
는 업데이트 1 :은 는 응답이 클라이언트로 전송하고, 따라서 클라이언트가 응답을 수신하지 않는 경우 롤백을 수행하는 데 사용할 수 없습니다 전에 [OperationBehavior(TransactionScopeRequired=true)]
가 트랜잭션을 커밋 보인다.
업데이트 2 : 명확하게 다시 상태로, 나는 트랜잭션이 클라이언트 측과 어떤 방식으로 상호 작용을 할 필요가 없습니다. 클라이언트는 트랜잭션을 알지 못하며 트랜잭션을 취소하거나 커밋 할 수 없으며 바인딩을 통해 트랜잭션을 처리해야합니다. 전용 전송 채널이 수신 클라이언트에 메시지를 전달할 수없는 경우 롤백 할 트랜잭션을 서버 측에 지정합니다. TCP/IP의 경우이 정보는 서버에서 즉시 사용할 수 있어야합니다. 해야
그래서 서버 측 가상의 실행 흐름은 (클라이언트 측의 부족을 통지)합니다 (TCP 패킷의 어떠한 ACK 클라이언트로 다시 보낼) :
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
왜 basiHttpBinding을 사용해야합니까? wsHttpBinding은 이것을 줄 것이다. –
@JustinDearing : 서비스에 액세스하는 클라이언트가 wsHttpBinding을 지원하지 않습니다. – GaussZ
호기심에서 클라이언트 플랫폼이란 무엇입니까? http://wso2.com에 비누 클라이언트가 있습니까? –