What is a transaction in WCF?
- A transaction is a collection or group of one or more units of operation executed as a whole. It provides way to logically group single piece of work and execute them as a single unit. In addition, WCF allows client applications to create transactions and to propagate transactions across service boundaries.
What are various types of transaction in WCF?
- Committed transaction: Transaction that execute successfully and transfer the system from consistence state A to B.
- Aborted
     transaction: Transaction encounters an error and rollback to
     Consistence State A from intermediate state.
- In-doubt transaction: Transactions fail to either in commit or abort
Which protocol is used to handle transactions
in WCF?
- WCF uses WS-Atomic protocol to managed transaction
     across WCF services. So you can have different WCF services hosted on
     different computers and they all can run under one transaction unit. 
- In WS-Atomic protocol one transaction you can have
     heterogeneous WCF services developed in different platform. In other words
     you can have JAVA and .NET web services running under one transaction.
What are the two different kinds of phases in WCF transactions?
WCF transactions follow 2 phase commit. So there are 2 phases
-  prepare
     phase 
-  commit
     phase. 
- All
     co-ordination of transactions is done by the transaction manager. 
In prepare phase the transaction manager checks
whether all entities are prepared to commit. In commit phase the actual commit
starts. 
Where does the transaction manager reside?
Transaction manager resides at the client computer who initiates the transaction.
Transaction manager resides at the client computer who initiates the transaction.
What the different transaction options ?
In the previous code we have use 'TransactionFlowOption'. We can specify transaction in 3 ways in WCF:-
In the previous code we have use 'TransactionFlowOption'. We can specify transaction in 3 ways in WCF:-
- TransactionFlowOption.NotAllowed
 This is a default option. Using this option no transaction will be propagated across the binding. If any client attempts to call the WCF service in a transaction it will be ignored for this option.
- TransactionFlowOption.AllowedThis option specifies that
     client can call this WCF service in a transaction. It's not compulsory
     that the service needs to be called in a transaction. You can call without
     the transaction also. 
 TransactionFlowOption.MandatoryThis option specifies that client must call the WCF service in a transaction mode. If the WCF service is called without transaction, 'FaultException' will be raised
In WCF,
transaction can be propagated across service boundary. This enables service to
participate in a client transaction and it includes multiple services in same
transaction, Client itself will act as service or client.
We can
specify whether or not client transaction is propagated to service by changing
Binding and operational contract configuration
<bindings>
      <netTcpBinding>
        <binding transactionFlow="true"></binding>
      </netTcpBinding>
    </bindings>
Even after enabling transaction flow
does not mean that the service wants to use the clients  transaction in
every operation.
Specify, TranscationFlowAttribute in
operational contract to enable transactional flow.
[ServiceContract]
public interface IService
{
    [OperationContract]
    [TransactionFlow(TransactionFlowOption.Allowed)]
    int Add(int a, int b);
    [OperationContract]
    int Subtract(int a,
int b);
}
Explain the two phase transaction process.
Let us assume three computers in this example.
- Computer 1: Client starts transaction
- Computer 2: Service A is hosted here
- Computer 3: Service B is hosted here.
- Computer 1, initiates the transaction; now the first phase ‘prepare’ phase begins.
- Computer 1, sends messages to Computer2 and Computer3 to check if they are ready.
- Computer2 and Computer3 respond to the request and indicate they are ready.
- Computer1 , receives the ready message, phase 1 ends and phase 2 begins.
- Computer1, issues command to computer 2 and computer 3
- Computer 2 and computer 3 start execution, once the execution is complete, they commit the transaction and send a message back to Computer 1. This ends the commit phase.
- In case Computer 2 or Computer 3 are unable to carry out the transaction and the transaction is reverted.
When all the WCF services revert saying they
have committed the transaction is marked as successful. 


 
No comments:
Post a Comment