Microsoft | patterns & practices | Developer Network | Enterprise Library | Acceptance Testing Guide | Personal Site
Oct 9 Update
Topaz now supports the new Task-based async pattern using TPL.
Aug 29 Update
We removed the hard dependency on the Windows Azure Shared Caching core assembly (Microsoft.ApplicationServer.Caching.Core, Version=126.96.36.199). This was causing build/deployment issues for users who wanted to use the Windows Azure Caching Preview (Microsoft.ApplicationServer.Caching.Core, Version=188.8.131.52) even when not using Topaz to handle transient faults accessing the Caching service, as the preview is not yet supported by Topaz. The updated version is v..5.0.1208.2 and it's availabe via NuGet.
Today we shipped via NuGet two service updates to the Transient Fault Handling Application Block targeting the Windows Azure SDK for .NET 1.6 Nov 2011 and 1.7 June 2012 respectively. The updates include fixes to the Service Bus and the Azure Storage transient error detection strategies.
Please read the Release Notes and perform the update.
Is there a way to use Topaz together with the Data Access Application Block ?
You can use Topaz with DAAB just as you would with any arbitrary code that could be retried. So, you can wrap calls to DAAB with Topaz using the SqlAzureErrorDetection strategy. However, there's no DAAB-specific extensions to Topaz that could simplify the usage and make retries behind the scenes of DAAB.
I am using this architecture with ADO.NET Entity Framework and have read several posts on how to accomplish this, but I still have questions on exactly when I need to wrap my calls in the retry block. Can you please answer the following question:
1) If I have the code below, which statements should be wrapped within the retry block? The Linq query, or the 1st call using the result set of the Linq query, or both? I am concerned about when it actually goes to the DB (Lazy Loading)
var ResultSet = from persons in Conn.Persons where persons.Gender == “Male” select persons;
int iPersonsCount = ResultSet.Count();
2) Do all calls using the result set need to be wrapped with retry blocks? Again this is a concern due to Lazy Loading, and when it goes to the DB.
3) If I am using ADO.NET entity framework, should I also over load the “OnContextCreated()” method, to wrap the connection object in a retry?
Any chance to update topaz for 'Service Bus for Windows Server' ? I think it requires only a rebuild because of the same codebase with 'Azure Service Bus', right?