<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3587679863708914478</id><updated>2011-07-30T14:36:22.122-07:00</updated><title type='text'>Thoughts of a Software Developer</title><subtitle type='html'>I'd like to use this blog to share my knowledge in software development and to give solutions to fiddly problems I had from time to time in this area.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-6544938342665975793</id><published>2011-04-20T14:46:00.001-07:00</published><updated>2011-04-20T14:50:20.508-07:00</updated><title type='text'>Message creation in orchestrations “from scratch”</title><content type='html'>&lt;p&gt;In some cases it is useful to create a BizTalk message without mapping it from another message. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;If you have a Message Assign shape and you access a distinguished field on the message like&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;msgSample.ErrorCode = “4711”;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;without a Transform shape in advance you get the following error during compiling&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;Message part has not been initialized in construct statement&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This is because the xml message has not been initialized. For some reason it is necessary that the “empty” message needs to already contain a tag for the field ErrorCode. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;To avoid this issue, you would add a Transform shape with a map, where the root node of the source schema is linked with the field ErrorCode on the target schema. Without mapping you need to construct this manually. For me, the following worked well:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I added a variable with name tempXml of type System.Xml.XmlDocument to the orchestration. In an expression shape I loaded an XML template and constructed the message.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;tempXml = new System.Xml.XmlDocument();&lt;br /&gt;tempXml.LoadXml(“…”);&lt;br /&gt;&lt;br /&gt;construct msgSample&lt;br /&gt;{&lt;br /&gt;msgSample = tempXml;&lt;br /&gt;msgSample.ErrorCode = “4711”;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The XML template for LoadXml can be generated on the schema file in Solution Explorer.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Another way could be to call custom code like&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;construct msgSample&lt;br /&gt;{&lt;br /&gt;msgSample = CustomClass.CustomMethod(...);&lt;br /&gt;msgSample.ErrorCode = “4711”;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The method should be declared in a separate c# project as follows&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;public class CustomClass&lt;br /&gt;{&lt;br /&gt;public static XmlDocument CustomMethod(...)&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-6544938342665975793?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/6544938342665975793/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=6544938342665975793' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/6544938342665975793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/6544938342665975793'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2011/04/message-creation-in-orchestrations-from.html' title='Message creation in orchestrations “from scratch”'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/17040388663324602885</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-8450874453220713477</id><published>2011-04-20T12:47:00.001-07:00</published><updated>2011-04-20T12:51:33.139-07:00</updated><title type='text'>BizTalk Server 2010 Feature Pack</title><content type='html'>&lt;p&gt;Slightly after the release of BizTalk Server 2010 a Feature Pack has been released. This feature pack contains only one feature which is named BizTalk Server 2010 AppFabric Connect for Services. It provides for bridging the capabilities of BizTalk Server and Windows Azure AppFabric thereby enabling enterprises to extend the reach of their on-premise Line of Business (LOB) systems and BizTalk applications to cloud.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=f7735a19-cdb3-4f52-8e7b-c58f04c5c86a"&gt;Download&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-8450874453220713477?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/8450874453220713477/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=8450874453220713477' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/8450874453220713477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/8450874453220713477'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2011/04/biztalk-server-2010-feature-pack.html' title='BizTalk Server 2010 Feature Pack'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/17040388663324602885</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-2005725917880441714</id><published>2011-01-22T07:28:00.001-08:00</published><updated>2011-01-22T07:28:09.417-08:00</updated><title type='text'>CU3 for BizTalk Server 2006 R2 SP1</title><content type='html'>&lt;p&gt;In the end of 2010 Microsoft released the third cumulative update package for BizTalk Server 2006 Service Pack 1.&lt;/p&gt; &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/2286501/en-us"&gt;KB2286501 Download&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You do not need prior update packages to apply this. If you are not affected by any problems Microsoft recommends to wait for the next Service Pack release.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-2005725917880441714?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/2005725917880441714/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=2005725917880441714' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/2005725917880441714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/2005725917880441714'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2011/01/cu3-for-biztalk-server-2006-r2-sp1.html' title='CU3 for BizTalk Server 2006 R2 SP1'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-6316177101605907793</id><published>2011-01-22T07:18:00.001-08:00</published><updated>2011-01-22T07:29:13.346-08:00</updated><title type='text'>CU1 for BizTalk Server 2009</title><content type='html'>&lt;p&gt;A few days ago, Microsoft released the first cumulative update package for BizTalk Server 2009&lt;/p&gt; &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/2429050/en-us"&gt;KB2429050 Download&lt;/a&gt;&lt;/p&gt; &lt;p&gt;If you are not affected by any problems Microsoft recommends to wait for the next Service Pack release.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-6316177101605907793?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/6316177101605907793/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=6316177101605907793' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/6316177101605907793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/6316177101605907793'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2011/01/cu1-for-biztalk-server-2009.html' title='CU1 for BizTalk Server 2009'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-4698447944784820276</id><published>2010-10-22T14:50:00.001-07:00</published><updated>2010-10-22T14:55:16.556-07:00</updated><title type='text'>Replace Text in Streams</title><content type='html'>&lt;p&gt;Today, I thought about replacing text in streams. I noticed that .NET 4 provides methods for type &lt;pre&gt;String&lt;/pre&gt;to replace some text, but no methods for type &lt;pre&gt;Stream&lt;/pre&gt;I found a way by converting the stream to a string in a first step and by replacing text in a second step. &lt;pre&gt;new StreamReader(i).ReadToEnd().Replace("old text", "new text")&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;For a lot of cases this is alright and there is nothing to worry about. But if the source is a huge amount of data and I do not want to hold it in memory all the time, things get tricky. For these cases I wrote a simple method called &lt;pre&gt;ReplaceTextInStream&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;The method gets four arguments: an input stream, an output stream, a string with a pattern to search for and a string with the replacement value. If one argument is null, a ArgumentNullException is thrown. Here is the code: Enjoy!&lt;/p&gt;&lt;pre&gt;public static void ReplaceTextInStream(Stream input, Stream output, string pattern, string replacement) &lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (input == null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ArgumentNullException("input");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (output == null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ArgumentNullException("output");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pattern == null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ArgumentNullException("pattern");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (replacement == null)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new ArgumentNullException("replacement");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StreamReader r = new StreamReader(input);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StreamWriter w = new StreamWriter(output);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Input and Pattern are empty =&amp;gt; Output = Replacement&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(input.Length == 0 &amp;amp;&amp;amp; pattern.Length == 0) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w.Write(replacement);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Pattern is empty =&amp;gt; Output = Input&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (input.Length != 0 &amp;amp;&amp;amp; pattern.Length == 0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!r.EndOfStream)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w.Write((char)r.Read());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Init empty Stack&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;char&amp;gt; stack = new List&amp;lt;char&amp;gt;();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Loop over input characters&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!r.EndOfStream)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read next input character&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char c = (char)r.Read();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Compare characters&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pattern[stack.Count] == c)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Match =&amp;gt; Put it on Stack&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stack.Add(c);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Match complete?&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (stack.Count == pattern.Length)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write Replacement and clear Stack&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w.Write(replacement);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stack.Clear();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // No Macth =&amp;gt; Stack filled?&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (stack.Count != 0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write and Clear Stack&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (var tc in stack)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w.Write(tc);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stack.Clear();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Copy current character&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w.Write(c);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // After Loop: Stack filled?&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (stack.Count != 0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write and Clear Stack&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (var tc in stack)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w.Write(tc);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stack.Clear();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; w.Flush();&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-4698447944784820276?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/4698447944784820276/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=4698447944784820276' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/4698447944784820276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/4698447944784820276'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2010/10/replace-text-in-streams.html' title='Replace Text in Streams'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-3463422893744171060</id><published>2010-10-22T11:41:00.001-07:00</published><updated>2010-10-22T11:41:52.572-07:00</updated><title type='text'>Useful .NET Tools</title><content type='html'>&lt;p&gt;Here is a list of tools I use for .NET development. Each of them saves me a lot of time.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.jetbrains.com/resharper/"&gt;JetBrains ReSharper&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;Resharper is an extension by Jetbrain for Visual Studio, which improves the development experience. ReSharper executes solution-wide static code analysis, error detection on-the-fly, without the need to compile, provides additional features for error correction, code completion, navigation, search, refactorings, syntax highlighting, formatting, code generation and optimization among other features.&lt;br&gt;&lt;a href="http://www.jetbrains.com/resharper/download/index.html"&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.red-gate.com/products/reflector/"&gt;&lt;strong&gt;redgate .NET Reflector&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;.NET Reflector is a class browser and analysis tool for .NET. It allows you to navigate, search, disassemble and analyze .NET components.&lt;br&gt;&lt;a href="http://reflector.red-gate.com/download.aspx"&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://winmerge.org/?lang=en"&gt;WinMerge&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;WinMerge is a powerful differencing and merging tool. It’s Open Source. WinMerge can compare folders and files, presenting differences in a visual text format that is easy to understand and handle.&lt;br&gt;&lt;a href="http://winmerge.org/downloads/?lang=en"&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dpriver.com/pp/sqlformat.htm"&gt;Instant SQL Formatter&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;Online tool for formatting SQL statements. Supported database types are MSSQL, Oracle, DB2, MySQL and others&lt;br&gt;&lt;a href="http://www.dpriver.com/pp/sqlformat.htm"&gt;Link&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a href="http://mycodelog.com/2009/12/22/regexui/"&gt;C# Regular Expression Helper&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;Litte tool for testing regular expressions&lt;br&gt;&lt;a href="http://go2.wordpress.com/?id=725X1342&amp;amp;site=alibad.wordpress.com&amp;amp;url=http%3A%2F%2Fcid-e38f9fc6490b29d9.skydrive.live.com%2Fself.aspx%2FPublic%2FCode%2FRegexHelper%2FRegexUI.exe&amp;amp;sref=http%3A%2F%2Fmycodelog.com%2F2009%2F12%2F22%2Fregexui%2F"&gt;Download&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://xpathtester.codeplex.com/"&gt;&lt;strong&gt;XPath Tester&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;Little tool for testing XPath statements&lt;br&gt;&lt;a href="http://xpathtester.codeplex.com/releases/view/3600"&gt;Download&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-3463422893744171060?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/3463422893744171060/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=3463422893744171060' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/3463422893744171060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/3463422893744171060'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2010/10/useful-net-tools.html' title='Useful .NET Tools'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-8274185023228195929</id><published>2010-10-08T05:57:00.000-07:00</published><updated>2010-10-08T06:16:09.820-07:00</updated><title type='text'>Resumed Orchestration Instances are not processed</title><content type='html'>Today, in BizTalk 2009 I runned into the following problem: I resumed orchestration instances. They get a processing server, but they are not processed. The orchestration debugger showed, that nothing has happened. Restarting host instance does not change anyhting. Running the MsgBoxViewer showed a MsgBox database integrity problem. The text said&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#990000;"&gt;Missing Restart Msg in Spool table (can prevent some svc instances to be resumed, terminated or suspended) !!&lt;br /&gt;&lt;br /&gt;Missing Suspend Msg in Spool table (can prevent some svc instances to be resumed, terminated or suspended) !!&lt;br /&gt;&lt;br /&gt;Missing Terminate Msg in Spool table (can prevent some svc instances to be resumed, terminated or suspended) !!&lt;br /&gt;&lt;br /&gt;Missing ResumeInDebugMode Msg in Spool table (can prevent some svc instances to be resumed, terminated or suspended) !!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Following the hint to run the Terminator tool is not necessary. Just do &lt;a href="http://moriahsoft.com/ImadE/post/2010/06/01/Missing-ResumeInDebugMode-Msg-and-Other-Spool-Messages.aspx"&gt;THIS&lt;/a&gt;. Afterwards, restart the host instances. All running, but not processed orchestration instances are processed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-8274185023228195929?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/8274185023228195929/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=8274185023228195929' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/8274185023228195929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/8274185023228195929'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2010/10/resumed-orchestration-instances-are-not.html' title='Resumed Orchestration Instances are not processed'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-4595731473136758122</id><published>2010-10-03T08:10:00.000-07:00</published><updated>2010-10-03T08:30:35.037-07:00</updated><title type='text'>BizTalk Server 2010 released</title><content type='html'>Microsoft has just released a new version of BizTalk Server. Since 1st of October BizTalk Server 2010 is available. For a brief overview of the new features have a look at the &lt;a href="http://blogs.msdn.com/b/biztalk_server_team_blog/archive/2010/09/22/biztalk-server-2010-released-for-manufacturing.aspx"&gt;MSDN BizTalk Server Team Blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=938102b8-a677-4c20-906d-f6ae472b3a6a&amp;amp;displaylang=en"&gt;Download BizTalk Server 2010 - Developer Edition&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=8b1069cf-202b-462b-8d10-bec65d315c65&amp;amp;displaylang=en."&gt;Download BizTalk Server 2010 - Evaluation Edition&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-US/library/ee317850(v=BTS.10).aspx"&gt;MSDN Library on BizTalk Server 2010&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-4595731473136758122?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/4595731473136758122/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=4595731473136758122' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/4595731473136758122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/4595731473136758122'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2010/10/microsoft-has-just-released-new-version.html' title='BizTalk Server 2010 released'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-203043839528654999</id><published>2010-05-04T14:29:00.000-07:00</published><updated>2010-05-04T14:36:18.175-07:00</updated><title type='text'>BizTalk 2009 Light and Easy Webcast Series</title><content type='html'>I just found a series of webcasts on MSDN focussing on BizTalk Server 2009 features created by worldwide MVPs and industry experts. They are great stuff.&lt;br /&gt;&lt;a href="http://code.msdn.microsoft.com/bts09"&gt;http://code.msdn.microsoft.com/bts09&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-203043839528654999?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/203043839528654999/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=203043839528654999' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/203043839528654999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/203043839528654999'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2010/05/biztalk-2009-light-and-easy-webcast.html' title='BizTalk 2009 Light and Easy Webcast Series'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-5422180558992251442</id><published>2010-05-04T12:40:00.000-07:00</published><updated>2010-05-04T13:12:48.421-07:00</updated><title type='text'>Microsoft Knowledge Base Monitoring</title><content type='html'>Problems with BizTalk are more or less time consuming. Usually, it is important to quickly find a solution. For a particular problem you have a good chance to find a useful article or hotfix in the Microsoft Knowledge Base. For that these two links can help (not only BizTalk):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://kbupdate.info/"&gt;http://kbupdate.info/&lt;/a&gt; is a monitoring system that scans the entire Microsoft Knowledge Base every night&lt;/li&gt;&lt;li&gt;&lt;a href="http://kbalertz.com/"&gt;http://kbalertz.com/&lt;/a&gt; is an e-mail notification system that scans the entire Microsoft Knowledge Base every night, and e-mails you when updates or additions are made to the technologies you subscribe to&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-5422180558992251442?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/5422180558992251442/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=5422180558992251442' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/5422180558992251442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/5422180558992251442'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2010/05/microsoft-knowledge-base-monitoring.html' title='Microsoft Knowledge Base Monitoring'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-5557596624854072339</id><published>2009-06-13T11:55:00.000-07:00</published><updated>2009-10-05T05:59:57.360-07:00</updated><title type='text'>Pipeline Component Wizard</title><content type='html'>BizTalk 2006 has only poor support for developing custom pipeline components. Luckily, there is some kind of tool on &lt;a href="http://www.codeplex.com/btsplcw"&gt;Codeplex&lt;/a&gt;, which makes it easy to create custom pipeline components. The tool is a project creation wizard within Visual Studio. It comes together with its own project type and is able to generate pipeline component projects from scratch depending on several parameters.&lt;br /&gt;&lt;br /&gt;So far, version &lt;a href="http://btsplcw.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=2248"&gt;2.00&lt;/a&gt; is the current one for Visual Studio 2005 and BizTalk 2006. Unfotunately, this version has a bug. Each time you use the wizard to create a new project you get the error.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;System.ArgumentException : Value does not fall withing the expected range &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;There is no official solution yet. An unofficial way to solve it is:&lt;br /&gt;&lt;br /&gt;Change the file BizTalkPipelineComponentWizard.cs around line 304&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;FROM&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;[...]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="COLOR: rgb(0,153,0)"&gt;// get a handle to the project. using mySolution will not work.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pipelineComponentProject = this._Application.Solution.Projects.Item(Path.Combine(Path.GetFileNameWithoutExtension(projectFileName), projectFileName));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[...]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;TO&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[...]&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,204,0);font-family:courier new;" &gt;&lt;span style="COLOR: rgb(0,153,0)"&gt;// get a handle to the project. using mySolution will not work.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if (this._Application.Solution.Projects.Count == 1)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pipelineComponentProject = this._Application.Solution.Projects.Item(1);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(0,153,0);font-family:courier new;" &gt;// In Doubt: Which project is the target?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;pipelineComponentProject = this._Application.Solution.Projects.Item(projectFileName);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[...]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;/span&gt;&lt;br /&gt;See &lt;a href="http://www.codeplex.com/btsplcw/WorkItem/View.aspx?WorkItemId=5503"&gt;Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After that, you have to complie the source code and (re)install the wizard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-5557596624854072339?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/5557596624854072339/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=5557596624854072339' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/5557596624854072339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/5557596624854072339'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2009/06/pipeline-component-wizard.html' title='Pipeline Component Wizard'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-2735370111330581900</id><published>2009-06-13T09:10:00.000-07:00</published><updated>2009-06-13T09:37:30.969-07:00</updated><title type='text'>Dis-/Assembling EDI streams is ending up with an unhelpful error description</title><content type='html'>Last week, I came up with a BizTalk hotfix which improves the EDI error descriptions. Normally, when you disassemble an EDIFACT stream in BizTalk 2006 R2 and it does not work, the serivce instance suspends with an error like&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;An output message of the component     "Unknown" in receive pipeline     "Microsoft.BizTalk.Edi.DefaultPipelines.EdiReceive,     Microsoft.BizTalk.Edi.EdiPipelines, Version=3.0.1.0, Culture=neutral,     PublicKeyToken=31bf3856ad364e35" is suspended due to the following error:     Unknown. The sequence number of the suspended message is     1.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this case, looking into the EventLog is crucial. If you have several biztalk host instances on different servers like us, this is an annoying job. In the past, we wrote us a custom component which looks up the Event Log for the error descriptions. But since we installed the hotfix, we have everything we need in BizTalk and we do not need to look somewhere else anymore. Very useful (See &lt;a href="http://support.microsoft.com/?scid=kb%3Ben-us%3B955303&amp;amp;x=11&amp;amp;y=11"&gt;Hotfix 955303&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-2735370111330581900?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/2735370111330581900/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=2735370111330581900' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/2735370111330581900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/2735370111330581900'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2009/06/biztalk-2006-r2-hotfix-955303.html' title='Dis-/Assembling EDI streams is ending up with an unhelpful error description'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-3204840203838752722</id><published>2009-06-13T08:10:00.000-07:00</published><updated>2009-06-13T09:08:56.011-07:00</updated><title type='text'>Nested transactional scopes just because of non serializable code</title><content type='html'>It's good to avoid having non serializable code in an orchestration. I give you an example: Let's say you have non serializable code in an expression shape which need not to be executed transactional. The pitty is, that you have to put an atomic transaction scope around it. The reason is that BizTalk only allows non serializable code in this kind of scope. In addition to that, you need another long running transaction scope around the first one, if you want to do some exception handling. BizTalk does not allow you to add an exception handler to an atomic transaction scope. So, there is a lot of overhead just because of the non serializable code in the beginning. If performance is a critical factor, here is potential. The best way would be to make the code serializable or to outsource it to a custom .NET class. For the second option it is important to make the methods static which are called by the orchestration. The benefit would be that you only need one non transactional scope in the given example. (See &lt;a href="http://blogs.msdn.com/biztalk/archive/2008/01/02/biztalk-atomic-transaction-for-exception-handling.aspx"&gt;Biztalk : Atomic Transaction for Exception handling&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/biztalk/archive/2008/01/02/atomic-scope-for-non-serializable-code.aspx"&gt;Atomic scope for Non Serializable code&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-3204840203838752722?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/3204840203838752722/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=3204840203838752722' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/3204840203838752722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/3204840203838752722'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2009/06/exception-handling-in-biztalk.html' title='Nested transactional scopes just because of non serializable code'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-2032606504758926275</id><published>2009-03-10T04:41:00.000-07:00</published><updated>2009-03-10T05:06:35.634-07:00</updated><title type='text'>Details of Errors caused by ThrowException Shape</title><content type='html'>When you design a BizTalk orchestration and you want to suspend the orchestration with a ThrowException shape, it is useful to initialize the exception variable in an Expression shape with a descriptive error message in advance.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;incomingMessageNotFoundException = new System.Exception("No referenced incomingMessage found");&lt;/em&gt; (*)&lt;br /&gt;&lt;br /&gt;(*): In this example &lt;em&gt;incomingMessageNotFoundException&lt;/em&gt; is the exception variable of type System.Exception.&lt;br /&gt;&lt;br /&gt;The result is that the error message &lt;em&gt;"No referenced incomingMessage found"&lt;/em&gt; is shown in the Error Information tab of the Service Details window if an orchestration instance gets suspended because of this error. If you do not initialize the variable yourself, BizTalk uses the default constructor and you only get the information that an exception of type System.Exception has occured in your orchestration. This does not help much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-2032606504758926275?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/2032606504758926275/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=2032606504758926275' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/2032606504758926275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/2032606504758926275'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2009/03/details-of-errors-caused-by.html' title='Details of Errors caused by ThrowException Shape'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-6574837119803294182</id><published>2008-10-11T02:25:00.000-07:00</published><updated>2008-10-11T02:30:14.538-07:00</updated><title type='text'>Microsoft Certificate</title><content type='html'>Yesterday, I earned my first Microsoft Certifacte. I purchased Exam 70-235 as part of the Microsoft Certified Program.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i-sWiOGWb4M/SPBxewbJ6uI/AAAAAAAAAKw/PmhImsWkxIo/s1600-h/MCTS%28rgb%29_511.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_i-sWiOGWb4M/SPBxewbJ6uI/AAAAAAAAAKw/PmhImsWkxIo/s320/MCTS%28rgb%29_511.png" alt="" id="BLOGGER_PHOTO_ID_5255825538350181090" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-6574837119803294182?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/6574837119803294182/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=6574837119803294182' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/6574837119803294182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/6574837119803294182'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2008/10/microsoft-certificate.html' title='Microsoft Certificate'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i-sWiOGWb4M/SPBxewbJ6uI/AAAAAAAAAKw/PmhImsWkxIo/s72-c/MCTS%28rgb%29_511.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3587679863708914478.post-8018006570295528322</id><published>2008-09-12T14:10:00.000-07:00</published><updated>2008-09-12T15:10:44.526-07:00</updated><title type='text'>How to accelerate VPCs in MS Virtual PC 2007</title><content type='html'>Since yesterday, I was quite sure that my host OS Windows Vista has a negative effect on the performance of my VPCs. I am talking about lazy mouse movement choppy scrolling and stuff like that.&lt;br /&gt;&lt;br /&gt;After reading this &lt;a href="http://www.tsjensen.com/blog/2008/08/19/Virtual+PC+2007+Vs+VMWare+Workstation+65.aspx"&gt;post&lt;/a&gt;, I thought that VMWare could solve this problem. So, I downloaded VMWare Converter and a 30-days-evaluation version of VMWare Workstation 6. During setup of VMWare Tools on the guest OS a text message popped up saying, that I can get better graphic performance if I'd change something in the display properties. I was not aware of the described switch. Afterwards, there was a noticeable acceleration.&lt;br /&gt;&lt;br /&gt;Because it was a windows internal property, I went back to my VPC and changed it there as well. The difference in Virtual PC was much more drastic. It solved all the performance problems I had. Now, I can work with the guest OS in a familiar speed. Finally, I was wrong and Virtual PC has no problems with Windows Vista as host OS. The pic below shows the the settings, which have to be made.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i-sWiOGWb4M/SMrjsSJxj-I/AAAAAAAAAAQ/JGJPBA6rh-4/s1600-h/1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_i-sWiOGWb4M/SMrjsSJxj-I/AAAAAAAAAAQ/JGJPBA6rh-4/s320/1.png" alt="" id="BLOGGER_PHOTO_ID_5245255065952948194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(Location: Display properties, tab Settings, menu Advanced)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3587679863708914478-8018006570295528322?l=thoughtsofadevel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thoughtsofadevel.blogspot.com/feeds/8018006570295528322/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3587679863708914478&amp;postID=8018006570295528322' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/8018006570295528322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3587679863708914478/posts/default/8018006570295528322'/><link rel='alternate' type='text/html' href='http://thoughtsofadevel.blogspot.com/2008/09/how-to-accelerate-ms-virtual-pc-2007.html' title='How to accelerate VPCs in MS Virtual PC 2007'/><author><name>Martin Hoffmann</name><uri>http://www.blogger.com/profile/04431711935105611947</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i-sWiOGWb4M/SMrjsSJxj-I/AAAAAAAAAAQ/JGJPBA6rh-4/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
