<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Florin Lazar - Consistency Checkpoint</title><subtitle type="html">&lt;b&gt;Make it simple, robust and scalable&lt;/b&gt;</subtitle><id>http://blogs.msdn.com/florinlazar/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/florinlazar/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2007-03-07T16:58:00Z</updated><entry><title>Intro for Microsoft Azure .Net Service Bus</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2009/04/02/9530050.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2009/04/02/9530050.aspx</id><published>2009-04-03T02:10:00Z</published><updated>2009-04-03T02:10:00Z</updated><content type="html">Clemens Vasters gives a great introduction to Microsoft Azure .Net Service Bus and its 4 feature areas: Naming, Registry, Connectivity, and Eventing. Find it at http://vasters.com/clemensv/PermaLink,guid,92d78bee-2cfd-4a29-95ab-c5abb9b905e7.aspx...(&lt;a href="http://blogs.msdn.com/florinlazar/archive/2009/04/02/9530050.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9530050" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author></entry><entry><title>Atbroker.exe application error - CTRL-ALT-END in a remote session</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2008/11/25/9143089.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2008/11/25/9143089.aspx</id><published>2008-11-26T01:20:00Z</published><updated>2008-11-26T01:20:00Z</updated><content type="html">I use remote desktop daily. The Atbroker.exe application error followed by black screen seemed to be gone for a while. Now it is back. The only solution that I know of and which works most of the times is "CTRL-ALT-END" (the equivalent of “CTRL-ALT-DEL” for remote sessions) followed by ESC. When it doesn’t work, I need to log in with another user and kill the session with the issue or reboot the box – nasty....(&lt;a href="http://blogs.msdn.com/florinlazar/archive/2008/11/25/9143089.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9143089" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author></entry><entry><title>When not to use transactions and where you can't use transactions</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2008/05/08/8475058.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2008/05/08/8475058.aspx</id><published>2008-05-08T22:21:00Z</published><updated>2008-05-08T22:21:00Z</updated><content type="html">Transactions are great when everyone plays in. You group a set of activities together under a transaction and you start executing them. If anything bad happens along the way or something doesn't go as planned, invoke rollback and all is taking care of automatically by the infrastructure: everything is undone and the app returns to the state before the transaction started; recovery and consistency is a piece of cake with nothing to worry about. But... I can't really use transactions for long running...(&lt;a href="http://blogs.msdn.com/florinlazar/archive/2008/05/08/8475058.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8475058" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="transactions compensation" scheme="http://blogs.msdn.com/florinlazar/archive/tags/transactions+compensation/default.aspx" /></entry><entry><title>MSDTC and COM+ Configuration Tool in Vista</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2008/05/07/8467420.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2008/05/07/8467420.aspx</id><published>2008-05-07T22:01:00Z</published><updated>2008-05-07T22:01:00Z</updated><content type="html">To access the MSDTC and COM+ configuration tool in Windows Vista, also known as Component Services MMC, you have the following options: 1. Run “dcomcnfg” 2. Or run: %SystemRoot%\System32\comexp.msc 3. Or if you prefer, you can add a shortcut to %SystemRoot%\System32\comexp.msc in Control Panel If you have UAC on and you want to do 3, first make a shortcut for %SystemRoot%\System32\comexp.msc on your Desktop and then move it to Control Panel....(&lt;a href="http://blogs.msdn.com/florinlazar/archive/2008/05/07/8467420.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8467420" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="MSDTC Configuration" scheme="http://blogs.msdn.com/florinlazar/archive/tags/MSDTC+Configuration/default.aspx" /></entry><entry><title>Exception Handling without catch(Exception)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2008/05/06/8465197.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2008/05/06/8465197.aspx</id><published>2008-05-07T06:58:00Z</published><updated>2008-05-07T06:58:00Z</updated><content type="html">The design guidelines for exception handling are quite clear on avoiding “catch all” and/or avoiding catching exceptions you can’t handle. But there are cases when you really need to know if the try block completed successfully or not, and possibly take some action. One way one could achieve this without breaking the guideline is to set a flag at the end of the try block and then query it inside finally : bool workCompleted = false ; try { DoSomething(); DoSomethingMore(); workCompleted = true ;...(&lt;a href="http://blogs.msdn.com/florinlazar/archive/2008/05/06/8465197.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8465197" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="exceptions" scheme="http://blogs.msdn.com/florinlazar/archive/tags/exceptions/default.aspx" /></entry><entry><title>Working with CMD and Long Path Names</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2008/05/06/8463808.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2008/05/06/8463808.aspx</id><published>2008-05-06T19:54:00Z</published><updated>2008-05-06T19:54:00Z</updated><content type="html">I like using the command prompt for a lot of things and working with long (or very long) path names is something that is common these days. Fortunately, you can customize cmd by using "prompt". Do a “prompt /?” in a command window to see all the options. I like it simple and I use: “PROMPT=$p$_$+$g”. This gives: C:\Windows\System32\Msdtc\Trace &amp;gt; To persist it, set it as an environment variable....(&lt;a href="http://blogs.msdn.com/florinlazar/archive/2008/05/06/8463808.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8463808" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="cmd" scheme="http://blogs.msdn.com/florinlazar/archive/tags/cmd/default.aspx" /></entry><entry><title>How to Use System.Data with System.Transactions and Maintain Atomicity and Data Consistency</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2008/05/05/8460156.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2008/05/05/8460156.aspx</id><published>2008-05-05T10:04:00Z</published><updated>2008-05-05T10:04:00Z</updated><content type="html">The Bug I call it a bug. Initially I was persuaded to believe it was a feature; later I was "convinced" that it is now a matter of app compat and it can't be changed anymore. Let’s look at the following code: SqlConnection connection1 = new SqlConnection(connectionString); using(TransactionScope txScope = new TransactionScope()) { connection1.Open(); SqlCommand command1 = new SqlCommand(commandString1, connection1); command1.ExecuteNonQuery(); SqlCommand command2 = new SqlCommand(commandString2,...(&lt;a href="http://blogs.msdn.com/florinlazar/archive/2008/05/05/8460156.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8460156" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author></entry><entry><title>Limitation of TransactionScope (and using)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2008/05/05/8459994.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2008/05/05/8459994.aspx</id><published>2008-05-05T08:38:00Z</published><updated>2008-05-05T08:38:00Z</updated><content type="html">If you read the documentation for TransactionScope , you will find: "If no exception occurs within the transaction scope […], then the transaction in which the scope participates is allowed to proceed. If an exception does occur within the transaction scope, the transaction in which it participates will be rolled back. " Later the doc says: “When your application completes all work it wants to perform in a transaction, you should call the Complete method only once to inform that transaction manager...(&lt;a href="http://blogs.msdn.com/florinlazar/archive/2008/05/05/8459994.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8459994" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="TransactionScope" scheme="http://blogs.msdn.com/florinlazar/archive/tags/TransactionScope/default.aspx" /><category term="using" scheme="http://blogs.msdn.com/florinlazar/archive/tags/using/default.aspx" /></entry><entry><title>Avoiding Transaction Promotion with Multiple Connections - Improvements in System.Data and SQL Server 2008</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2008/05/02/8452486.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2008/05/02/8452486.aspx</id><published>2008-05-02T23:02:00Z</published><updated>2008-05-02T23:02:00Z</updated><content type="html">Great news! The new updates added to System.Data and SQL Server 2008 finally allow multiple Open/Close connections to the same SQL Server without promoting the transaction to MSDTC. This was by far the most requested feature for the System.Transactions/System.Data/SQL Server combination. There is no more the need to write workarounds like ConnectionScope to avoid promotions. Now I can write as many Open/Close, Open/Close as I need to, without worrying about promotion: transacted(()=&amp;gt; { using (SqlConnection...(&lt;a href="http://blogs.msdn.com/florinlazar/archive/2008/05/02/8452486.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8452486" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="System.Data" scheme="http://blogs.msdn.com/florinlazar/archive/tags/System.Data/default.aspx" /><category term="Lightweight Transactions" scheme="http://blogs.msdn.com/florinlazar/archive/tags/Lightweight+Transactions/default.aspx" /></entry><entry><title>A Simpler TransactionScope</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2008/03/24/8334137.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2008/03/24/8334137.aspx</id><published>2008-03-24T19:33:00Z</published><updated>2008-03-24T19:33:00Z</updated><content type="html">In .Net 3.5 I can write a transactional code block as follows: transacted(()=&amp;gt; { using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command1 = new SqlCommand(commandString1, connection); command1.ExecuteNonQuery(); SqlCommand command2 = new SqlCommand(commandString2, connection); command2.ExecuteNonQuery(); } }); No need for using and no need to remember to call Complete at the end of the block. To enable this I need to write just a few lines...(&lt;a href="http://blogs.msdn.com/florinlazar/archive/2008/03/24/8334137.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8334137" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="TransactionScope" scheme="http://blogs.msdn.com/florinlazar/archive/tags/TransactionScope/default.aspx" /></entry><entry><title>Flowing or propagating transactions in .Net</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2008/02/20/flowing-or-propagating-transactions-in-net-blog-entry-under-construction.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2008/02/20/flowing-or-propagating-transactions-in-net-blog-entry-under-construction.aspx</id><published>2008-02-20T18:36:00Z</published><updated>2008-02-20T18:36:00Z</updated><content type="html">&lt;P&gt;System.Transactions transactions are bounded to the appdomain. Which means that if you make in-appdomain calls from inside a TransactionScope, those calls will share the transaction. This also means that if you need to make a call outside the current appdomain, or outside the process, you will need to "flow" the transaction. &lt;/P&gt;
&lt;P&gt;To flow a System.Transactions transaction, there are a few options:&lt;/P&gt;
&lt;P&gt;a. if you are using&amp;nbsp;serialization&lt;BR&gt;&amp;nbsp; &lt;PRE class=csharpcode&gt;//sender code
using(TransactionScope ts = new TransactionScope())
{
  RemoteCallUsingSerialization(Transaction.Current, other parameter); // this is the call to other appdomain/process
  // notice I added a new parameter of type System.Transactions.Transaction  

  ts.Complete();
}

