It was a long October working on a hot release :). Finally got the time to get back to the transaction series. The demo uses a very simple system metaphor where services are decomposed in:
- Data Contracts to transport business entity data across the wire in an optimized fashion.
- Message Contracts to represent the services request and response and to allow service operation changes without breaking contracts.
- Service Contracts to represent the service operations.
- Fault Contracts to represent errors in the services (not explored in this demo).
- Services Web Site.
- Entity Framework Domain Model.
- ASP.NET Web Pages for data consulting.
Transactions are enabled at the WS HTTP binding:
<wsHttpBinding> <binding name="wsHttp" transactionFlow="true" /> </wsHttpBinding>The Isolation Level is set to ReadCommited:
[ServiceBehavior(TransactionIsolationLevel = IsolationLevel.ReadCommitted)] public class CustomersService : ICustomersService { ... }Transactional Operations use the TransactionScope attribute to manage transactions:
[OperationBehavior(TransactionScopeRequired = true)] public CreateCustomerResponse CreateCustomer(CreateCustomerRequest request) { ... }And the Entity Framework integrates just fine with WCF distributed transactions:
using (DemosEntities entities = new DemosEntities()) { // create the entity Customer customer = new Customer(); // translate the data contract to the entity customer.Name = request.Customer.Name; customer.Id = Guid.NewGuid(); // add it to the set entities.AddToCustomerSet(customer); // "commit" changes entities.SaveChanges(); }
No comments:
Post a Comment