Ujawniam usługę WCF za pośrednictwem basicHttpBinding
, która wykonuje kilka operacji w bazie danych.WCF basicHttpBinding: Cofnij, gdy odpowiedź na klienta się nie powiedzie
Chcę zagwarantować, że jeśli klient nie otrzyma odpowiedzi operacje bazy danych zostaną wycofane (bez przepływu transakcji przez WCF). E.g. klient wywołuje metodę "DoX", która jest wykonywana na serwerze, ale przed jej zakończeniem następuje zawieszenie klienta. Operacje bazy danych powinny zostać wycofane, gdy tylko odpowiedź nie zostanie wysłana do klienta.
Czy jest jakiś sposób to zrobić? Czy atrybut [OperationBehavior(TransactionScopeRequired=true)]
działa w taki sposób? Czy istnieje możliwość poradzenia sobie z błędami komunikacji po stronie serwera?
Aktualizacja 1: Wydaje [OperationBehavior(TransactionScopeRequired=true)]
zatwierdza transakcję przed odpowiedź jest wysyłany do klienta, a tym samym nie może być stosowany do wykonywania wycofywania jeśli klient nie otrzyma odpowiedzi.
Aktualizacja 2: Aby stwierdzić jasno znowu, nie mam potrzeby transakcji oddziaływać w żaden sposób ze strony klienta. Klient nie powinien znać transakcji, mieć możliwości jej anulowania ani zatwierdzenia, a transakcja nie powinna przepływać przez powiązanie. Tylko miejsce, w którym chcę, aby transakcja została wycofana, znajduje się po stronie serwera, jeśli kanał transportu nie może dostarczyć wiadomości do klienta odbierającego. W przypadku TCP/IP informacje te powinny być łatwo dostępne dla serwera. (Brak ACK pakietu TCP wysłać do klienta)
Więc hipotetyczny przepływ wykonanie po stronie serwera (zauważyć brak po stronie klienta) powinno być:
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
Dlaczego musisz używać basiHttpBinding? wsHttpBinding da ci to. –
@ JustinDearing: Klienci uzyskujący dostęp do usługi nie obsługują funkcji wsHttpBinding. – GaussZ
z ciekawości jaka jest platforma klienta? Czy http://wso2.com ma dla niego klienta mydła? –