//destination code
void RemoteCallUsingSerialization(System.Transactions.Transaction tx, other parameter)
{
  using(TransactionScope ts2 = new TransactionsScope(tx))
  {
   // access transactional resourses like a database; this code will execute as part of the same transaction
   ts2.Complete();
  }
}
&lt;/PRE&gt;
&lt;P&gt;b. if you are not using&amp;nbsp;serialization&lt;BR&gt;&amp;nbsp; &lt;PRE class=csharpcode&gt;//sender code
using(TransactionScope ts = new TransactionScope())
{  
  RemoteCall(TransactionInterop.GetTransmitterPropagationToken(Transaction.Current), other parameter); // this is the remote call
  // notice I added a new parameter of type byte[]  

  ts.Complete();
}

//destination code
void RemoteCall(byte[] tx, other parameter)
{
  using(TransactionScope ts2 = new TransactionsScope(TransactionInterop.GetTransactionFromTransmitterPropagationToken(tx)))
  {
   // access transactional resourses like a database;
   // this code will execute as part of the same transaction
   ts2.Complete();
  }
}
&lt;/PRE&gt;
&lt;P&gt;c. if .Net 3.0 or higher is an option, you can use WCF and its support for transactions using attributes: &lt;A href="http://msdn2.microsoft.com/en-us/library/aa347993.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa347993.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa347993.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Remark: When the transaction is flown outside the current appdomain, it will get upgraded to a distributed transaction (or MSDTC transaction).&lt;/P&gt;
&lt;P&gt;If you are not using .Net, see &lt;A href="http://blogs.msdn.com/florinlazar/archive/2004/10/02/236965.aspx" mce_href="http://blogs.msdn.com/florinlazar/archive/2004/10/02/236965.aspx"&gt;http://blogs.msdn.com/florinlazar/archive/2004/10/02/236965.aspx&lt;/A&gt; for propagating transactions in C++.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7821919" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="flow propagate transactions System.Transactions" scheme="http://blogs.msdn.com/florinlazar/archive/tags/flow+propagate+transactions+System.Transactions/default.aspx" /></entry><entry><title>TIP is now deprecated</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2008/01/22/tip-is-now-deprecated.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2008/01/22/tip-is-now-deprecated.aspx</id><published>2008-01-23T01:10:00Z</published><updated>2008-01-23T01:10:00Z</updated><content type="html">TIP is getting deprecated - see the note at &lt;A href="http://msdn2.microsoft.com/en-us/library/ms679484(VS.85).aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms679484(VS.85).aspx&lt;/A&gt;&lt;BR&gt;If the native OleTx protocol used by MSDTC and System.Transactions is not friendly enough for your firewall, you should consider the WS-AtomicTransactions protocol provided through Windows Communication Foundation in .Net Framework 3.0 and higher: &lt;A href="http://msdn2.microsoft.com/en-us/library/ms730266.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms730266.aspx&lt;/A&gt;&lt;BR&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7203676" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="TIP WS-AT" scheme="http://blogs.msdn.com/florinlazar/archive/tags/TIP+WS-AT/default.aspx" /></entry><entry><title>MSDN Magazine Article on Transactional File System</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2007/07/11/msdn-magazine-article-on-transactional-file-system.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2007/07/11/msdn-magazine-article-on-transactional-file-system.aspx</id><published>2007-07-11T18:25:00Z</published><updated>2007-07-11T18:25:00Z</updated><content type="html">&lt;P&gt;Jason Olson describes the Transactional NTFS and how you can take advantage of it in your applications: &lt;A href="http://msdn.microsoft.com/msdnmag/issues/07/07/NTFS/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/07/07/NTFS/default.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3818063" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="Transactional NTFS" scheme="http://blogs.msdn.com/florinlazar/archive/tags/Transactional+NTFS/default.aspx" /></entry><entry><title>WCF in Romania</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2007/05/02/wcf-in-romania.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2007/05/02/wcf-in-romania.aspx</id><published>2007-05-03T06:27:00Z</published><updated>2007-05-03T06:27:00Z</updated><content type="html">&lt;P&gt;These days I'm in Romania with a tour at 3 universities (in Bucharest, Cluj and Iasi)&amp;nbsp;talking about Windows Communication Foundation, distributed systems and web services. &lt;A class="" title="Adi Oltean" href="http://blogs.msdn.com/adioltean/" mce_href="http://blogs.msdn.com/adioltean/"&gt;Adi Oltean&lt;/A&gt; is also talking about storage technologies in Windows.&lt;/P&gt;
&lt;P&gt;So far the seminars were received really well and&amp;nbsp;we made a lot of friends. I'm really&amp;nbsp;pleased to be able to contribute to the adoption of WCF and to demonstrate the amazing value and power of WCF with its productivity, interoperability and extensibility features.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;More details at &lt;A href="http://reg.studentclub.ro/RegisterForEvent.aspx?idEveniment=55"&gt;http://reg.studentclub.ro/RegisterForEvent.aspx?idEveniment=55&lt;/A&gt;&amp;nbsp;(in romanian).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;I would like to thank &lt;A class="" title="Todi Pruteanu" href="http://weblogs.studentclub.ro/todi" mce_href="http://weblogs.studentclub.ro/todi"&gt;Todi Pruteanu&lt;/A&gt; for organizing these events.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2388526" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="Romania WCF" scheme="http://blogs.msdn.com/florinlazar/archive/tags/Romania+WCF/default.aspx" /></entry><entry><title>"Orcas" March 07 CTP: Support for OASIS WS-AT 1.1 and WS-Coord 1.1</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/florinlazar/archive/2007/03/07/orcas-march-07-ctp-support-for-oasis-ws-at-1-1-and-ws-coord-1-1.aspx" /><id>http://blogs.msdn.com/florinlazar/archive/2007/03/07/orcas-march-07-ctp-support-for-oasis-ws-at-1-1-and-ws-coord-1-1.aspx</id><published>2007-03-08T00:58:00Z</published><updated>2007-03-08T00:58:00Z</updated><content type="html">&lt;P&gt;In the &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=B533619A-0008-4DD6-9ED1-47D482683C78&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=B533619A-0008-4DD6-9ED1-47D482683C78&amp;amp;displaylang=en"&gt;"Orcas" March 2007 CTP for Visual Studio and .Net&lt;/A&gt;, Windows Communication Foundation brings support for OASIS specifications &lt;A class="" href="http://docs.oasis-open.org/ws-tx/wsat/2006/06" mce_href="http://docs.oasis-open.org/ws-tx/wsat/2006/06"&gt;WS-AtomicTransaction 1.1&lt;/A&gt; and &lt;A class="" href="http://docs.oasis-open.org/ws-tx/wscoor/2006/06" mce_href="http://docs.oasis-open.org/ws-tx/wscoor/2006/06"&gt;WS-Coordination 1.1&lt;/A&gt;. WCF will have side-by-side support with the 1.0 versions of these specs.&lt;/P&gt;
&lt;P&gt;To use the new version of WS-AT, you can specify the new WS2007HttpBinding, or, if you already use the NetTcpBinding, you can set the TransactionProtocol to WSAtomicTransactions11.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1832238" width="1" height="1"&gt;</content><author><name>florinlazar</name><uri>http://blogs.msdn.com/members/florinlazar.aspx</uri></author><category term="Orcas WCF WS-AT" scheme="http://blogs.msdn.com/florinlazar/archive/tags/Orcas+WCF+WS-AT/default.aspx" /></entry></feed>