<?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-7492642</id><updated>2012-01-03T12:37:11.796+01:00</updated><title type='text'>Martijn's blog - E-Commerce, EAI, BizTalk and .NET</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>95</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7492642.post-116825199796646553</id><published>2007-01-08T11:24:00.000+01:00</published><updated>2007-01-08T11:26:37.986+01:00</updated><title type='text'>Moving my blog to MSDN</title><content type='html'>January 1st, 2007, I started working for Microsoft and will be moving to http://blogs.msdn.com/martijnh/. Hope to see you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-116825199796646553?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/116825199796646553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=116825199796646553' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116825199796646553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116825199796646553'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2007/01/moving-my-blog-to-msdn.html' title='Moving my blog to MSDN'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-116714423689255865</id><published>2006-12-26T15:41:00.000+01:00</published><updated>2006-12-26T15:44:38.326+01:00</updated><title type='text'>Outlook: Recovering e-mail messages from attachments</title><content type='html'>Recently, I was what I thought to be dragging e-mail from my Inbox into my Personal Folders. Outlook warned me that the process could take some time due to the amount of messages selected, but I went ahead with the move. After a while, Outlook popped up a freshly created e-mail message containing my 1000+ e-mail messages! &lt;br /&gt;&lt;br /&gt;The new e-mail was about 85MB and the original message were gone from my inbox... I really wanted those e-mails in my Personal Folders. However, Outlook programming is something I've always shied away from. After some experimenting, I discovered what I wanted couldn't be easily done using Outlook APIs...&lt;br /&gt;&lt;br /&gt;I wanted to:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open the e-mail message containing the attached 1000+ 'backups'&lt;/li&gt;&lt;li&gt;Iterate the attachments&lt;/li&gt;&lt;li&gt;Save the attachments as e-mails into my Personal Folders box&lt;/li&gt;&lt;/ol&gt;After a lot of headache, I discovered Redemption (see http://www.dimastr.com/redemption/). Redemption provides interop between .NET and the Extended MAPI. Using redemption, I finally succeeded in achieving my goal. Just in case someone else outthere is as silly as I am, here's how I did it:&lt;br /&gt;&lt;blockquote&gt;//&amp;nbsp;To&amp;nbsp;use&amp;nbsp;this&amp;nbsp;namespace&amp;nbsp;you&amp;nbsp;must&amp;nbsp;set&amp;nbsp;a&lt;br /&gt;//&amp;nbsp;reference&amp;nbsp;to&amp;nbsp;the&amp;nbsp;Microsoft&amp;nbsp;Outlook&amp;nbsp;11.0&lt;br /&gt;//&amp;nbsp;COM&amp;nbsp;server.&amp;nbsp;&lt;br /&gt;using&amp;nbsp;Microsoft.Office.Interop.Outlook;&lt;br /&gt;using&amp;nbsp;OutLookApp&amp;nbsp;=&amp;nbsp;Microsoft.Office.Interop.Outlook.Application;&lt;br /&gt;using&amp;nbsp;System.IO;&lt;br /&gt;using&amp;nbsp;rd&amp;nbsp;=&amp;nbsp;Redemption;&lt;br /&gt;&lt;br /&gt;ApplicationClass&amp;nbsp;outLookApp&amp;nbsp;=&amp;nbsp;new&amp;nbsp;ApplicationClass();&lt;br /&gt;NameSpace&amp;nbsp;outlookNS&amp;nbsp;=&amp;nbsp;outlookApp.GetNamespace("MAPI");&lt;br /&gt;&lt;br /&gt;MailItem&amp;nbsp;attachmentsItem&amp;nbsp;=&amp;nbsp;(MailItem)outlookNS.GetItemFromID(messageId,&amp;nbsp;null);&lt;br /&gt;&lt;br /&gt;//&amp;nbsp;left&amp;nbsp;out&amp;nbsp;for&amp;nbsp;clarity:&amp;nbsp;find&amp;nbsp;the&amp;nbsp;Personal&amp;nbsp;Folders-&amp;gt;Inbox&amp;nbsp;folder&lt;br /&gt;&lt;br /&gt;rd.MAPIUtils&amp;nbsp;utils&amp;nbsp;=&amp;nbsp;new&amp;nbsp;rd.MAPIUtils();&lt;br /&gt;utils.MAPIOBJECT&amp;nbsp;=&amp;nbsp;outlookNS.MAPIOBJECT;&lt;br /&gt;&lt;br /&gt;foreach&amp;nbsp;(Attachment&amp;nbsp;a&amp;nbsp;in&amp;nbsp;attachmentsItem.Attachments)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;string&amp;nbsp;attachmentFile&amp;nbsp;=&amp;nbsp;Path.GetTempFileName();&lt;br /&gt;&amp;nbsp;a.SaveAsFile(attachmentFile);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;MailItem&amp;nbsp;underlyingItem&amp;nbsp;=&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;(MailItem)personalFolder.Items.Add(OlItemType.olMailItem);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;rd.MessageItem&amp;nbsp;neww&amp;nbsp;=&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;utils.GetItemFromMsgFile(attachmentFile,&amp;nbsp;false);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;underlyingItem.Save();&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;MailItem&amp;nbsp;placedItem&amp;nbsp;=&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;(MailItem)underlyingItem.Move(personalFolder);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;neww.CopyTo(placedItem);&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;This code misses all kinds of nice sanity checks, like whether the attachment actually is a MSG file, etc. It sufficed for my scenario and I now have the e-mails back. FYI :-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-116714423689255865?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/116714423689255865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=116714423689255865' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116714423689255865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116714423689255865'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/12/outlook-recovering-e-mail-messages.html' title='Outlook: Recovering e-mail messages from attachments'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-116696167586756780</id><published>2006-12-24T12:57:00.000+01:00</published><updated>2006-12-24T13:01:15.883+01:00</updated><title type='text'>WPF - themes in SDK</title><content type='html'>I'm probably the last one to notice, but just in case I'm not... The themes included in PresentationFramework are included in the SDK (zipped in WPFSamples.zip) under &lt;br /&gt;&lt;br /&gt;WPFSamples\Core\AeroTheme&lt;br /&gt;WPFSamples\Core\ClassicTheme&lt;br /&gt;WPFSamples\Core\LunaTheme&lt;br /&gt;WPFSamples\Core\RoyaleTheme&lt;br /&gt;&lt;br /&gt;:-D Definitely inspirational stuff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-116696167586756780?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/116696167586756780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=116696167586756780' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116696167586756780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116696167586756780'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/12/wpf-themes-in-sdk.html' title='WPF - themes in SDK'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-116257960107266571</id><published>2006-11-03T19:15:00.000+01:00</published><updated>2006-11-03T19:46:41.110+01:00</updated><title type='text'>WPF - Writing an IMultiValueConverter (update)</title><content type='html'>What I didn't realize in the previous blog entry regarding the subject was the fact that binding to a DependencyProperty and performing a string.Format blindly could lead to weird results, e.g.:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;TextBlock&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;TextBlock.Text&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;MultiBinding&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Converter="{StaticResource&amp;nbsp;StringFormatterConverter}"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ConverterParameter="{}{0},&amp;nbsp;{1}"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Binding&amp;nbsp;Path="Customer.Lastname"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Binding&amp;nbsp;Path="Customer.Firstname"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/MultiBinding&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/TextBlock.Text&amp;gt;&lt;br /&gt;&amp;lt;/TextBlock&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;Could convert to "&lt;strong&gt;DependencyProperty.UnsetValue, DependencyProperty.UnsetValue&lt;/strong&gt;" The solution is pretty simple:&lt;br /&gt;&lt;blockquote&gt;bool&amp;nbsp;argumentsAreNullOrEmpty&amp;nbsp;=&amp;nbsp;true;&lt;br /&gt;&lt;br /&gt;//&amp;nbsp;Check&amp;nbsp;whether&amp;nbsp;all&amp;nbsp;values&amp;nbsp;are&amp;nbsp;null&amp;nbsp;or&amp;nbsp;unset.&lt;br /&gt;foreach&amp;nbsp;(object&amp;nbsp;value&amp;nbsp;in&amp;nbsp;values)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;if&amp;nbsp;(value&amp;nbsp;!=&amp;nbsp;null&amp;nbsp;&amp;&amp;&amp;nbsp;value&amp;nbsp;!=&amp;nbsp;DependencyProperty.UnsetValue)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;argumentsAreNullOrEmpty&amp;nbsp;=&amp;nbsp;false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;break;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//&amp;nbsp;If&amp;nbsp;we&amp;nbsp;have&amp;nbsp;all&amp;nbsp;empty&amp;nbsp;or&amp;nbsp;null&amp;nbsp;arguments,&amp;nbsp;we&amp;nbsp;do&amp;nbsp;nothing.&lt;br /&gt;if&amp;nbsp;(argumentsAreNullOrEmpty)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;return&amp;nbsp;Binding.DoNothing;&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;Happy WPFing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-116257960107266571?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/116257960107266571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=116257960107266571' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116257960107266571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116257960107266571'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/11/wpf-writing-imultivalueconverter.html' title='WPF - Writing an IMultiValueConverter (update)'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-116248686471557082</id><published>2006-11-02T17:18:00.000+01:00</published><updated>2006-11-02T18:01:05.863+01:00</updated><title type='text'>CAB: load your modules from your App.Config</title><content type='html'>In CAB, there's a 'special voodoo magic' file which defines which modules are to be loaded in the IoC process. The file is called ProfileCatalog.xml by default. &lt;br /&gt;&lt;br /&gt;We're currently using CAB in combination with an XBAP application. This leads to deployment issues, as ProfileCatalog.xml will be deployed in to a folder called Data by default and the modules configured in the file cannot be located. You can work around this issue, but I took the issue as an opportunity to replace the default implementation of IModuleEnumerator in CAB with my own. &lt;br /&gt;&lt;br /&gt;My implementation looks at the App.Config file for it's modules. All that's needed to use the new enumerator is to configure it:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;configSections&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;section&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;name="SolutionProfile"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;type="BankTellerModule.Services.ModulesSection,&amp;nbsp;BankTellerModule"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;section&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;name="CompositeUI"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;type="Microsoft.Practices.CompositeUI.Configuration.SettingsSection,&amp;nbsp;Microsoft.Practices.CompositeUI"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;lt;/configSections&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;CompositeUI&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;services&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;add&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;serviceType="Microsoft.Practices.CompositeUI.Services.IModuleEnumerator,&amp;nbsp;Microsoft.Practices.CompositeUI" &amp;nbsp;&amp;nbsp;&amp;nbsp;instanceType="BankTellerModule.Services.ConfigurationModuleEnumerator,&amp;nbsp;BankTellerModule"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/services&amp;gt;&lt;br /&gt;&amp;lt;/CompositeUI&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;lt;SolutionProfile&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;Modules&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;add&amp;nbsp;assemblyFile="BankTellerModule.dll"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/Modules&amp;gt;&lt;br /&gt;&amp;lt;/SolutionProfile&amp;gt;&lt;/strong&gt;&lt;/blockquote&gt;&lt;br /&gt;The code for this behaviour will be available &lt;a href="http://www.tachyons.demon.nl/ConfigurationModuleEnumerator.zip"&gt;here&lt;/a&gt; in a few hours...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-116248686471557082?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/116248686471557082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=116248686471557082' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116248686471557082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116248686471557082'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/11/cab-load-your-modules-from-your.html' title='CAB: load your modules from your App.Config'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-116247957213390813</id><published>2006-11-02T15:48:00.000+01:00</published><updated>2006-11-02T15:59:32.153+01:00</updated><title type='text'>ClickOnce deployment of XBAP application to remote IIS</title><content type='html'>To ensure you don't encounter the issues we encountered, make sure you set the option "Rename all application files using the .deploy file extension". &lt;br /&gt;You can find the option under Project properties -&gt; Publish -&gt; Options. &lt;br /&gt;&lt;br /&gt;If you don't use this option and your IIS is hardened, as it should be, you'll see your assemblies being rejected (404.2 return code in you W3 log files). The .2 subcode means the server is not allowed to serve .dll files. &lt;br /&gt;&lt;br /&gt;The deployment renames the files from e.g. BankTellerModule.dll -&gt; BankTellerModule.dll.deploy. This ensures the files get served by IIS. Locally, the files are stored in C:\Documents and Settings\&amp;lt;user account&amp;gt;\local Settings\Apps\2.0 and renamed back to .dll.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-116247957213390813?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/116247957213390813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=116247957213390813' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116247957213390813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116247957213390813'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/11/clickonce-deployment-of-xbap.html' title='ClickOnce deployment of XBAP application to remote IIS'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-116247781297722153</id><published>2006-11-02T15:28:00.000+01:00</published><updated>2006-11-02T15:30:12.996+01:00</updated><title type='text'>ClickOnce publishing XBAP applications and F5 debugging not working</title><content type='html'>Some times, when you publish an XBAP application using ClickOnce, you cannot debug the same application afterwards using F5. This is due to a change to the project settings (debug tab). The extension is removed from the command-line argument to PresentationHost.exe (-debug &lt;insert shell&gt;.xbap). Insert the .xbap extension and things work alright again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-116247781297722153?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/116247781297722153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=116247781297722153' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116247781297722153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116247781297722153'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/11/clickonce-publishing-xbap-applications.html' title='ClickOnce publishing XBAP applications and F5 debugging not working'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-116213875120852857</id><published>2006-10-29T17:18:00.000+01:00</published><updated>2006-10-29T17:55:02.786+01:00</updated><title type='text'>Supporting WPF XML Browser Applications (XBAP) in a CompositeUI Application Block application</title><content type='html'>Currently, we’re building a real application in WPF for a local government. The application uses the MVC pattern quite heavily, so I did a test to see whether we could use the Composite UI Application Block (CAB, &lt;a href="http://msdn.microsoft.com/practices/default.aspx?pull=/library/en-us/dnpag2/html/cab.asp"&gt;read&lt;/a&gt; more about it’s architecture and use, &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=7B9BA1A7-DD6D-4144-8AC6-DF88223AEE19&amp;displaylang=en"&gt;download&lt;/a&gt; it from MSDN, play with the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=AB44F082-3ABE-4583-8844-7252FF7C9638&amp;displaylang=en"&gt;labs&lt;/a&gt; to understand it) to enable easier composability in order to distribute our use cases more easily throughout the development team, decouple logic from UI even more, etc. &lt;br /&gt;&lt;br /&gt;It turns out the CAB currently doesn’t support WPF. After some searching, I discovered &lt;a href="http://kentb.blogspot.com/2006/10/wpf-cab.html"&gt;Kent Boogaart&lt;/a&gt; from Australia (thanks Dion!) is busy writing a support layer for WPF in CAB. So far, so good. Testing the &lt;a href="http://www.users.on.net/kentcb/cab_wpf/CAB_WPF.zip"&gt;download&lt;/a&gt; he provided, however, revealed the implementation doesn’t support so-called XBAP applications. &lt;br /&gt;&lt;br /&gt;XBAP application are browser hosted WPF applications and are different in some aspects to ‘traditional’ WPF applications. For instance, the Application object which is the root for all WPF applications, doesn’t allow you to call the Run method if the WPF application is running within a browser. This is because of the asynchronous nature of the webbrowser. &lt;br /&gt;&lt;br /&gt;After a few simple modifications to Kent’s code and a little more trickery, I had the BankTeller application working in XBAP. Well, sort of… The thing with CAB is that it assumes synchronous applications. An example of this (taken straight from Microsoft.Practices.CompositeUI.CabApplication):&lt;br /&gt;&lt;blockquote&gt;public&amp;nbsp;void&amp;nbsp;Run()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;RegisterUnhandledExceptionHandler();&lt;br /&gt;&amp;nbsp;Builder&amp;nbsp;builder&amp;nbsp;=&amp;nbsp;CreateBuilder();&lt;br /&gt;&amp;nbsp;AddBuilderStrategies(builder);&lt;br /&gt;&amp;nbsp;CreateRootWorkItem(builder);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;rootWorkItem.FinishInitialization();&lt;br /&gt;&amp;nbsp;rootWorkItem.Run();&lt;br /&gt;&amp;nbsp;Start();&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp;//&amp;nbsp;Whoops&amp;nbsp;for&amp;nbsp;non-blocking&amp;nbsp;Start()s&lt;br /&gt;&amp;nbsp;rootWorkItem.Dispose();&lt;br /&gt;&amp;nbsp;if&amp;nbsp;(visualizer&amp;nbsp;!=&amp;nbsp;null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;visualizer.Dispose();&lt;/strong&gt;&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;As I explained earlier, XBAP applications take offense to calling the Run method on their Application, they’re asynchronous. In order to make XBAP applications work, a few modifications have to be made to CAB itself.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Don’t call Run on the Application class.&lt;/li&gt;&lt;li&gt;Ensure the correct UI  element get’s displayed.&lt;/li&gt;&lt;li&gt;Remove the dispose calling from the main Run() method of Microsoft.Practices.CompositeUI.CabApplication.&lt;/li&gt;&lt;li&gt;Implement a correct IDisposable pattern for cleaning up resources once the Application is actually done with them.&lt;/li&gt;&lt;li&gt;Ensure we call Dispose to clean up used resources.&lt;/li&gt;&lt;/ol&gt;For those just interested in the endresult, a modified WPF port capable of supporting CAB based applications in XBAP, you can download the &lt;a href="http://www.tachyons.demon.nl/CAB_XBAP.zip"&gt;example&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you’re interested in more detail about the changes I made and how I did this, please read the whitepaper I wrote, which can be downloaded &lt;a href="http://www.tachyons.demon.nl/Supporting%20XML%20Browser%20Applications%20within%20CAB.doc"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A special thanks to Kent Boogaart for creating the WPF port for CAB, without which I wouldn’t have been able to put CAB to use in my WPF scenario!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-116213875120852857?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/116213875120852857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=116213875120852857' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116213875120852857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116213875120852857'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/10/supporting-wpf-xml-browser_116213875120852857.html' title='Supporting WPF XML Browser Applications (XBAP) in a CompositeUI Application Block application'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-116111192358694880</id><published>2006-10-17T20:59:00.000+02:00</published><updated>2006-10-17T21:17:14.876+02:00</updated><title type='text'>WPF - Using CompositeCollection to combine multiple sources for databinding</title><content type='html'>As I said before, I'll blog about things I learn and find interesting... ;-) Today, I realized there's a very easy way to combine different sources for a binding. It's done using what's called a &lt;em&gt;CompositeCollection&lt;/em&gt;. Here's how it works:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a datasource (XmlDataProvider, ObjectDataProvider, ...)&lt;/li&gt;&lt;li&gt;Create a CollectionViewSource to look at the data in a specific way&lt;/li&gt;&lt;li&gt;Bind a control's Source/ItemsSource/... property to the CollectionViewSource&lt;/li&gt;&lt;li&gt;Add a view 'static' items&lt;/li&gt;&lt;li&gt;Bind to another view at the same or different data&lt;/li&gt;&lt;/ol&gt;An example:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;XmlDataProvider&amp;nbsp;x:Key="MyData"&amp;nbsp;XPath="/Info"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;x:XData&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Info&amp;nbsp;xmlns=""&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Item&amp;nbsp;ID="12345"&amp;nbsp;Name="Book&amp;nbsp;1"&amp;nbsp;Price="$10.00"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Item&amp;nbsp;ID="24678"&amp;nbsp;Name="Book&amp;nbsp;3"&amp;nbsp;Price="$9.00"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Info&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/x:XData&amp;gt;&lt;br /&gt;&amp;lt;/XmlDataProvider&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;CollectionViewSource&amp;nbsp;&lt;strong&gt;x:Key='a'&lt;/strong&gt;&amp;nbsp;Source="{Binding&amp;nbsp;Source={StaticResource&amp;nbsp;MyData},&amp;nbsp;XPath=&lt;strong&gt;Item/@Price&lt;/strong&gt;}"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;lt;CollectionViewSource&amp;nbsp;&lt;strong&gt;x:Key='b'&lt;/strong&gt;&amp;nbsp;Source="{Binding&amp;nbsp;Source={StaticResource&amp;nbsp;MyData},&amp;nbsp;XPath=&lt;strong&gt;Item/@Name&lt;/strong&gt;}"&amp;nbsp;/&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;We now have the two CollectionViewSource instances up and running. For example purposes, they're looking at the same datasource, but this could be anything else. Now, let's create a simple &lt;em&gt;ListBox&lt;/em&gt; control which binds to both these CollectionViewSource instances and adds constant items..&lt;br /&gt;&lt;blockquote&gt;&amp;lt;ListBox&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;ListBox.ItemsSource&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Binding&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Binding.Source&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;strong&gt;CompositeCollection&lt;/strong&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;em&gt;&amp;lt;ListBoxItem&amp;gt;My&amp;nbsp;Constant&amp;nbsp;Item&amp;lt;/ListBoxItem&amp;gt;&lt;/em&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;strong&gt;CollectionContainer&lt;/strong&gt;&amp;nbsp;Collection="{Binding&amp;nbsp;Source={StaticResource&amp;nbsp;a}}"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;strong&gt;CollectionContainer&lt;/strong&gt;&amp;nbsp;Collection="{Binding&amp;nbsp;Source={StaticResource&amp;nbsp;b}}"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;strong&gt;CompositeCollection&lt;/strong&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Binding.Source&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Binding&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/ListBox.ItemsSource&amp;gt;&lt;br /&gt;&amp;lt;/ListBox&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;It's as easy as that. The output would be:&lt;br /&gt;&lt;br /&gt;My Constant Item&lt;br /&gt;$10.00&lt;br /&gt;$9.00&lt;br /&gt;Book 1&lt;br /&gt;Book 3&lt;br /&gt;&lt;br /&gt;Just like the &lt;em&gt;MergedDictionaries&lt;/em&gt; within the &lt;em&gt;ResourceDictionary&lt;/em&gt;, you can easily combine different sources of data and bind to those sources, even &lt;em&gt;TwoWay&lt;/em&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-116111192358694880?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/116111192358694880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=116111192358694880' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116111192358694880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116111192358694880'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/10/wpf-using-compositecollection-to.html' title='WPF - Using CompositeCollection to combine multiple sources for databinding'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-116090791259376570</id><published>2006-10-15T11:45:00.000+02:00</published><updated>2006-10-15T12:29:29.850+02:00</updated><title type='text'>WPF - Writing an IMultiValueConverter</title><content type='html'>Currently, I'm working on a project involving &lt;a href="http://wpf.netfx3.com"&gt;WPF&lt;/a&gt;. I will post my experiences from time to time. This week, I wrote a simple &lt;a href="http://windowssdk.msdn.microsoft.com/en-us/library/system.windows.data.imultivalueconverter(VS.80).aspx"&gt;&lt;em&gt;IMultiValueConverter&lt;/em&gt;&lt;/a&gt; implementation which can be used to format a set of bindings in a String.Format fashion. This is how it works:&lt;br /&gt;&lt;br /&gt;Define the class and assign a key to refer to it:&lt;blockquote&gt;&amp;lt;Window.Resources&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;c:StringFormatterConverter&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;x:Key="&lt;em&gt;StringFormatterConverter&lt;/em&gt;" /&amp;gt;&lt;br /&gt;&amp;lt;/Window.Resources&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;Bind some element (GridViewColumn in this case) to a datasource, in this case something which has properties called LASTNAME and FIRSTNAME on it:&lt;blockquote&gt;&amp;lt;GridViewColumn.DisplayMemberBinding&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;MultiBinding&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Binding&amp;nbsp;Path="LASTNAME"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Binding&amp;nbsp;Path="FIRSTNAME"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/MultiBinding&amp;gt;&lt;br /&gt;&amp;lt;/GridViewColumn.DisplayMemberBinding&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;Now set a converter on the MultiBinding:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;MultiBinding &lt;strong&gt;Converter="{StaticResource &lt;em&gt;StringFormatterConverter&lt;/em&gt;}" &lt;em&gt;ConverterParameter&lt;/em&gt;="{}{0}, {1}"&lt;/strong&gt;&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;Both IValueConverter and IMultiValueConverter implement two methods:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Convert&lt;/li&gt;&lt;li&gt;ConvertBack&lt;/li&gt;&lt;/ul&gt;One for binding one direction and the other for the opposite direction (from-&amp;gt;to).&lt;br /&gt;&lt;br /&gt;The &lt;em&gt;ConverterParameter&lt;/em&gt; in the Converter is used to pass the format we'll be using to display the bound elements.&lt;br /&gt;Let's look at a code sample (sanity checks are removed for readability purposes):&lt;br /&gt;&lt;blockquote&gt;public&amp;nbsp;class&amp;nbsp;StringFormatterConverter&amp;nbsp;:&amp;nbsp;IMultiValueConverter&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;public&amp;nbsp;object&amp;nbsp;Convert(&lt;br /&gt;&amp;nbsp;&amp;nbsp;object[]&amp;nbsp;values,&lt;br /&gt;&amp;nbsp;&amp;nbsp;Type&amp;nbsp;targetType,&lt;br /&gt;&amp;nbsp;&amp;nbsp;object&amp;nbsp;parameter,&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.Globalization.CultureInfo&amp;nbsp;culture)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;strong&gt;return&amp;nbsp;string.Format(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;culture,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;formatArgument,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;values);&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;public&amp;nbsp;object[]&amp;nbsp;ConvertBack(&lt;br /&gt;&amp;nbsp;&amp;nbsp;object&amp;nbsp;value,&lt;br /&gt;&amp;nbsp;&amp;nbsp;Type[]&amp;nbsp;targetTypes,&lt;br /&gt;&amp;nbsp;&amp;nbsp;object&amp;nbsp;parameter,&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.Globalization.CultureInfo&amp;nbsp;culture)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;throw&amp;nbsp;new&amp;nbsp;NotImplementedException(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;"Unable to convert a formatted argument string back.");&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;It's that simple, WPF will pass the &lt;em&gt;values&lt;/em&gt; to the converter and expects a converted value back. We format the values using the other supplied arguments, &lt;em&gt;parameter&lt;/em&gt; ('{0}, {1}') and &lt;em&gt;culture&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;You can use any string.Format argument you'd like; just remember to escape the first '{' sign, so the Xaml interpreter knows you don't mean to use a &lt;a href="http://windowssdk.msdn.microsoft.com/en-us/library/ms747254(VS.80).aspx"&gt;Markup Extension&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Escaping the first brace is done by placing an empty mark extension in front of&lt;br /&gt;the character ('{}{'). &lt;br /&gt;&lt;br /&gt;The namespace prefix 'c' refers to the assembly and namespace implementing the converter (e.g. &amp;lt;xmlns:c="clr-namespace:Martijn.Wpf.Converters" /&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-116090791259376570?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/116090791259376570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=116090791259376570' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116090791259376570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/116090791259376570'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/10/wpf-writing-imultivalueconverter.html' title='WPF - Writing an IMultiValueConverter'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-115963614469994065</id><published>2006-09-30T19:02:00.000+02:00</published><updated>2006-09-30T19:09:04.740+02:00</updated><title type='text'>Clustering under Virtual Server - Don't forget to update the SID!</title><content type='html'>When using Virtual Machines, I often copy an existing image to duplicate it. However, currently I'm clustering my BizTalk Server 2006 environment for high availability &lt;a href="http://www.microsoft.com/technet/prodtechnol/virtualserver/deploy/cvs2005.mspx"&gt;using Virtual Server 2005&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After setting up the cluster, adding the secondary node didn't work, it kept saying 'Access Denied'. Normally, things like changing the LanManServer parameters or LMCompatibilityLevel fix this, but in this case, no dice..&lt;br /&gt;&lt;br /&gt;Until I remembered something trivial when using cloned images, the computer SID is the same in both images! Using the &lt;a href="http://www.sysinternals.com/Utilities/NewSid.html"&gt;NewSID&lt;/a&gt; tool, I updated the SID, rejoined the domain and added the secondary node to the cluster without trouble.&lt;br /&gt;&lt;br /&gt;Using my blog as a post-it note ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-115963614469994065?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/115963614469994065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=115963614469994065' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/115963614469994065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/115963614469994065'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/09/clustering-under-virtual-server-dont.html' title='Clustering under Virtual Server - Don&apos;t forget to update the SID!'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-115961755188182132</id><published>2006-09-30T12:50:00.000+02:00</published><updated>2006-09-30T13:59:11.936+02:00</updated><title type='text'>Renaming your BizTalk Server and Sql Server Agent jobs</title><content type='html'>After renaming a BizTalk Server host, you need to configure the server using the BizTalk Server Configuration Wizard (in 2006). However, during the reconfiguration, you might encounter a state I did. In my case, a dialog came up stating &lt;br /&gt;&lt;br /&gt;'Failed to create Management database "BizTalkMgmtDb" on server "...". Cannot add, update, or delete a job (or its steps or schedules) that originated from an MSX server.&lt;br /&gt;&lt;br /&gt;SQL script file: "C:\Program Files\Microsoft BizTalk Server 2006\Schema\\btf_message_logic.sql"'&lt;br /&gt;&lt;br /&gt;This failure is caused by the Sql Server Agent still having the jobs configured by the old server. You cannot simply delete/update those jobs as Sql Server doesn't allow you to. &lt;br /&gt;&lt;br /&gt;A remedy to this situation is stated in &lt;a href="http://support.microsoft.com/kb/281642/"&gt;this&lt;/a&gt; KB article. &lt;br /&gt;&lt;br /&gt;However, this involves renaming the server back to the original name, rebooting, etc. A simpler solution is to update the &lt;em&gt;msdb..sysjobs&lt;/em&gt; table and set the &lt;em&gt;originating_server&lt;/em&gt; field to reflect the new name. &lt;br /&gt;&lt;br /&gt;After this update, the BizTalk Server Configuration Wizard will complete it's work successfully.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-115961755188182132?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/115961755188182132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=115961755188182132' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/115961755188182132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/115961755188182132'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/09/renaming-your-biztalk-server-and-sql.html' title='Renaming your BizTalk Server and Sql Server Agent jobs'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-115878077460293685</id><published>2006-09-20T21:06:00.000+02:00</published><updated>2006-09-21T06:40:09.150+02:00</updated><title type='text'>Confusion regarding upgrading an Orchestration in BizTalk Server</title><content type='html'>There seems to be some confusion regarding upgrading Orchestrations. Doug Girard has documented this in a blog post &lt;a href="http://blogs.msdn.com/csdcustomerexperience/archive/2006/04/21/581032.aspx"&gt;here&lt;/a&gt;, but recent webcasts indicate to the contrary. I thought I'd save others some time and confirm that Doug's absolutely right, upgrading an Orchestration version is a fact of&lt;ol&gt;&lt;li&gt;deploying and binding the new version&lt;/li&gt;&lt;li&gt;unenlisting the current Orchestration (which doesn't suspend running Orchestration instances, but in fact removes instance subscriptions for the Orchestration)&lt;/li&gt;&lt;li&gt;starting the new version&lt;/li&gt;&lt;/ol&gt;If you drop in a message between steps 2 and 3, BizTalk will fail with a "No Subscriptions Found" exception in the EventViewer. This means that to ensure your system will be able to pick up messages correctly, step 2 and 3 need to be executed within the scope of a transaction, as Doug suggests. All Orchestration actions for the v1 version will be dealt with appropriately.&lt;br /&gt;&lt;br /&gt;Doug Girard mentions a script for performing steps 2 and 3 in a single transaction to avoid dropped messages. &lt;br /&gt;&lt;br /&gt;The location of the script within the documentation is &lt;a href="ms-help://MS.BTS.2006/BTS06Operations/html/f90025ec-3641-49ef-8918-88238d6ad420.htm"&gt;this&lt;/a&gt; (copy+paste the location, clicking will not work). &lt;br /&gt;&lt;br /&gt;You can also find the C# code (it's not really a script) within the contents under Operations -&gt; Managing BizTalk Server -&gt; Deploying and Managing BizTalk Applications -&gt; Updating BizTalk Applications -&gt; Deploying and Starting a New Version of an Orchestration Programmatically.&lt;br /&gt;&lt;br /&gt;UPDATE: A colleague of mine, Martin Rienstra, mentioned that in spite of documentation to the contrary, the last two version number elements &lt;strong&gt;do&lt;/strong&gt; matter in side by side and upgrading scenarios. I've tested it and he is right.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-115878077460293685?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/115878077460293685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=115878077460293685' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/115878077460293685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/115878077460293685'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/09/confusion-regarding-upgrading.html' title='Confusion regarding upgrading an Orchestration in BizTalk Server'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-115658249523193794</id><published>2006-08-26T10:52:00.000+02:00</published><updated>2006-08-26T10:54:55.246+02:00</updated><title type='text'>BizTalk Server Best Practices Analyzer</title><content type='html'>A bit late on noticing the download, but I thought I'd direct your attention to it if you missed it like I did. The Best Practices Analyzer is a tool which can do precisely what it says on the cover. It analyzes a lot of aspects regarding a BizTalk environment to see whether best practices have been implemented. A must have for any release manager, IT pro, and even developers!&lt;br /&gt;&lt;br /&gt;The tool can be downloaded &lt;a href="http://www.microsoft.com/technet/prodtechnol/biztalk/downloads/bpa.mspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-115658249523193794?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/115658249523193794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=115658249523193794' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/115658249523193794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/115658249523193794'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/08/biztalk-server-best-practices-analyzer.html' title='BizTalk Server Best Practices Analyzer'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-114594917866460685</id><published>2006-04-25T07:43:00.000+02:00</published><updated>2006-04-26T14:26:46.703+02:00</updated><title type='text'>Microsoft Business Rules Engine (MS-BRE) - XmlTrackingInterceptor</title><content type='html'>A lot of businesses have a need to prove what their software has done in evaluating certain requests from customers, such as loan applications, mortgage application, etc. Using the BRE, there's a few ways to accomplish this goal. &lt;br /&gt;&lt;br /&gt;One of them is implementing an interface called the IRuleSetTrackingInterceptor. Implementing this interface consists of writing code for the following methods, then called by the BRE as it's executing a RuleSet:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;SetTrackingConfig&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Sets the rule set tracking GUID and tracking configuration.&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;TrackAgendaUpdate&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Tracks updates to the rule engine agenda.&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;TrackConditionEvaluation&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Tracks the evaluation of rule conditions.&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;TrackFactActivity&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Tracks changes to working memory.&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;TrackRuleFiring&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Tracks the firing of a rule.&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;TrackRuleSetEngineAssociation&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Tracks the association of a rule set with a rule engine instance.&lt;/em&gt;&lt;/ul&gt;Once your custom implementation is done, you can associate the class with a RuleSet to be tracked by passing it from code when calling Policy.Execute, e.g.:&lt;br /&gt;&lt;blockquote&gt;Policy executingPolicy = new Policy("My Policy", 1, 4);&lt;br /&gt;executingPolicy.Execute((object[]) facts.ToArray(typeof(object)), &lt;strong&gt;interceptor&lt;/strong&gt;);&lt;/blockquote&gt;&lt;br /&gt;After the BRE is done executing the specified Policy, the interceptor class has been called for each task and might contain valueable information as to the execution of the Policy.&lt;br /&gt;&lt;br /&gt;The BRE supplies a standard implementation of IRuleSetTrackingInterceptor, called the DebugTrackingInterceptor. This interceptor is also used if you have any "Call Rules" shapes within your Orchestrations. It's the way for the HAT to enable viewing what went on within the business process, BRE wise.&lt;br /&gt;&lt;br /&gt;The DebugTrackingInterceptor, however, uses a plain text file format, which can be cumbersome to parse using tools. I've implemented a Xml version, which can be downloaded &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=d70546aa-1981-4e7d-bafc-f85c27fa0dd0"&gt;here&lt;/a&gt;. Using it you can track the same information as the DebugTrackingInterceptor does, but in a Xml format.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-114594917866460685?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/114594917866460685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=114594917866460685' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114594917866460685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114594917866460685'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/04/microsoft-business-rules-engine-ms-bre.html' title='Microsoft Business Rules Engine (MS-BRE) - XmlTrackingInterceptor'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-114519400833960829</id><published>2006-04-16T15:13:00.000+02:00</published><updated>2006-04-16T15:27:44.513+02:00</updated><title type='text'>Tool update: Policy Exporter</title><content type='html'>When working with the BRE, the stringent way the Business Rule Composer manages versioning can be a real pain. Undeploying / unpublishing policies and/or unpublishing vocabularies can be very handy. This tool allows you to:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Import multiple exported items at once&lt;/li&gt;&lt;li&gt;Delete multiple policies / vocabularies at once&lt;/li&gt;&lt;li&gt;Export multiple policies / vocabularies at once&lt;/li&gt;&lt;li&gt;Undeploy policies&lt;/li&gt;&lt;li&gt;Unpublish policies / vocabularies&lt;/li&gt;&lt;/ul&gt;Ofcourse, one should not use this tool in a production environment, as the versioning itself has a valid purpose. The tool is meant to ease development.&lt;br /&gt;&lt;br /&gt;I previously published this tool under the name "Policy Exporter". This is an update to that tool and a name change to better reflect it's purpose. It's now called "BRE Policy and Vocabulary manager" (what's in a name ;-) ) and it's current version is 1.1.&lt;br /&gt;&lt;br /&gt;The tool itself, including full sourcecode, can be downloaded from &lt;a href="http://www.tachyons.demon.nl/BRE Policy Vocabulary manager v1.1.zip"&gt;this&lt;/a&gt; location.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;A scenario example&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;While developing a Policy, you need a Vocabulary item added to the Vocabulary used in the current Policy:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Save the Policy.&lt;/li&gt;&lt;li&gt;Unpublish the Vocabulary using the tool&lt;/li&gt;&lt;li&gt;Press F5 in the Business Rule Composer&lt;/li&gt;&lt;li&gt;Ammend the Vocabulary&lt;/li&gt;&lt;li&gt;Publish the Vocabulary&lt;/li&gt;&lt;li&gt;Press F5 once again&lt;/li&gt;&lt;li&gt;Use the new item within the Policy&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-114519400833960829?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/114519400833960829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=114519400833960829' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114519400833960829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114519400833960829'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/04/tool-update-policy-exporter.html' title='Tool update: Policy Exporter'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-114417333018535487</id><published>2006-04-04T19:53:00.000+02:00</published><updated>2006-04-04T19:55:30.196+02:00</updated><title type='text'>Woohoo!</title><content type='html'>I've been awarded the Microsoft Most Valuable Professional (MVP) Award again! Thanks to everyone who asked me questions or help this year ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-114417333018535487?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/114417333018535487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=114417333018535487' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114417333018535487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114417333018535487'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/04/woohoo.html' title='Woohoo!'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-114405619009380991</id><published>2006-04-03T11:20:00.000+02:00</published><updated>2006-04-03T11:23:10.106+02:00</updated><title type='text'>FWD: Retrieving context properties within a map</title><content type='html'>OK, first off, I'm not sure if you really want this, but people are asking for it a lot and I ran across a solution, so read &lt;a href="http://biztalkblogs.com/carlosmedina/archive/2006/03/23/355.aspx"&gt;this&lt;/a&gt; article if you want to retrieve a context property for the current message within the mapper (using a custom functoid).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-114405619009380991?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/114405619009380991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=114405619009380991' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114405619009380991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114405619009380991'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/04/fwd-retrieving-context-properties.html' title='FWD: Retrieving context properties within a map'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-114375376963699742</id><published>2006-03-30T23:09:00.000+02:00</published><updated>2006-03-30T23:22:49.683+02:00</updated><title type='text'>[offtopic] Windows Media Center 2005 - configuring more then 2 tuners</title><content type='html'>Fyi, &lt;a href="http://www.thegreenbutton.com/community/shwmessage.aspx?ForumID=27&amp;MessageID=106105"&gt;this&lt;/a&gt; Green Button Community article on installing more then 2 tuners in Media Center 2005 works. However, when trying it, I bumped onto the reply the forum moderator gave (Posted 5/2/2005 7:29 PM). &lt;br /&gt;&lt;br /&gt;It turns out, Media Center recognizes all tuners automatically, at least in my case. Just starting up the Registry editor and copying the "User Settings" hive from a configured device under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Media Center\Service\Video\Tuners\{A799A800-A46D-11D0-A18C-00A02401DCD4} to the unconfigured device, altering it's properties (UserDefName, [RecordOrder]) and it worked :-D.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-114375376963699742?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/114375376963699742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=114375376963699742' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114375376963699742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114375376963699742'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/03/offtopic-windows-media-center-2005.html' title='[offtopic] Windows Media Center 2005 - configuring more then 2 tuners'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-114124474563952634</id><published>2006-03-01T21:04:00.000+01:00</published><updated>2006-03-01T21:29:28.946+01:00</updated><title type='text'>XPathMutatorStream</title><content type='html'>It seems this little gem is hidden as almost no one I talk to knows of it's existence. &lt;br /&gt;&lt;br /&gt;Within the Microsoft.BizTalk.XPath namespace in the (GAC) assembly Microsoft.BizTalk.XPathReader.dll, a class is contained called XPathReader. Relying on this reader it's possible to match XPath expressions in a streaming fashion. This information is out on the web and discussed on many occasions.&lt;br /&gt;&lt;br /&gt;However, within the Microsoft.BizTalk.Streaming namespace in the (GAC) assembly Microsoft.BizTalk.Streaming.dll, another class named XPathMutatorStream is defined. The class does what it's name implies, it allows for a callback to alter the value of specified XPathExpressions (hence the reference to XPathReader first). A basic implementation could look like this:&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;MemoryStream stream = new MemoryStream();&lt;br /&gt;&lt;br /&gt;StreamWriter sw = new StreamWriter(stream);&lt;br /&gt;&lt;br /&gt;string xmldocInstance = "&lt;Order&gt;&lt;OrderLines&gt;&lt;OrderLine id =\"1\"&gt;bla&lt;/OrderLine&gt;&lt;/OrderLines&gt;&lt;/Order&gt;";&lt;br /&gt;&lt;br /&gt;sw.WriteLine(xmldocInstance);&lt;br /&gt;sw.Flush();&lt;br /&gt;stream.Position = 0;&lt;br /&gt;&lt;br /&gt;XPathCollection queries = new XPathCollection();&lt;br /&gt;&lt;br /&gt;queries.Add(new XPathExpression("/*[local-name()='Order']/*[local-name()='OrderLines']/*[local-name()='OrderLine']"));&lt;br /&gt;&lt;br /&gt;ValueMutator mutator = new ValueMutator(this.XPathCallBack);&lt;br /&gt;&lt;br /&gt;XPathMutatorStream mutatorStream = new XPathMutatorStream(stream, queries, mutator);&lt;br /&gt;&lt;br /&gt;XmlTextReader reader = new XmlTextReader(mutatorStream);&lt;br /&gt;&lt;br /&gt;while (reader.Read());&lt;br /&gt;&lt;br /&gt;***&lt;br /&gt; &lt;br /&gt;private void XPathCallBack(&lt;br /&gt;&amp;nbsp;int matchIdx, &lt;br /&gt;&amp;nbsp;XPathExpression matchExpr, &lt;br /&gt;&amp;nbsp;string origVal,&lt;br /&gt;&amp;nbsp;ref string finalVal)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;MessageBox.Show("hit!");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;finalVal = "bli";&lt;br /&gt;}&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-114124474563952634?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/114124474563952634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=114124474563952634' title='90 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114124474563952634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/114124474563952634'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/03/xpathmutatorstream.html' title='XPathMutatorStream'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>90</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-113823026973892714</id><published>2006-01-25T23:54:00.000+01:00</published><updated>2006-01-26T00:04:29.786+01:00</updated><title type='text'>BizTalk Server 2006 - Pipeline Component Side-By-Side deployment</title><content type='html'>In BizTalk Server 2004, it was impossible to perform a side-by-side deployment of pipeline components (if someone knows an approach to implement this without renaming the assembly, please let me know ;-) ). Every aspect of BizTalk Server components was deployed into the GAC, but the pipeline components themselfs.&lt;br /&gt;&lt;br /&gt;It turns out, however, the team did a tremendous job in altering this 'feature' to support GAC-ed pipeline components within BizTalk Server 2006. The trick to enable this is to:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Version the pipeline component (sign the assembly)&lt;/li&gt;&lt;li&gt;reference the component by placing it into the "Pipeline Components" folder at development time in order to use it in your pipelines&lt;/li&gt;&lt;li&gt;remove it from this folder after building the pipeline or in deploying your solution to production&lt;/li&gt;&lt;li&gt;GAC the component&lt;/li&gt;&lt;/ul&gt;The compiled pipeline assembly will reference the correct version and the AppDomain used by BizTalk Server 2006 will search the GAC before resorting to it's private paths, amongst which is the "Pipeline Components" folder.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-113823026973892714?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/113823026973892714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=113823026973892714' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113823026973892714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113823026973892714'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/01/biztalk-server-2006-pipeline-component.html' title='BizTalk Server 2006 - Pipeline Component Side-By-Side deployment'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-113785933058620491</id><published>2006-01-21T16:51:00.000+01:00</published><updated>2006-01-21T17:02:10.660+01:00</updated><title type='text'>Using the BRE in content-based routing scenarios</title><content type='html'>After writing Schema Editor extensions, I got the idea of creating a Pipeline Component which can be used in content-based routing scenarios. Also, I've attached a 'whitepaper' which explains the sample solution as well as the IExtension interface used to implement the Schema Editor extension. The idea is simple:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A message comes into / flies out of the system through a Pipeline;&lt;/li&gt;&lt;li&gt;The Pipeline contains a component which looks at the schema for the passing message;&lt;/li&gt;&lt;li&gt;The Schema contains an annotation which states the Policy that applies to the Schema;&lt;/li&gt;&lt;li&gt;The appropriate Policy is executed by calling the BRE;&lt;/li&gt;&lt;li&gt;The Policy alters the message;&lt;/li&gt;&lt;li&gt;The message flying by is modified to contain the altered message from the BRE.&lt;/li&gt;&lt;/ul&gt;After this, any following component or system will deal with the altered message.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;One thing I haven't implemented due to the fact I haven't currently got a BizTalk 2004 VPC image is AppDomain caching of the Schema lookup. This caching would greatly improve performance of the Pipeline Component.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The associated whitepaper can be downloaded &lt;a href="http://www.tachyons.demon.nl/Using the BRE in content-based routing scenarios.doc"&gt;here&lt;/a&gt;. The source code is &lt;a href="http://www.tachyons.demon.nl/BRECallPolicy example - using the BRE in content-based routing scenarios.zip"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-113785933058620491?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/113785933058620491/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=113785933058620491' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113785933058620491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113785933058620491'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/01/using-bre-in-content-based-routing.html' title='Using the BRE in content-based routing scenarios'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-113735968822826414</id><published>2006-01-15T22:10:00.000+01:00</published><updated>2006-01-15T22:14:48.246+01:00</updated><title type='text'>BizTalk Server 2006 - export Orchestration as image</title><content type='html'>The UK SDC BizTalk 2004 Documenter tool, which can be found over &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=41c1faa9-13a6-478b-af81-d87ca946a222"&gt;here&lt;/a&gt;, does an excellent job of generating documentation for BizTalk projects. &lt;br /&gt;&lt;br /&gt;However, I often need to take snapshots of my BizTalk Orchestration and I'm currently using BizTalk Server 2006, which the tool doesn't support (yet?). I've written my own 'tool' for this, by stealing, euhm, borrowing, some code from them and throwing some of my own in as well. &lt;br /&gt;&lt;br /&gt;It's downloadable &lt;a href="http://www.tachyons.demon.nl/BizTalkPictureExporter.zip"&gt;here&lt;/a&gt; for anyone to use. Sourcecode is included as always.&lt;br /&gt;&lt;br /&gt;Have fun using it and let me know if you run into trouble ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-113735968822826414?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/113735968822826414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=113735968822826414' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113735968822826414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113735968822826414'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/01/biztalk-server-2006-export.html' title='BizTalk Server 2006 - export Orchestration as image'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-113706378429921301</id><published>2006-01-12T12:00:00.000+01:00</published><updated>2006-01-12T13:58:26.650+01:00</updated><title type='text'>Of BizTalk Server Schema Editor Extensions...</title><content type='html'>Ever wanted to add your own annotations to your schemas for some purpose like the Flat File extension, property promotion, the HWS extension or the TPM extension does? You can edit the schema by hand, but that wouldn’t be any fun, right? ;-) As an exercise, I’ve created two extensions which can easily be used in Visual Studio and extend the default schema editor, like the flat file extension does. &lt;br /&gt;&lt;br /&gt;One of the extensions allows an annotation to be added to the root schema element which can be read somewhere else in order to execute a specific BRE policy belonging to the message. This solution could be used to execute a policy from a pipeline in a content-based routing scenario.&lt;br /&gt;&lt;br /&gt;The other extension solves an issue a guy with me on a recent course has in processing COBOL copybooks. He needs to determine whether a field should be treated (and validated) as a date field instead of the normal numeric value. The extension allows for adding a property on any field stating it’s a date field according to the COBOL copybook standards.&lt;br /&gt;&lt;br /&gt;Figuring out how and what with schema extensibility can be a daunting task, as documentation is scarce. If you end up developing with these extensions, look into these properties, as there are not used, but very interesting (and hopefully, self-descriptive):&lt;br /&gt;&lt;br /&gt;InstanceGenerator&lt;br /&gt;InstanceValidator&lt;br /&gt;SchemaValidator&lt;br /&gt;&lt;br /&gt;Also, note the custom tab on the CopyBookExtension. It stems from a method called by the schema editor called GetCustomViews and the tab shows which fields will be interpreted as a date.&lt;br /&gt;&lt;br /&gt;Sourcecode for the CopyBookExtension is &lt;a href="http://www.gotdotnet.com/workspaces/releases/checkfordownload.aspx?id=90253271-85be-4993-b0f3-333ca4bedca2&amp;ReleaseId=18f00fa1-5255-430a-ae28-165a536e0a4f"&gt;here&lt;/a&gt;, sourcecode for the BRECallPolicyExtension can be found &lt;a href="http://www.gotdotnet.com/workspaces/releases/checkfordownload.aspx?id=90253271-85be-4993-b0f3-333ca4bedca2&amp;ReleaseId=b94808be-d8fb-45e9-949d-9710fe8a0be9"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Using the extension is easy:&lt;ol&gt;&lt;li&gt;Compile the extension. A post-build action will copy the output to the schema editor extension folder of BizTalk&lt;/li&gt;&lt;li&gt;Open up a schema in Visual Studio&lt;/li&gt;&lt;li&gt;Select the extension&lt;/li&gt;&lt;li&gt;In case of the CopyBook extension, select a field and note the “CopyBook” group in the PropertyGrid&lt;/li&gt;&lt;li&gt;In case of the BRECallPolicy extension, select the &lt;schema&gt; node and note the “BRE” group having a dropdown list of all published policies (latest only) or the error if nothing is found on the local host BizTalkRuleEngineDb ;-)&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;Let me know what you think!&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-113706378429921301?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/113706378429921301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=113706378429921301' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113706378429921301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113706378429921301'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/01/of-biztalk-server-schema-editor.html' title='Of BizTalk Server Schema Editor Extensions...'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-113698209667826255</id><published>2006-01-11T13:03:00.000+01:00</published><updated>2006-01-11T13:21:36.690+01:00</updated><title type='text'>Default values in maps - better option in BizTalk 2006</title><content type='html'>In a course I'm following today we discussed different ways of keeping nodes from dissapearing after a map has been applied. We discovered a new option in 2006 b2, which I'm very font of. Basically, up until now, we had a few ways (maybe even more?) of ensuring output nodes were created correctly:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;default value in schema (space) - drawback: not visible in editor, schema specific, where as we might want to leave some nodes out in other mappings.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;space in value in map - drawback: not visible in editor.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;use some string functoid to fill the value (empty argument for the functoid) - drawback: non-functional functoids in the map, warning if the datatype is not string.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;scripting functoid - ability to return a null value, which works with any datatype on the right hand side. drawback: non-functional functoids in the map&lt;/li&gt;&lt;li&gt;map a record (any record) into the elements or attributes - drawback: clutters the map with non-functional and illegal links.&lt;/li&gt;&lt;/ol&gt;in 2006 b2, there's a 6th possibility:&lt;br /&gt;&lt;br /&gt;The value property of the right hand side map now has a dropdown, containing '&amp;lt;empty&amp;gt;', which greatly enhances the functional aspect of the property.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-113698209667826255?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/113698209667826255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=113698209667826255' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113698209667826255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113698209667826255'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/01/default-values-in-maps-better-option.html' title='Default values in maps - better option in BizTalk 2006'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-113682310662848891</id><published>2006-01-09T17:09:00.000+01:00</published><updated>2006-01-09T17:11:46.636+01:00</updated><title type='text'>Privacy and BizTalk Server 2006 - the "BizTalk Server Operators" group</title><content type='html'>Coming up in BizTalk Server 2006: the "BizTalk Server Operators" group. Users within this group are unable to view privacy relevant details such as context properties for suspended messages and their message body, which "BizTalk Server Administrators" can... Kudos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-113682310662848891?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/113682310662848891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=113682310662848891' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113682310662848891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113682310662848891'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2006/01/privacy-and-biztalk-server-2006.html' title='Privacy and BizTalk Server 2006 - the &quot;BizTalk Server Operators&quot; group'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-113459890828478549</id><published>2005-12-14T23:17:00.000+01:00</published><updated>2005-12-15T16:16:41.906+01:00</updated><title type='text'>BRE PolicyExporter - v1.0 - export arbitrary policies with ease..., import without publish, etc.</title><content type='html'>Ever had a Policy which failed to load in the Business Rules Composer because some object didn't exist in the GAC anymore of it's interface was chanced? Ever wanted to just select a bunch of Policies to export or delete all at once? Irritated by the fact you cannot edit a policy within the version you imported it in?&lt;br /&gt;&lt;br /&gt;Use PolicyExporter and be on your way. It's a simple utility which allows you to make an arbitrary selection of both Policies and Vocabularies in a RuleStore and export them to whereever. Download the sourcecode &lt;a href="http://www.tachyons.demon.nl/PolicyExporter.zip"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;It's compatible with both BizTalk Server 2004 and BizTalk Server 2006 beta 2 (convert the project to VS.NET 2005 to compile)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-113459890828478549?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/113459890828478549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=113459890828478549' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113459890828478549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113459890828478549'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/12/bre-policyexporter-v10-export.html' title='BRE PolicyExporter - v1.0 - export arbitrary policies with ease..., import without publish, etc.'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-113284483305312743</id><published>2005-11-24T15:48:00.000+01:00</published><updated>2005-11-25T13:05:52.676+01:00</updated><title type='text'>Programmatically creating BizTalk Server Orchestrations</title><content type='html'>After some digging, I found a way to programmatically create BizTalk Server Orchestrations through the use of Microsoft.BizTalk.IMS. &lt;br /&gt;&lt;br /&gt;I've created a sample generator for your enjoyment &lt;a href="http://www.tachyons.demon.nl/ProgrammaticBizTalkOrchestrations.zip"&gt;here&lt;/a&gt;. It's a simple Console application which create an Orchestration receiving a message and executing a Policy using the CallRules shape inside an Atomic Scope. &lt;br /&gt;&lt;br /&gt;I personally think this MetaModel opens possibilities for tools like best practices implementors, template processing, etc. Let me know what you think!&lt;br /&gt;&lt;br /&gt;Note: the model works in 2006 beta 2 as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-113284483305312743?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/113284483305312743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=113284483305312743' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113284483305312743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113284483305312743'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/11/programmatically-creating-biztalk.html' title='Programmatically creating BizTalk Server Orchestrations'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-113044135546886334</id><published>2005-10-27T21:20:00.000+02:00</published><updated>2005-10-27T21:29:15.476+02:00</updated><title type='text'>Schema instance generator for use within Orchestrations</title><content type='html'>Ever ran into a situation where you want to initialize an instance of a used schema? Normally, lots of people use a C# method which loads a string into a XmlDocument instance and return that instance to the Orchestration engine. This is all fine and dandy, but what happens if the schema the original instance string was based on is changed? &lt;br /&gt;&lt;br /&gt;I've created a little helper class which instantiates an example fragment of a dynamically selected schema (the Schema needs to be deployed ofcourse). It essentially performs the same task as the "Generate Instance" does within Visual Studio, but without the nodes being repeating a number of times and without serializing the instance to disk. It returns a simple XmlDocument instance containing an instance of the specified schema. &lt;br /&gt;&lt;br /&gt;Using this class would enable better maintainability of your Orchestrations, as you need not change any code in the Orchestration itself if you refactor your schemas. Ofcourse, if you're adding or removing fields which are used in the Orchestration, you need to update those as you would normally.&lt;br /&gt;&lt;br /&gt;It's located &lt;a href="http://www.tachyons.demon.nl/SchemaInstanceRetriever.zip"&gt;here&lt;/a&gt;. Comments are very welcomed! Find my e-mail address &lt;a href="http://martijnh.blogspot.com/2004/07/e-mail-address.html"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-113044135546886334?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/113044135546886334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=113044135546886334' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113044135546886334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/113044135546886334'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/10/schema-instance-generator-for-use.html' title='Schema instance generator for use within Orchestrations'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-112958130337692981</id><published>2005-10-17T22:27:00.000+02:00</published><updated>2005-10-17T22:35:03.383+02:00</updated><title type='text'>BizTalk Server Pipeline Component Wizard - 2006 edition (2.0)</title><content type='html'>Being sick over the weekend allowed me some time to port the current Pipeline Component Wizard to BizTalk Server 2006. &lt;br /&gt;&lt;br /&gt;It has been revised on some portions, improved on others due to VS.NET 2005's enhanced support for CodeDOM (although we're not quite there yet, as per &lt;a href="http://blogs.msdn.com/bclteam/archive/2005/03/16/396915.aspx"&gt;this&lt;/a&gt; blog entry). &lt;br /&gt;&lt;br /&gt;The wizard now implements regions and has some other neat tricks regarding VS.NET 2005. Check it out once VS.NET 2005 has been released (the current version does &lt;em&gt;not&lt;/em&gt; work on beta builds).&lt;br /&gt;&lt;br /&gt;Obviously, there's no longer support in this release for BizTalk Server 2004 / VS.NET 2003, as the code has been ported to .NET 2.0.&lt;br /&gt;&lt;br /&gt;Get it &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=1d4f7d6b-7d27-4f05-a8ee-48cfcd5abf4a"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Let me know what you think (for those with the ability to use the product right now ;-))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-112958130337692981?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/112958130337692981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=112958130337692981' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112958130337692981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112958130337692981'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/10/biztalk-server-pipeline-component.html' title='BizTalk Server Pipeline Component Wizard - 2006 edition (2.0)'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-112906588016263664</id><published>2005-10-11T22:05:00.000+02:00</published><updated>2005-10-11T23:27:00.320+02:00</updated><title type='text'>Unit testing BRE policies</title><content type='html'>When Unit testing BRE policies, it might be useful to be able to declaratively define which RuleStore to use, which Policy to test and which Version to load. Using the Attributes I created, doing this become pretty simple. One of the Attributes also provides for a class Type to be instantiated implementing IRuleSetTrackingInterceptor, which allows tracking what the BRE does while executing the requested Policy. Have a look at the code, as I think it might be useful for many UnitTesting scenarios with version policies.&lt;br /&gt;&lt;br /&gt;using it is quite simple:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;using MartijnHoogendoorn.BizTalk.BRE.Testing.Attributes;&lt;br /&gt;&lt;br /&gt;[Test]&lt;br /&gt;&lt;strong&gt;[PolicyTester("MyPolicy", typeof(MyInterceptor))]&lt;br /&gt;[RuleStore("Integrated Security=SSPI;Database=BizTalkRuleEngineDb;Server=MyRuleEngineServer", "MYDOMAIN", "myusername", "mypassword")]&lt;/strong&gt;&lt;br /&gt;private void TestMyPolicy()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;XmlReader reader = new XmlTextReader(@"..\..\..\MyMessage.xml");&lt;br /&gt;&amp;nbsp;&amp;nbsp;XmlSerializer serializer = new XmlSerializer(typeof(MyMessage));&lt;br /&gt;&amp;nbsp;&amp;nbsp;MyMessageClass = (MyMessageClass) serializer.Deserialize(reader);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;MyInterceptor interceptor = (MyInterceptor) &lt;strong&gt;PolicyTesterHelper.ExecutePolicy(new object[] { "Some interesting value", someObject });&lt;/strong&gt;   &lt;br /&gt;&amp;nbsp;&amp;nbsp;foreach(string eventLine in interceptor.PolicyExecutionEvents)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Diagnostics.Trace.WriteLine(interceptor.PolicyExecutionEvents.ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;See the sample code &lt;a href="http://www.tachyons.demon.nl/PolicyTesterHelper.zip"&gt;here&lt;/a&gt; for a real implementation&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-112906588016263664?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/112906588016263664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=112906588016263664' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112906588016263664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112906588016263664'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/10/unit-testing-bre-policies.html' title='Unit testing BRE policies'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-112854411749376219</id><published>2005-10-05T21:50:00.000+02:00</published><updated>2005-10-05T22:29:15.220+02:00</updated><title type='text'>Testing remote Business Rules (BRE)</title><content type='html'>When using remote Business Rules, you might encounter a situation where you might want to test a policy, stored in a remote SQL Server. I had some security issues, just a tip, here's how I resolved it:&lt;blockquote&gt;&lt;br /&gt;using Microsoft.RuleEngine;&lt;br /&gt;&lt;br /&gt;// 0 = LOGON32_PROVIDER_DEFAULT&lt;br /&gt;// 2 = LOGON32_LOGON_INTERACTIVE&lt;br /&gt;IntPtr token = IntPtr.Zero;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;const string domain = "MYDOMAIN";&lt;br /&gt;const string password = "MYPASSWORD";&lt;br /&gt;const string username = "MYUSERNAME";&lt;br /&gt;const string server = "MYSERVER";&lt;br /&gt;&lt;br /&gt;if(LogonUser(username, domain, password, 2, 0, out token) != 0)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;WindowsIdentity identity = new WindowsIdentity(token);&lt;br /&gt;&amp;nbsp;WindowsImpersonationContext context = identity.Impersonate();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;SqlRuleStore ruleStore = new SqlRuleStore(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;string.Format("Integrated Security=SSPI;Database=BizTalkRuleEngineDb;Server={0}", Server));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;RuleSetInfo currentRuleSetInfo = null;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;// retrieve information about the latest published RuleSet from the RuleStore&lt;br /&gt;&amp;nbsp;&amp;nbsp;RuleSetInfoCollection ruleSets = RuleStore.GetRuleSets(Policy, RuleStore.Filter.LatestPublished);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(ruleSets.Count &gt; 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// select the retrieved RuleSetInfo object&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentRuleSetInfo = ruleSets[0];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// retrieve the latest published RuleSet from the RuleStore&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;RuleSet currentRuleSet = RuleStore.GetRuleSet(currentRuleSetInfo);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// create a PolicyTester to test the RuleSet&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;PolicyTester tester = new PolicyTester(currentRuleSet);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tester.Execute(facts, this);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;catch(Exception e)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;System.Diagnostics.WriteLine(e.ToString());&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;finally&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;context.Undo();&lt;br /&gt;&amp;nbsp;&amp;nbsp;CloseHandle(token);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Ofcourse, as I typed this at heart, some things (like the actual facts being put into the execute action of the PolicyTester) might not compile / work when plainly copied into Visual Studio. Make sure to reference Microsoft.RuleEngine.dll from your project. Also note that this is an example and could be enhanced greatly. ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-112854411749376219?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/112854411749376219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=112854411749376219' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112854411749376219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112854411749376219'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/10/testing-remote-business-rules-bre.html' title='Testing remote Business Rules (BRE)'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-112808609522728336</id><published>2005-09-30T14:16:00.000+02:00</published><updated>2005-09-30T15:14:55.270+02:00</updated><title type='text'>The Microsoft MVP Summit - day 2</title><content type='html'>So I was mistaken about the product group meetings, they'll be today and tomorrow... &lt;br /&gt;&lt;br /&gt;Having said that, the morning started off with the keynote sessions by people like &lt;a href="http://www.microsoft.com/presspass/exec/steve/default.mspx"&gt;Steve Balmer&lt;/a&gt;, &lt;a href="http://www.microsoft.com/presspass/exec/jim/default.mspx"&gt;Jim Allchin&lt;/a&gt;, Group Vice President of the Platform Group and &lt;a href="http://www.microsoft.com/presspass/exec/kjohnson/default.mspx"&gt;Kevin Johnson&lt;/a&gt;, Co-President Platform products &amp; Services division. &lt;br /&gt;I never saw Steve in person before and I must say, he's a huge presence which can motivate people like you've never seen before (don't let the glasses fool you :p). It was good to see him taking feedback and suggestions for product enhancements, changes to the different products and the likes. Jim Allchin presented a lot of new stuff in &lt;a href="http://msdn.microsoft.com/windowsvista/"&gt;Windows Vista&lt;/a&gt; which hadn't even been on the PDC yet. After a nice lunch, we went back to Microsoft Campus to have sessions on new technology to come.&lt;br /&gt;&lt;br /&gt;I've seen some awesome new enhancements for the post-Vista era, up until 2010. Microsoft is doing a lot to be as customer focused and feedback driven as they can be and the design of Blackcomb will actually be largely based on customer requirements. The experience with giving feedback is improving dramatically over the next year or so, as Ladybug, Betaplace, Microsoft feedback and others will be merged into one feedback system where Microsoft developers are required to let the customer know what happened to their feedback before a raised issue can be closed. &lt;br /&gt;That's a huge step forwards from the current way of fire and forget feedback from a customer standpoint... &lt;br /&gt;&lt;br /&gt;Strolling around, I landed in a session by Don Box (charasmatic dude) about Windows Workflow Foundation. It was fun to see how easy integrating workflow into your application has been made by the development team, actually being a metadata engine, you can simply hook up any code you like by deriving from &lt;em&gt;Activity&lt;/em&gt;. You then write your application declaratively, in &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnfoghorn/html/foghorn04142004.asp"&gt;Xaml&lt;/a&gt;. You can do parallel and sequential workflows, and much more. Check out WWF ("dub-dub-ef") &lt;a href="http://msdn.microsoft.com/windowsvista/building/workflow/default.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After the different sessions, I hooked up with some great BizTalk people like Stephen W. Thomas, Allan Smith, Paul Somers, Scott Cairney, Bill Chesnut, Romualdas Stonkus, et al. It was fun to hear from other BizTalk MVPs about their experiences in the field. Joined by some people from the BizTalk product team, they were really interested in hearing from us regarding actual customer scenarios for BizTalk Server.&lt;br /&gt;&lt;br /&gt;After the very nice dinner at the Best West cafe on campus, I went to sleep, the jetlag is really starting to kick in, I wonder how it will be going home and ariving 22 hours later... It's gonna be a long first week back at the office I think... :/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-112808609522728336?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/112808609522728336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=112808609522728336' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112808609522728336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112808609522728336'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/09/microsoft-mvp-summit-day-2.html' title='The Microsoft MVP Summit - day 2'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-112799990421984407</id><published>2005-09-29T14:24:00.000+02:00</published><updated>2005-09-29T15:18:24.256+02:00</updated><title type='text'>The Microsoft MVP Summit - day 1</title><content type='html'>Ok, so today we had registration on the agenda from 13:00 onward, and thus had the entire morning to explore Seattle. Being the typical tourists we appearantly are, we walked through downtown Seattle to the &lt;a href="http://www.spaceneedle.com/"&gt;Spaceneedle&lt;/a&gt;. We could have taken the &lt;a href="http://www.seattlemonorail.com/"&gt;monorail&lt;/a&gt;, but decided to get to learn Seattle a bit better from the ground first... &lt;br /&gt;&lt;br /&gt;Walking through downtown Seattle, we concluded it's quite a nice, quiet city, where given the cars driving around (Ford FS120, Mercedes E200, BMW 7&lt;strong&gt;60&lt;/strong&gt;i, etc) people seem to be 'somewhat wealthy'. Seattle is very clean, has nice big sidewalks and isn't quite as crowded as let's say downtown Manhattan. The spaceneedle was a great experience, although I wish it still was the tallest building in Seattle, it does have a great lookout over the harbor, the city and even the mountains (we had some fog upstairs, so that view was somewhat blocked)&lt;br /&gt;&lt;br /&gt;On the way back to our hotel from the Spaceneedle, we rode the Monorail, which was fun (and a lot quicker than walking :)). We had a stroll through Pike Place Market,  &lt;br /&gt;&lt;br /&gt;&lt;img src="http://seattle.gov/tour/dntn.gif" /&gt; &lt;br /&gt;&lt;br /&gt;, drank a beer on the waterfront in the harbor and then took the bus to register for the event. We arrived at the Microsoft Campus. which seems like a complete city on it's own, within beautiful surroundings I must say, forrest every way you look :)&lt;br /&gt;&lt;br /&gt;After registration, we went to get my coupon for the Microsoft store filled. Appearantly, a few more people felt like doing the same, as the store was literally packed full with other MVPs. They really have great stuff in the store, so I ended up using my entire coupon's worth, mostly on gifts for others (Martin, I thought of you and have your request in my bag ;O).&lt;br /&gt;&lt;br /&gt;So we registered and shopped, it was time to start the party! We dropped the stuff I bought at the hotel and went to the Hyatt hotel in Bellevue, just outside of Seattle, were we had a nice dinner, met a lot of other MVPs, connected to some EMEA MVPs we already knew and generally had a great time the rest of the evening. Around 10:30 I got tired and went back to the hotel to get some sleep.&lt;br /&gt;&lt;br /&gt;All in all, this was a good and relaxed start of the real summit. Tomorrow, we have meetings with the award product groups, so I finally get to meet some of the great minds behind the BizTalk Server product (and Windows Workflow Foundation, which looks very promising too, ofcourse) :-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-112799990421984407?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/112799990421984407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=112799990421984407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112799990421984407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112799990421984407'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/09/microsoft-mvp-summit-day-1.html' title='The Microsoft MVP Summit - day 1'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-112791003064632422</id><published>2005-09-28T13:46:00.000+02:00</published><updated>2005-09-28T14:20:32.400+02:00</updated><title type='text'>The Microsoft MVP Summit - day 0</title><content type='html'>&lt;a href="http://weblogs.asp.net/fbouma"&gt;We've&lt;/a&gt; flown to Seattle with SAS a few hours ago. From Amsterdam, we first headed to Copenhagen where we waited a gruesome 4 hours for our connection, an Airbus heading to the US. A cool thing to note about SAS is the fact they have WiFi internet access onboard. It's slow as can be, but at least you can e-mail (and blog) from an altitude of 10km flying 900+ kilometers an hour... :-D (see the picture we took &lt;a href="http://codebetter.com/blogs/sahil.malik/archive/2005/09/27/132546.aspx"&gt;here&lt;/a&gt;) &lt;br /&gt;&lt;br /&gt;After the dreadful 9 hour flight (on which there were 4 different movies to see, but they weren't streaming them, so hooking up the touchscreen too late means missing a chunk of the movie) where you learn to appreciate a repulsion caddle might have from being transported on a boat, we landed on SeaTac (Seattle / Tacoma) airport. &lt;br /&gt;&lt;br /&gt;We ofcourse had to fill out quite some paperwork, one for the US Customs Service stating we had nothing to declare, and one for Visa Waiver countries stating your personal information. On top of the paperwork, we had both our index fingers digitalized and a mugshot taken by the border patrol. &lt;br /&gt;&lt;br /&gt;After this exercise of patience, we moved on to get our luggage. We had to take it of the belt, haul it to another room, where we placed it on another bagage belt, were the security checks the European custom services performed were executed again...&lt;br /&gt;&lt;br /&gt;Picking up our luggage from the secondary belt, we headed to Seattle by cab (the shuttle was nowhere to be found, or we didn't look hard enough :-))&lt;br /&gt;&lt;br /&gt;Frans is staying at the &lt;a href="http://www.starwoodhotels.com/whotels/search/guest_rooms_amenities.html?propertyID=1154&amp;flashContent=nonflash"&gt;W hotel&lt;/a&gt;, for a review of the hotel by another MVP, Sahil Malik, see &lt;a href="http://codebetter.com/blogs/sahil.malik/archive/2005/09/28/132563.aspx"&gt;this&lt;/a&gt; page. I'm staying in a hotel two blocks away, on 6th Avenue, called the Crown Plaza. My sentiments regarding this hotel are quite similar to Sahil's, except at least he has what appears to be a minibar and I'm stuck drinking chlorized water from the tap... :/&lt;br /&gt;&lt;br /&gt;After walking around down-town Seattle and obviously missing all the cool restaurants (there don't appear to be a lot in the area??) we finally stumbled upon a restaurant worth mentioning. It's and Italian restaurant located next to hotel "Vintage Park" on 5th Avenue and they serve a great red wine (Cabernet Sauvignon) called "Washington" I believe and the Roasted Chicken with Risotto is great :-D&lt;br /&gt;&lt;br /&gt;Anyways, I'm not normally in the habit of blogging about non-business stuff, but I thought it would be fun to write up my experiences in Seattle, the summit and being in Redmond... More non-NDA info to follow!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-112791003064632422?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/112791003064632422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=112791003064632422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112791003064632422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112791003064632422'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/09/microsoft-mvp-summit-day-0.html' title='The Microsoft MVP Summit - day 0'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-112194747383017874</id><published>2005-07-21T13:53:00.000+02:00</published><updated>2005-07-21T14:04:33.836+02:00</updated><title type='text'>Messages disappearing in BizTalk Server 2004 when the Envelope property of the schema is set to 'Yes'</title><content type='html'>I'm documenting this 'feature' in order to save some poor soul(s) the same frustration I went through.&lt;br /&gt;&lt;br /&gt;It turns out that if your combine the normal XmlReceive pipeline with a Schema which has the 'Envelope' property set to 'Yes', the message is consumed, but never processed. It just vanishes into the void, no EventViewer error message or warning, no suspended message in HAT, nothing. &lt;br /&gt;&lt;br /&gt;If you set the 'Envelope' property back to 'No' or '(Default)', things works as was to be expected. Ofcourse, setting the Receive Pipeline to a custom pipeline with the XmlDisassembler property 'Envelope Schemas' set to be the defined schema will split the interchange just fine. &lt;br /&gt;&lt;br /&gt;However, I myself would expect at least a warning from BizTalk Server that it is consuming the message. &lt;br /&gt;&lt;br /&gt;The message can be found to be parsed by the receive pipeline by looking in HAT from the 'Queries' menu / Most recent 100 service instances...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-112194747383017874?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/112194747383017874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=112194747383017874' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112194747383017874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112194747383017874'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/07/messages-disappearing-in-biztalk.html' title='Messages disappearing in BizTalk Server 2004 when the Envelope property of the schema is set to &apos;Yes&apos;'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-112029691968744894</id><published>2005-07-02T11:33:00.000+02:00</published><updated>2006-02-21T20:14:50.823+01:00</updated><title type='text'>BizTalk Server 2004 in combination with VS.NET 2005 B2</title><content type='html'>Please see &lt;a href="http://wessamzeidan.net/cs/blog/archive/2005/06/08/37.aspx"&gt;http://wessamzeidan.net/cs/blog/archive/2005/06/08/37.aspx&lt;/a&gt; if your Web Publishing Wizard stops working...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-112029691968744894?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/112029691968744894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=112029691968744894' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112029691968744894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112029691968744894'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/07/biztalk-server-2004-in-combination.html' title='BizTalk Server 2004 in combination with VS.NET 2005 B2'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-112021402326987215</id><published>2005-07-01T12:31:00.000+02:00</published><updated>2005-07-01T12:33:43.273+02:00</updated><title type='text'>TechEd 2005 - Ask The Experts</title><content type='html'>In case anyone is interested, my schedule for ATE on TechEd 2005 Europe:&lt;br /&gt;&lt;br /&gt;Tuesday - 11:30 - 14:00&lt;br /&gt;Wednesday - 11:00 - 14:00&lt;br /&gt;Friday - 13:15 - 15:00&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-112021402326987215?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/112021402326987215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=112021402326987215' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112021402326987215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/112021402326987215'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/07/teched-2005-ask-experts.html' title='TechEd 2005 - Ask The Experts'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111926923351010521</id><published>2005-06-20T13:57:00.000+02:00</published><updated>2005-06-20T14:07:13.580+02:00</updated><title type='text'>Party Resolution: NorthWind Suppliers table</title><content type='html'>Using the NorthWind database' Suppliers table for Party Resolution as an example might pose some interesting issues. BizTalk Explorer doesn't let you add Parties containing `~!@#$%^&amp;*()+=[]{}|;'"&lt;&gt;,?&lt;br /&gt;&lt;br /&gt;With names in the CompanyName column like &lt;em&gt;Grandma Kelly&lt;strong&gt;'&lt;/strong&gt;s Homestead&lt;/em&gt; and &lt;em&gt;Heli Süßwaren GmbH &lt;strong&gt;&amp;&lt;/strong&gt; Co. KG&lt;/em&gt; it seems to be impossible to simply add those companies as parties for creating a NorthWind order processing example orchestration.... &lt;br /&gt;&lt;br /&gt;Altering the BizTalkMgmtDb (bts_party and bts_party_alias) seems to do the trick though (not supported ofcourse ;-p). Just inserting a new party into bts_party and setting it's alias in bts_party_alias works like a charm (fully tested with simple party resolution)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111926923351010521?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111926923351010521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111926923351010521' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111926923351010521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111926923351010521'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/06/party-resolution-northwind-suppliers.html' title='Party Resolution: NorthWind Suppliers table'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111729267977414598</id><published>2005-05-28T17:03:00.000+02:00</published><updated>2005-05-29T16:38:53.126+02:00</updated><title type='text'>Webcast recording available - Custom Pipeline Component development</title><content type='html'>For anyone interested in my talk about BizTalk Pipeline Component development, please see this link: &lt;a href="http://www.livemeeting.com/cc/microsoft/view?id=BTSBAG-62&amp;pw=35DKTQ"&gt;http://www.livemeeting.com/cc/microsoft/view?id=BTSBAG-62&amp;pw=35DKTQ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Feedback is appreciated!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111729267977414598?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111729267977414598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111729267977414598' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111729267977414598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111729267977414598'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/webcast-recording-available-custom.html' title='Webcast recording available - Custom Pipeline Component development'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111727000877001081</id><published>2005-05-28T10:44:00.000+02:00</published><updated>2005-05-28T10:46:48.776+02:00</updated><title type='text'>Webcast Sample - Disassembler component for 401k requests</title><content type='html'>In the Webcast I did yesterday, I explained Disassembler functionality, promoting properties from a deployed schema, writing distinguished properties, disassembling a binary Pdf Form into an Xml message which can be used in conjunction with e.g. Party resolution, etc. If you're interested in reviewing the sample material, the component and sample solution, pipelines, etc. can be downloaded &lt;a href="http://www.staticvoid.demon.nl/SampleDisassemblerComponent.zip"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111727000877001081?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111727000877001081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111727000877001081' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111727000877001081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111727000877001081'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/webcast-sample-disassembler-component.html' title='Webcast Sample - Disassembler component for 401k requests'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111709829833077982</id><published>2005-05-26T11:03:00.000+02:00</published><updated>2005-05-26T11:04:58.333+02:00</updated><title type='text'>new version of the XmlCompleteValidator (v1.1) pipeline component</title><content type='html'>I've updated the XmlCompleteValidator component, it had some minor issues resulting is less readable errors being generated. It's available &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=fce10540-e547-459d-b995-f1e3cc96a25f"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111709829833077982?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111709829833077982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111709829833077982' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111709829833077982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111709829833077982'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/new-version-of-xmlcompletevalidator.html' title='new version of the XmlCompleteValidator (v1.1) pipeline component'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-111684874603436006</id><published>2005-05-23T12:51:00.000+02:00</published><updated>2005-05-23T13:46:49.343+02:00</updated><title type='text'>Upcoming webcast</title><content type='html'>I'm doing a webcast this coming Friday regarding pipeline components in general, the use of the Pipeline Component Wizard to enable rapid development of pipeline components, etc. I've got demos lined up involving creating a simple pipeline component from scratch, building the same component using the wizard to show productivity increasement, building a Disassembler pipeline component, using IProbeMessage, etc. Here's the info:&lt;br /&gt;&lt;br /&gt;Title: BizTalk Pipeline Components - abstracting external document types from your business&lt;br /&gt;URL: &lt;a href="https://www.livemeeting.com/cc/microsoft/join?id=BTSBAG&amp;role=attend&amp;pw=35DKTQ"&gt;https://www.livemeeting.com/cc/microsoft/join?id=BTSBAG&amp;role=attend&amp;pw=35DKTQ&lt;/a&gt;&lt;br /&gt;Time: &lt;strong&gt;Friday, May 27, 2005 21:45-23:30 (GMT+1)&lt;/strong&gt; (1-2:30pm PST)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111684874603436006?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111684874603436006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111684874603436006' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111684874603436006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111684874603436006'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/upcoming-webcast.html' title='Upcoming webcast'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111683625143933670</id><published>2005-05-23T10:14:00.000+02:00</published><updated>2005-05-23T10:17:31.546+02:00</updated><title type='text'>Pipeline Component Wizard - v1.34</title><content type='html'>Yet another update. This time it's to fix an anomaly in the Disassembler implementation. It's code was incorrectly generated, resulting in a compilable unit, but to not much affect. It now uses a Queue implementation in order to allow easy implementation of the Splitter Pattern.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111683625143933670?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111683625143933670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111683625143933670' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111683625143933670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111683625143933670'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/pipeline-component-wizard-v134.html' title='Pipeline Component Wizard - v1.34'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111608643825837490</id><published>2005-05-14T17:38:00.000+02:00</published><updated>2005-05-14T18:00:38.286+02:00</updated><title type='text'>Pipeline Component Wizard - v1.33 released</title><content type='html'>An e-mail from Boudewijn vd Zwan (thanks!) got me started on re-testing the Pipeline Component Wizard and I found a few bugs, which are fixed in the 1.33 release just &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=1d4f7d6b-7d27-4f05-a8ee-48cfcd5abf4a"&gt;posted&lt;/a&gt; on GotDotNet:&lt;br /&gt;&lt;br /&gt;[BUG] AssemblingSerializer generated code has wrong member reference &lt;br /&gt;[BUG] Unsupported CATID values removed &lt;br /&gt;[BUG] Solution always named after latest added project &lt;br /&gt;[BUG] SchemaWithNone with stored incorrectly in the PropertyBag &lt;br /&gt;&lt;br /&gt;Sourcecode is included ofcourse, and the documentation part of it is getting better (not quite there yet though..)&lt;br /&gt;&lt;br /&gt;Enjoy, and please let me know of any issues...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111608643825837490?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111608643825837490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111608643825837490' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111608643825837490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111608643825837490'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/pipeline-component-wizard-v133.html' title='Pipeline Component Wizard - v1.33 released'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111597530100075798</id><published>2005-05-13T10:58:00.000+02:00</published><updated>2005-05-13T11:08:21.006+02:00</updated><title type='text'>"a multi-rooted schema may not define a message part; reference the roots directly"</title><content type='html'>Using the "Add Generated Items" to add an "Adapter" for use with SQL Server in order to send data from BizTalk to e.g. a Stored Procedure, you might end up with a so-called multi-rooted schema. &lt;br /&gt;&lt;br /&gt;This kind of schema is generated to enable a response coming back from SQL Server to be used in the Orchestration you need the message (using a Request-Response send port).&lt;br /&gt;&lt;br /&gt;However, within the schema, you end up with 2 rootnodes. 1 for the Request message structure and 1 for the Response message structure.&lt;br /&gt;&lt;br /&gt;If you want to promote a property within one of those structure, you could end up with the compiler telling you "a multi-rooted schema may not define a message part; reference the roots directly". This would occur e.g. if you would use a Message Assignment shape to set the promoted property to some value within your Business Process.&lt;br /&gt;&lt;br /&gt;In order to resolve this error, make sure a "Root Reference" is selected in the generated schema pointing to the element containing the promoted property. This setting can be found on the "Schema" toplevel element in the Schema Editor view.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111597530100075798?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111597530100075798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111597530100075798' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111597530100075798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111597530100075798'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/multi-rooted-schema-may-not-define.html' title='&quot;a multi-rooted schema may not define a message part; reference the roots directly&quot;'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111582045610968712</id><published>2005-05-11T16:07:00.000+02:00</published><updated>2005-05-11T16:16:02.390+02:00</updated><title type='text'>As I Walk Along I Wonder...</title><content type='html'>Having an Orchestration where I perform a mapping and try to set a promoted property to some value for either correlation or business use, I sometimes encounter this error:&lt;br /&gt;&lt;blockquote&gt;A failure occurred while evaluating the property MacawSchemas.PropertySchema.SomeField against the message part data. The message part data does not contain at least one of the nodes specified by the XPath expression (listed below) that corresponds to the property.&lt;/blockquote&gt;&lt;br /&gt;It ofcourse means BizTalk cannot find the property I'm refering to by using the XPath originally specified when the property was promoted (in the annotation within the document schema). However, I was certain I had the XPath setup correctly.&lt;br /&gt;&lt;br /&gt;After some testing, it turned out I made the mistake of assuming the field would be available, while in fact, the mapper didn't produce the field in creating the message, as it had neither an inbound link (naturally), &lt;em&gt;nor a default value&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;Setting a "space" character to be it's default value in the mapping target is all I needed to get an empty element generated and for the Orchestration to work......&lt;br /&gt;&lt;br /&gt;Can't win 'em all :-o&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111582045610968712?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111582045610968712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111582045610968712' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111582045610968712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111582045610968712'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/as-i-walk-along-i-wonder.html' title='As I Walk Along I Wonder...'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111573071261190732</id><published>2005-05-10T14:55:00.000+02:00</published><updated>2005-05-10T15:12:40.430+02:00</updated><title type='text'>Note to self: cleanup xml schemas after removing promoted properties</title><content type='html'>Ofcourse, I'm the only one having trouble with this, but I'll blog it never the less... :-)&lt;br /&gt;&lt;br /&gt;I recently (just now :p) encountered some behaviour of the Visual Studio environment for editing xml schemas installed by BizTalk Server 2004 which might lead to trouble in testing and deployment (actually, just in running my Orchestrations in general).&lt;br /&gt;&lt;br /&gt;As you probably know, BizTalk adds a nice annotation to your schemas upon promoting a property, like so:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;xs:annotation&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;xs:appinfo&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;b:properties&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;b:property&amp;nbsp;name="ns0:CorrelationToken"&amp;nbsp;xpath="/*[local-name()='Order'&amp;nbsp;and&amp;nbsp;namespace-uri()='http://www.macaw.nl/schemas/OrderProcessing']/@*[local-name()='CorrelationToken'&amp;nbsp;and&amp;nbsp;namespace-uri()='http://Macaw.General.Definitions']"&amp;nbsp;/&amp;gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/b:properties&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;/xs:appinfo&amp;gt;&lt;br /&gt;&amp;lt;/xs:annotation&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;I would expect BizTalk to remove this information once the field you actually promoted is removed from the xml schema. However, it doesn't... This causes the BizTalk runtime to try and locate the field given it's XPath in order to promote the field value to the message context. Ofcourse, the field can no longer be located, indicated with an XLANG/s exception:&lt;br /&gt;&lt;br /&gt;Uncaught exception terminated service MacawOrchestrations.Axapta.ContactPerson(85ce7703-cea4-61cc-67ed-86bfa9998e7c), instance 652d12a4-ed8e-4bca-aa58-9a065d65ca4d&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;A failure occurred while evaluating the property MacawSchemas.PropertySchema.CorrelationToken&lt;/strong&gt; against the message part data. &lt;br /&gt;&lt;br /&gt;Resolving this issue proves to be quite simple, just right-click on the rootnode, navigate to the promoted properties, select "Property Fields", and remove the promoted property manually.&lt;br /&gt;&lt;br /&gt;Just a reminder...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111573071261190732?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111573071261190732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111573071261190732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111573071261190732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111573071261190732'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/note-to-self-cleanup-xml-schemas-after.html' title='Note to self: cleanup xml schemas after removing promoted properties'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-111571885162723689</id><published>2005-05-10T11:42:00.000+02:00</published><updated>2005-05-10T11:54:11.733+02:00</updated><title type='text'>Deploying from the BizTalk Explorer contextmenu...</title><content type='html'>Having the option to deploy BizTalk elements from the Visual Studio environment is a very handy thing. However, I made the mistake of using this option to deploy into a test environment I was setting up.&lt;br /&gt;&lt;br /&gt;Visual Studio confirmed a successful deployment and I went about configuring the Orchestrations I just deployed (they were nicely visible in the BizTalk Explorer). &lt;br /&gt;&lt;br /&gt;When testing the first deployed Orchestration however, it turned out the deployment was successful, but to the end that Visual Studio had deployed the components into the GAC of the &lt;strong&gt;local&lt;/strong&gt; computer while using the &lt;strong&gt;remotely&lt;/strong&gt; configured database for registering the BizTalk components (BizTalkMgmtDb); obviously resulting in failing Orchestrations.&lt;br /&gt;&lt;br /&gt;It still means the Deploy option is a good thing, but only to the end of testing the components on the local machine. Reconfiguring the Deployment database doesn't tell Visual Studio to deploy the components to the remote machine GAC (which seems normal, installing to a remote GAC isn't supported to the best of my knowledge)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111571885162723689?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111571885162723689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111571885162723689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111571885162723689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111571885162723689'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/deploying-from-biztalk-explorer.html' title='Deploying from the BizTalk Explorer contextmenu...'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-111565102447329737</id><published>2005-05-09T16:59:00.000+02:00</published><updated>2005-05-09T17:03:44.476+02:00</updated><title type='text'>Microsoft.XLANGs.Core.PersistenceException: Exception occurred when persisting state to the database.</title><content type='html'>Ever ran in to this kind of exception:&lt;br /&gt;&lt;br /&gt;Microsoft.XLANGs.Core.PersistenceException: Exception occurred when persisting state to the database. ---&gt; Microsoft.BizTalk.XLANGs.BTXEngine.PersistenceItemException: A batch item failed persistence &lt;br /&gt;Item-ID b668d473-774c-4fae-979b-90fff5444ff5 &lt;br /&gt;OperationType MAIO_CommitBatch &lt;br /&gt;Status -1061151998 &lt;br /&gt;ErrorInfo The published message could not be routed because no subscribers were found. Please use the Health and Activity Monitoring (HAT) tool to diagnose this situation.&lt;br /&gt;&lt;br /&gt;I just ran into this while testing an Orchestration I have build. I had encountered it before, but didn't document / remember the solution. &lt;br /&gt;&lt;br /&gt;f.m.i. (for my info): &lt;strong&gt;It turns out this exception will occur if you're calling another Orchestration, which isn't in an Enlisted state&lt;/strong&gt;... I'll try to remember next time... :-|&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111565102447329737?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111565102447329737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111565102447329737' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111565102447329737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111565102447329737'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/microsoftxlangscorepersistenceexceptio.html' title='Microsoft.XLANGs.Core.PersistenceException: Exception occurred when persisting state to the database.'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111557637176843721</id><published>2005-05-07T10:58:00.000+02:00</published><updated>2005-05-08T20:20:30.223+02:00</updated><title type='text'>There's something about Parties</title><content type='html'>Trying to implement an Order Fulfillment example BizTalk application for the Northwind database, I ran into some Party resolution issues. It turns out Parties cannot have names with any of the following characters in them:&lt;br /&gt;&lt;br /&gt;`~!@#$%^&amp;*()+=[]{}|;"'&lt;&gt;,?&lt;br /&gt;As the Northwind database has a Suppliers table consisting of a default of 29 suppliers with various 'complex' names, e.g.:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cooperativa de Quesos 'Las Cabras';&lt;/li&gt;&lt;li&gt;Forêts d'érables;&lt;/li&gt;&lt;li&gt;and Heli Süßwaren GmbH &amp; Co. KG;&lt;/li&gt;&lt;/ul&gt;I wasn't able to create parties to fulfill my orders from the Northwind database based on the Supplier companyname.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111557637176843721?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111557637176843721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111557637176843721' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111557637176843721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111557637176843721'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/theres-something-about-parties.html' title='There&apos;s something about Parties'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-111503433840167076</id><published>2005-05-02T13:43:00.000+02:00</published><updated>2005-05-02T13:45:38.403+02:00</updated><title type='text'>BizTalk Performance Charateristics online</title><content type='html'>Read all about BizTalk Server 2004 performance characteristics at &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/BTS_2004WP/html/04d20926-20d2-4098-b701-52238a267eba.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/BTS_2004WP/html/04d20926-20d2-4098-b701-52238a267eba.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's a great read!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111503433840167076?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111503433840167076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111503433840167076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111503433840167076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111503433840167076'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/05/biztalk-performance-charateristics.html' title='BizTalk Performance Charateristics online'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-111470347167956688</id><published>2005-04-28T17:37:00.000+02:00</published><updated>2005-04-28T17:51:11.680+02:00</updated><title type='text'>Untyped Message Processing and external projects</title><content type='html'>Have you ever used untyped messages send to a general Orchestration (error handling, general processing, etc)? &lt;br /&gt;&lt;br /&gt;If you have, you've probably casted the outbound message into a variable of type System.Xml.XmlDocument and passed that to the called or started Orchestration... &lt;br /&gt;&lt;br /&gt;However, if you factor out the general orchestration to enable reuse from other projects, you are no longer able to do this. &lt;br /&gt;&lt;br /&gt;Instead, BizTalk wraps your Orchestration parameter into a type called &lt;em&gt;Microsoft.XLANGs.RuntimeTypes.XmlDocumentSerializationProxy&lt;/em&gt;, which enables serialization of type &lt;em&gt;System.Xml.XmlDocument&lt;/em&gt;, as it's missing the &lt;em&gt;Serializable&lt;/em&gt; attribute. It does this outbound only, so you need to perform a few steps to get your Orchestration call back online:&lt;br /&gt;&lt;br /&gt;1) reference Microsoft.XLANGs.RuntimeTypes.dll from the Microsoft BizTalk Server 2004 installation folder into both projects;&lt;br /&gt;&lt;br /&gt;2) change your general Orchestration (the one factored out) to have a your Orchestration parameter as type &lt;em&gt;Microsoft.XLANGs.RuntimeTypes.XmlDocumentSerializationProxy&lt;/em&gt; instead of &lt;em&gt;System.Xml.XmlDocument&lt;/em&gt; (otherwise, the types won't match and VS.NET won't let you compile ;-) );&lt;br /&gt;&lt;br /&gt;3) change your calling Orchestration to have a variable of type &lt;em&gt;Microsoft.XLANGs.RuntimeTypes.XmlDocumentSerializationProxy&lt;/em&gt; instead of &lt;em&gt;System.Xml.XmlDocument&lt;/em&gt; and set your Expression shape to do this:&lt;br /&gt;&lt;br /&gt;GeneralConfirmation = &lt;strong&gt;new Microsoft.XLANGs.RuntimeTypes.XmlDocumentSerializationProxy(&lt;/strong&gt;ConfirmAccount&lt;strong&gt;)&lt;/strong&gt;;&lt;br /&gt;&lt;br /&gt;3) compile the external referenced project;&lt;br /&gt;&lt;br /&gt;4) reconfigure your Call Orchestration or Start Orchestration shape.&lt;br /&gt;&lt;br /&gt;Now your Orchestration will function correctly, just like before. The difference being able to reuse the general Orchestration originally contained within the same project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111470347167956688?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111470347167956688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111470347167956688' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111470347167956688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111470347167956688'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/04/untyped-message-processing-and.html' title='Untyped Message Processing and external projects'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111459901013239679</id><published>2005-04-27T12:44:00.000+02:00</published><updated>2005-04-27T12:50:10.133+02:00</updated><title type='text'>Suppressing automatic message splitting</title><content type='html'>If you have BizTalk automatically splitting up inbound messages and want to suppress this behaviour, set the maxOccurs property to "*" (unbounded) for any repeating structure you don't want BizTalk splitting up on:&lt;br /&gt;&lt;br /&gt;&amp;lt;xs:element name="Journal"&amp;gt;&lt;br /&gt; ...&lt;br /&gt;&amp;lt;/xs:element&amp;gt;&lt;br /&gt;&lt;br /&gt;becomes:&lt;br /&gt;&lt;br /&gt;&amp;lt;xs:element &lt;b&gt;maxOccurs="unbounded"&lt;/b&gt; name="Journal"&amp;gt;&lt;br /&gt; ...&lt;br /&gt;&amp;lt;/xs:element&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111459901013239679?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111459901013239679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111459901013239679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111459901013239679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111459901013239679'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/04/suppressing-automatic-message.html' title='Suppressing automatic message splitting'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-111459720718899296</id><published>2005-04-27T12:19:00.000+02:00</published><updated>2005-04-27T12:20:07.190+02:00</updated><title type='text'>BizTalk Performance - dedicated blog from Microsoft!</title><content type='html'>Finally, an answer to many customer questions....: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/biztalkperformance/"&gt;http://blogs.msdn.com/biztalkperformance/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111459720718899296?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111459720718899296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111459720718899296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111459720718899296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111459720718899296'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/04/biztalk-performance-dedicated-blog.html' title='BizTalk Performance - dedicated blog from Microsoft!'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-111246179012160998</id><published>2005-04-02T19:02:00.000+02:00</published><updated>2005-04-02T19:09:50.123+02:00</updated><title type='text'>Kind words from Microsoft, I'm a MVP awardee</title><content type='html'>I just wanted to let everyone know I've been awarded the Microsoft Most Valuable Professional award for BizTalk Server. I couldn't be happier at the moment :-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111246179012160998?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111246179012160998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111246179012160998' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111246179012160998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111246179012160998'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/04/kind-words-from-microsoft-im-mvp.html' title='Kind words from Microsoft, I&apos;m a MVP awardee'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111107872301692229</id><published>2005-03-17T17:54:00.000+01:00</published><updated>2005-03-17T18:38:30.483+01:00</updated><title type='text'>XmlCompleteValidator pipeline component...</title><content type='html'>This simple pipeline replacement for the standard XmlValidator component enables users to aggregate validation errors within inbound messages based on defines schemas, just like the XmlValidator component out of the box in BizTalk Server 2004. Instead of the XmlValidator component, this component validates the entire message, reporting only after processing the whole. This way, you know right away of all validation errors within a message to be processed instead of fixing one error, only to discover another, and yet another, ...&lt;br /&gt;&lt;br /&gt;A lot of the code within this component has been 'borrowed' from the original XmlValidator component.&lt;br /&gt;&lt;br /&gt;Hope you enjoy it, it's sourcecode is included as always (only sourcecode, you need to compile it yourself). It has a readme.txt within the archive, please be sure to read it before trying to use it.&lt;br /&gt;&lt;br /&gt;it's located &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=fce10540-e547-459d-b995-f1e3cc96a25f"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111107872301692229?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111107872301692229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111107872301692229' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111107872301692229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111107872301692229'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/03/xmlcompletevalidator-pipeline.html' title='XmlCompleteValidator pipeline component...'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-111001471299403888</id><published>2005-03-05T09:45:00.000+01:00</published><updated>2005-03-05T10:25:12.996+01:00</updated><title type='text'>Document contents validation</title><content type='html'>Lots of customers are asking for a way to validate their document structure based on contents, not merely the structure of the document as BizTalk does by default. &lt;br /&gt;&lt;br /&gt;Here's a simple method of achieving document validation within BizTalk Server 2004. Mind you, there is ofcourse a performance trade-off, as BizTalk needs to load the entire message into a DOM tree in order to perform this validation.&lt;br /&gt;&lt;br /&gt;First, make sure your schemas actually define your datatypes in a correct manner. It's easy to define the structure and think you're done, but you rarely are. Another hint is to use include schemas, as the actual data definitions are quite frequently re-used, and this promotes definition re-use. An example for a dutch zipcode definition:&lt;blockquote&gt;&lt;br /&gt;&amp;lt;?xml&amp;nbsp;version="1.0"&amp;nbsp;encoding="utf-16"?&amp;gt;&lt;br /&gt;&amp;lt;xs:schema&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;xmlns:basetypes="http://basetypes.macaw.nl"&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns="http://SchemaValidation.inputSchema"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:b="http://schemas.microsoft.com/BizTalk/2003"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;targetNamespace="http://schemas.macaw.nl/samples/inputSchema"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:xs="http://www.w3.org/2001/XMLSchema"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;b&gt;&amp;lt;xs:import&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;schemaLocation=".\definitions.xsd"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;namespace="http://basetypes.macaw.nl"&amp;nbsp;/&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;xs:annotation&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:appinfo&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;b:references&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;b:reference&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;targetNamespace="http://basetypes.macaw.nl"&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/b:references&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xs:appinfo&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/xs:annotation&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;name="zipcode"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:complexType&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:sequence&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&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;minOccurs="0"&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;&lt;b&gt;ref="basetypes:dutch-zipcode"&lt;/b&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/xs:element&amp;gt;&lt;br /&gt;&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;followed by the include schema defining:&lt;br /&gt;&lt;blockquote&gt;&amp;lt;?xml&amp;nbsp;version="1.0"&amp;nbsp;encoding="utf-16"?&amp;gt;&lt;br /&gt;&amp;lt;xs:schema&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;xmlns="http://basetypes.macaw.nl"&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:b="http://schemas.microsoft.com/BizTalk/2003"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;attributeFormDefault="unqualified"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;elementFormDefault="qualified"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;targetNamespace="http://basetypes.macaw.nl"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;version="200401"&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns:xs="http://www.w3.org/2001/XMLSchema"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;xs:element&amp;nbsp;name="dutch-zipcode"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:simpleType&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xs:restriction&amp;nbsp;base="xs:string"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;b&gt;xs:pattern&amp;nbsp;value="^[1-9]{1}[0-9]{3}&amp;nbsp;?[A-Z]{2}$"&lt;/b&gt;&amp;nbsp;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xs:restriction&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xs:simpleType&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/xs:element&amp;gt;&lt;br /&gt;&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;As you can see, the dutch-zipcode has a pattern defined, which is a regular expression comforming to the format of the dutch zipcode. This ensures any zipcode defined within the zipcode element conforms to this specification. However, BizTalk only checks the contents of messages after specifically being instructed to do so, as it pertains a performance trade-off. Telling BizTalk Server 2004 to check the actual contents of inbound messages can easily be achieved by creating a custom pipeline within which you drop an out-of-the-box pipeline component called the XmlValidator:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.staticvoid.demon.nl/xmlvalidation.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Ensure you use the design-time property called "Document schemas" to designate our schema as the target for validation.&lt;br /&gt;&lt;br /&gt;Deploy the pipeline, configure your ports, drop a correct message into the defined folder and see that it is processed. &lt;br /&gt;Subsequently, drop a message into the folder not adhering to the regular expression defined within the pattern and see BizTalk Server 2004 rejecting the message and setting it's state to "Suspended - Not Resumable" combined with an event in the eventlog telling you why it was denied.&lt;br /&gt;&lt;br /&gt;That's all, &lt;b&gt;along with my apologies for being absent for such a long time!&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-111001471299403888?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/111001471299403888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=111001471299403888' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111001471299403888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/111001471299403888'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2005/03/document-contents-validation.html' title='Document contents validation'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-110314386452996836</id><published>2004-12-15T21:38:00.000+01:00</published><updated>2004-12-15T21:52:40.443+01:00</updated><title type='text'>BizTalk Explorer v1.31</title><content type='html'>OK, it seems all I have time for these days (unfortunately!) is an occasional update to BizTalk Explorer. v1.31 has some bugfixes and new functionality, both reported and requested by people using the product (&lt;em&gt;thanks Niklas, Richard, Hugo, et al!&lt;/em&gt;). This update includes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;strong&gt;&lt;li&gt;new: delete host (DEL key and contextmenu)&lt;/li&gt;&lt;li&gt;new: double-click on items opens "edit" dialog&lt;/li&gt;&lt;/strong&gt;&lt;br /&gt;&lt;li&gt;bugfix: right-clicking the host and selecting "Save config" yielded an exception&lt;/li&gt;&lt;li&gt;bugfix: save as XML for log didn't allow correct cancelling&lt;/li&gt;&lt;li&gt;bugfix: import binding files didn't skip file if it was invalid due to editing (deserializing)&lt;/li&gt;&lt;li&gt;bugfix: the BizTalkServerSelector didn't function correctly. fixed, now defaults to locally configured server and database if nothing is done.&lt;/li&gt;&lt;/ul&gt;As always, I hope you enjoy it and await your comments!&lt;br /&gt;&lt;br /&gt;Download it &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=c2bd2cac-6fd8-4ee5-b524-4dcba88f7464"&gt;here&lt;/a&gt; (GotDotNet) or &lt;a href="http://www.staticvoid.demon.nl/biztalkexplorerv1.31.zip"&gt;here&lt;/a&gt; (Personal webspace)&lt;br /&gt;&lt;br /&gt;Request: 1 person has reported editing an address of a receivelocation / send port doesn't work if Visual Studio is not installed. I removed Visual Studio and didn't encounter this problem. If anyone else has this issue, please contact me so I can look in to it. Thanks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-110314386452996836?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/110314386452996836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=110314386452996836' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/110314386452996836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/110314386452996836'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/12/biztalk-explorer-v131.html' title='BizTalk Explorer v1.31'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-110165944694207812</id><published>2004-11-28T17:17:00.000+01:00</published><updated>2004-11-28T22:35:32.650+01:00</updated><title type='text'>BizTalk Explorer v1.30</title><content type='html'>So, I was reading many questions in the newsgroups about how to easily "copy" a running BizTalk environment from one place and deploy it somewhere else, without taking the running machine offline. &lt;br /&gt;&lt;br /&gt;BizTalk Explorer v1.30 supports this option ("Deployment" -&gt; "Copy BizTalk environment") by allowing you to specify a BizTalk database, after which it:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;copies the assemblies used within that environment&lt;/li&gt;&lt;li&gt;copies the support libraries linked to these assemblies (non-BizTalk and non-Microsoft)&lt;/li&gt;&lt;li&gt;exports the bindings within the server (assembly related and non-bound)&lt;/li&gt;&lt;li&gt;creates a file called "deploy.bat", which performs all necessary actions to deploy the BizTalk environment somewhere else&lt;/li&gt;&lt;li&gt;zips up the files and places it in a folder of your choosing&lt;/li&gt;&lt;/ul&gt;Once these steps have been completed, simply copying the zip file to another server with BizTalk installed (and having gacutil/btsdeploy in the path) and running "deploy.bat" should re-create the entire BizTalk environment.&lt;br /&gt;&lt;br /&gt;Let me know of any issues, as I think this is a very handy feature and it should be well tested.&lt;br /&gt;&lt;br /&gt;Download the new BizTalk Explorer v1.30 from &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=c2bd2cac-6fd8-4ee5-b524-4dcba88f7464"&gt;GotDotNet&lt;/a&gt; or from &lt;a href="http://www.staticvoid.demon.nl/biztalkexplorerv1.30.zip"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-110165944694207812?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/110165944694207812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=110165944694207812' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/110165944694207812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/110165944694207812'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/11/biztalk-explorer-v130.html' title='BizTalk Explorer v1.30'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-110035674460352323</id><published>2004-11-13T15:29:00.000+01:00</published><updated>2004-11-13T18:43:16.416+01:00</updated><title type='text'>BizTalk Explorer v1.27</title><content type='html'>I've had some requests on my blog and per e-mail for some changes and got some bug reports (THANKS!)&lt;br /&gt;&lt;br /&gt;Additions/Changes in v1.27:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;layout: center initial "add database" dialog on screen&lt;/li&gt;&lt;li&gt;bugfix: alternate connection information not used in DatabaseSelector&lt;/li&gt;&lt;li&gt;new: database selector no longer tries to locate databases automatically, only local database is retrieved (from registry)&lt;/li&gt;&lt;li&gt;new: database selector now has a manual search button to retrieve biztalk databases&lt;/li&gt;&lt;li&gt;new: items are sorted alphabetically within the tree&lt;/li&gt;&lt;li&gt;bugfix: enlisted parties correctly removed, enlisted orchestrations commited before removing assembly&lt;/li&gt;&lt;/ul&gt;It's on &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=c2bd2cac-6fd8-4ee5-b524-4dcba88f7464"&gt;GotDotNet&lt;/a&gt;, and &lt;a href="http://www.staticvoid.demon.nl/biztalkexplorerv1.27.zip"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As always, let me know of any requests, bug reports or general rants!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-110035674460352323?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/110035674460352323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=110035674460352323' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/110035674460352323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/110035674460352323'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/11/biztalk-explorer-v127.html' title='BizTalk Explorer v1.27'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-109994998626370044</id><published>2004-11-08T22:27:00.000+01:00</published><updated>2004-11-08T22:43:18.990+01:00</updated><title type='text'>BizTalk Explorer v1.26 - cool changes</title><content type='html'>Sorry, all I have time for these days seems to be BizTalk Explorer... If you have questions or comments regarding other BizTalk areas or would like me to spend some time explaining a given section of BizTalk Server 2004, please don't hesitate to ask...&lt;br /&gt;&lt;br /&gt;So here's another update to the BizTalk Explorer tool. New in this release (it's undergone quite some rebuilding internally):&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;fixed bug with starting/stopping orchestrations (invalid parameter, no change)&lt;/li&gt;&lt;li&gt;multiple selection possibility for elements (deleting, starting, exporting, enlisting, killing, etc)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;quick-edit feature for receive locations and sendports&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;I've uploaded all releases to &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=c2bd2cac-6fd8-4ee5-b524-4dcba88f7464"&gt;GotDotNet&lt;/a&gt; as well, but you can download a copy of v1.26 &lt;a href="http://www.staticvoid.demon.nl/biztalkexplorerv1.26.zip"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Enjoy! (Let me &lt;a href="http://martijnh.blogspot.com/2004/07/e-mail-address.html"&gt;know&lt;/a&gt; what you think..)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109994998626370044?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109994998626370044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109994998626370044' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109994998626370044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109994998626370044'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/11/biztalk-explorer-v126-cool-changes.html' title='BizTalk Explorer v1.26 - cool changes'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109923899850206823</id><published>2004-10-31T17:03:00.000+01:00</published><updated>2004-10-31T17:12:38.293+01:00</updated><title type='text'>BizTalk Explorer v1.25</title><content type='html'>New in this release:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;removing all Send Ports (Send Ports treeitem)&lt;/li&gt;&lt;li&gt;removing all Receive Ports (Receive Ports treeitem)&lt;/li&gt;&lt;li&gt;removing all Receive Locations for a given Receive Port&lt;/li&gt;&lt;/ul&gt;Thanks to Niklas Engfelt for suggesting these little gems.&lt;br /&gt;&lt;br /&gt;Please not that it's not possible to remove the primary Receive Location for a given Receive Port so that will not be deleted.&lt;br /&gt;&lt;br /&gt;Hope you enjoy it!&lt;br /&gt;&lt;br /&gt;Download it &lt;a href="http://www.staticvoid.demon.nl/biztalkexplorerv1.25.zip"&gt;here&lt;/a&gt; (GotDotNet is down again...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109923899850206823?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109923899850206823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109923899850206823' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109923899850206823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109923899850206823'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/10/biztalk-explorer-v125.html' title='BizTalk Explorer v1.25'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109830085129382781</id><published>2004-10-20T21:29:00.000+02:00</published><updated>2004-10-20T21:35:20.450+02:00</updated><title type='text'></title><content type='html'>BizTalk Explorer v1.24 is here!&lt;br /&gt;&lt;br /&gt;Major updates include:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ordered deployment of assemblies&lt;/li&gt;&lt;li&gt;Starting/stopping all published orchestrations on host level (make sure you bind them first...)&lt;/li&gt;&lt;li&gt;some bugfixes&lt;/li&gt;&lt;/ul&gt;One of the most reported bugs was that when BizTalk Explorer started the second time, it reported "Reference not set to an instance of an object". This was due to the wrong use of Dotfuscator on my part and should be resolved as it isn't Dotfuscated anymore (sourcecode will be release soon)&lt;br /&gt;&lt;br /&gt;The executable can be found &lt;a href="http://www.staticvoid.demon.nl/biztalkexplorerv1.24.zip"&gt;here&lt;/a&gt;, due to GotDotNet not performing anymore... I will upload this release once GotDotNet is up again.&lt;br /&gt;&lt;br /&gt;As always, I'd be interested to hear of any issues with this release!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109830085129382781?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109830085129382781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109830085129382781' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109830085129382781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109830085129382781'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/10/biztalk-explorer-v1.html' title=''/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-109692702302551327</id><published>2004-10-04T23:51:00.000+02:00</published><updated>2004-10-04T23:57:03.026+02:00</updated><title type='text'>BizTalk Explorer v1.23</title><content type='html'>So version 1.23 sees the light. Some new enhancements in this release, as well as some bugfixes:&lt;ol&gt;&lt;li&gt;send ports didn't work as expected&lt;/li&gt;&lt;br /&gt;&lt;li&gt;exporting unbound assemblies is now possible (from the Assemblies node)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;editing binding information upon importing to different servers (for each server)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;exporting host configuration database xml&lt;/li&gt;&lt;br /&gt;&lt;li&gt;some more minor things&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;Enjoy!&lt;/strong&gt; let me know of anything you come across!&lt;br /&gt;&lt;br /&gt;For those who don't have the GotDotNet workspace ready, you can get the releases &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=c2bd2cac-6fd8-4ee5-b524-4dcba88f7464"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109692702302551327?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109692702302551327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109692702302551327' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109692702302551327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109692702302551327'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/10/biztalk-explorer-v123.html' title='BizTalk Explorer v1.23'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109680855744989932</id><published>2004-10-03T14:38:00.000+02:00</published><updated>2005-11-26T14:05:51.886+01:00</updated><title type='text'>BizTalkInstaller: a BTSICustomAction replacement</title><content type='html'>In developing with BizTalk, I've had clients needing simple to use MSI packages instead of "complex" NAnt scripts. Creating MSI packages to deploy a BizTalk solution is fairly simple, but using the BTSICustomAction to deploy the contained assemblies and bindings is somewhat of a less trivial task.&lt;br /&gt;&lt;br /&gt;The issues my clients encountered when using MSI packages created using BTSICustomAction are:&lt;ul&gt; &lt;li&gt;Inability to edit binding files before actual deployment, hence needing multiple MSI packages for each server configuration&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Not all assemblies are removed when uninstalling, due to these assemblies being either used by active/suspended instances of Orchestrations or having bindings with Orchestrations not in unenlisted state.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;No feedback within the MSI packages about the deployment of the contained components. Having to manually iterate through all logfiles created.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Acting on this information, I've decided to create a replacement Custom Action library, which allows users to edit bindings before deploying them, asks whether or not to kill running Orchestrations upon uninstall to ensure proper removal of affected assemblies and provides feedback about what went on during deployment/removal.&lt;br /&gt;&lt;br /&gt;The Custom Action I've created is used in exactly the same manner the BTSICustomAction is used, it takes a parameter DEPLOY, which, when set to true tells the BizTalkInstaller class to actually deploy (install the assemblies and run the binding files) the components. If the parameter is missing or not set to "true", contained assemblies are installed into the GAC, but no binding files are executed.&lt;br /&gt;&lt;br /&gt;Also, when uninstalling, all files installed without DEPLOY=true will still be checked for any bindings which might keep them from being removed.&lt;br /&gt;&lt;br /&gt;Using the component is easy:&lt;ol&gt; &lt;li&gt;Create a new "Setup Project"&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Add your components to the project&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Add your exported bindings to the project&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Add the custom action BizTalkInstaller to each section in the Custom Action Editor, setting "CustomActionData" within the Install section to "/DEPLOY=true" if you want bindings to be executed, or nothing if you don't want that.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;At this stage, you're actually ready to build the Setup Project and deploy it. BTSICustomAction forced you to include two extra files within the Setup Project:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;btstd.xml (contains the standard BizTalk assembly list)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;BindingSchema.xsd (contains the schema information for binding files)&lt;/li&gt;&lt;/ul&gt;I've added those two files to the BizTalkInstaller as Embedded Resource, so there's no need to include those files in your Setup Project. You, however, still need to include BTSIAssemblyOrder.dll in your Setup Project.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Note: altering binding files before deployment should be used with caution, as you have full control of each aspect of the binding file.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATED: NEW DOWNLOAD LOCATION&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The Custom Action library can be downloaded &lt;a href="http://www.tachyons.demon.nl/BizTalkInstaller.zip"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As always, full sourcecode is included and feedback is very welcomed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109680855744989932?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109680855744989932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109680855744989932' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109680855744989932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109680855744989932'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/10/biztalkinstaller-btsicustomaction.html' title='BizTalkInstaller: a BTSICustomAction replacement'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109657369620884221</id><published>2004-09-30T21:32:00.000+02:00</published><updated>2005-11-26T14:07:11.916+01:00</updated><title type='text'>Testing the unzipcomponent sample</title><content type='html'>Recently, some people have requested a usage example of the UnzipComponent pipeline component example posted &lt;a href="http://martijnh.blogspot.com/2004/08/decompression-pipeline-component-zip.html"&gt;here&lt;/a&gt;. I've create a sample solution, containing the UnZipComponent itself and a BizTalk project consisting of a simple receive pipeline witht the UnZipComponent in it.&lt;br /&gt;&lt;br /&gt;The UnZipComponent uses a build action to copy itself to "C:\Program Files\Microsoft BizTalk Server 2004\Pipeline Components", so if you have installed BizTalk Server 2004 somewhere else, please alter the location by right-clicking the project, choosing "Build Events", navigating to "Post-build Event Commmand Line" and pressing the three dots button on the right.&lt;br /&gt;&lt;br /&gt;A binding file has been included which you can import with the BizTalk Deployment Wizard or from the command-line using "btsdeploy.exe" from the BizTalk Server 2004 installation folder.&lt;br /&gt;&lt;br /&gt;The binding file contains folder references, which probably don't match your testbed setup. Alter them after importing them by using BizTalk Explorer (whichever version :p)&lt;br /&gt;&lt;br /&gt;The sample project does nothing other than decompressing the inbound zipfile and submitting 1 message for each file within the zipfile. I've included a file called "test.zip", which contains 2 simple XML files consisting of very interesting data, which will be put into the output folder configured. Nothing else.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATED: NEW DOWNLOAD LOCATION&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The sample project can be found &lt;a href="http://www.tachyons.demon.nl/UnzipSampleProject.zip"&gt;here&lt;/a&gt;. (Don't forget to alter the AssemblyInfo.cs and project properties of the BizTalk project to refer to your own strong name key file.)&lt;br /&gt;&lt;br /&gt;Please remember that the btsntsvc.exe process (the BizTalk service) locks the pipeline component when in use. So if you alter anything, stop the service, compile and start the service, otherwise the post-built event will fail)&lt;br /&gt;&lt;br /&gt;One more thing... Pipeline components should normally not be within the same solution as the projects that use these components, as the components get loaded by the pipeline designer and locked, so compilation would become rather hard...&lt;br /&gt;&lt;br /&gt;Hope you enjoy this!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109657369620884221?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109657369620884221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109657369620884221' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109657369620884221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109657369620884221'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/09/testing-unzipcomponent-sample.html' title='Testing the unzipcomponent sample'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109657240105966260</id><published>2004-09-30T21:14:00.000+02:00</published><updated>2004-09-30T22:09:37.816+02:00</updated><title type='text'>Exporting bindings</title><content type='html'>As there have been numerous requests by e-mail for this, I'll explain the ways of exporting binding information from the BizTalk Management database.&lt;br /&gt;&lt;br /&gt;Binding files define the connection between components within the BizTalk environment, they define send/receive ports, groups, orchestrations properties, etc.&lt;br /&gt;&lt;br /&gt;To export binding information, you have some options:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt; &lt;li&gt;Use the BizTalk Deployment Wizard from the Microsoft Biztalk Server 2004 start menu and follow the steps (choose "Export BizTalk assembly binding file, choose the server, choose the appropriate assembly, the location of the exported binding and press Finish)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Utilize the command-line application "btsdeploy", located within the BizTalk Server 2004 installation folder, e.g.:&lt;br /&gt; &lt;blockquote&gt;C:\Program Files\Microsoft BizTalk Server 2004&gt;&lt;strong&gt;btsdeploy export name="UnzipSampleProject" version="1.0.0.0" culture="neutral" publickeytoken="8321b1fe6c55c81a" binding="unzipsampleproject.xml"&lt;/strong&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Use BizTalk Explorer (my version), found &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=c2bd2cac-6fd8-4ee5-b524-4dcba88f7464"&gt;here&lt;/a&gt;. Right-click the assembly you'd like bindings to be exported for, choose a folder to export to. The binding files will be named after the assembly and postfixed with "_export" and ".log".&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109657240105966260?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109657240105966260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109657240105966260' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109657240105966260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109657240105966260'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/09/exporting-bindings.html' title='Exporting bindings'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-109638619050423584</id><published>2004-09-28T17:39:00.000+02:00</published><updated>2004-09-28T17:51:51.130+02:00</updated><title type='text'>BizTalk Explorer v1.1</title><content type='html'>I've updated my BizTalk Explorer. You can download it &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=c2bd2cac-6fd8-4ee5-b524-4dcba88f7464"&gt;here&lt;/a&gt;. New in this release:&lt;ul&gt;&lt;li&gt;Deployment, easily add your BizTalk assemblies to multiple servers at once&lt;/li&gt;&lt;li&gt;Altered the "browse for BizTalk database" dialog&lt;/li&gt;&lt;li&gt;Numerous bugfixes (thanks for the feedback!)&lt;/li&gt;&lt;/ul&gt;Hope you like it, &lt;a href="http://martijnh.blogspot.com/2004/07/e-mail-address.html"&gt;let me know&lt;/a&gt;!&lt;br /&gt;If you encounter a diagnostics screen on startup, remove the config file from %userprofile%\local Settings\Application Data (BizTalkExplorer.config)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109638619050423584?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109638619050423584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109638619050423584' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109638619050423584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109638619050423584'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/09/biztalk-explorer-v11.html' title='BizTalk Explorer v1.1'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109603232757272386</id><published>2004-09-24T15:21:00.000+02:00</published><updated>2004-09-24T15:25:27.573+02:00</updated><title type='text'>Pipeline Component Wizard v1.32</title><content type='html'>Small update. Thanks to feedback from Aman, I discovered that SchemaWithNone and SchemaList were not functioning correctly. I fixed the issue for SchemaWithNone, it works fine now. However, for SchemaList, you need some functionality to store the selected schemas within the PropertyBag as a string, and the CodeDOM I was working on didn't quite cut it, so I decided to let it up to you to implement a simple StringBuilder to store the selected Schemas from the SchemaList.&lt;br /&gt;&lt;br /&gt;version 1.32 can be downloaded &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=1d4f7d6b-7d27-4f05-a8ee-48cfcd5abf4a"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109603232757272386?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109603232757272386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109603232757272386' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109603232757272386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109603232757272386'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/09/pipeline-component-wizard-v132.html' title='Pipeline Component Wizard v1.32'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-109589188650226790</id><published>2004-09-22T23:35:00.000+02:00</published><updated>2004-09-23T00:24:46.503+02:00</updated><title type='text'>BizTalk Explorer v1.0</title><content type='html'>OK, so having a lot of clients asking me for a &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=c2bd2cac-6fd8-4ee5-b524-4dcba88f7464"&gt;BizTalk Explorer UI&lt;/a&gt; without the need to install Visual Studio .NET 2003, I've (re)written BizTalk Explorer outside. It has support for:&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Undeployment of assemblies, including removing any binding information for pipelines, mappings, etc.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Exporting bindings posed by Assemblies&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Binding, (un)enlisting, starting, stopping and killing Orchestration(s) (instances)&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Adding, removing and configuring Parties&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Adding, removing, (un)enlisting, starting, stopping and configuring Send Port Groups, including send ports which belongs to those groups&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Adding, removing, (un)enlisting, starting, stopping and configuring Send Ports, including filter expressions (including promoted properties for your own documents), and inbound/outbound mappings&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Adding, removing, and configuring Receive Ports, again including filters and maps&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Adding, removing, enabling, disabling and configuring Receive Locations&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;For now, expect and please report bugs, as it's an initial release. More features to come, &lt;em&gt;feel free to request any&lt;/em&gt;! I hope to make this utility BizTalk Explorer on steroids...&lt;br /&gt;&lt;br /&gt;The sourcecode will be made available soon, but I've got some more work to do before I think it's stable and elegant (and documented?) enough to release to the general public.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Please&lt;/strong&gt; let me know what you &lt;a href="http://martijnh.blogspot.com/2004/07/e-mail-address.html"&gt;think&lt;/a&gt;. I've spend a great deal of time on this application and would love feedback, including bugs, flames, comments, suggestions, the works!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;You can download the application &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=c2bd2cac-6fd8-4ee5-b524-4dcba88f7464"&gt;here&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;O, by the way, while I was working on this application, I got in contact with a great guy, which has also released a utility that matches mine. His name is Paul Somers, and he has won (congrats!) the BizTalk Server competition (Next time, gadget, next time!) (Scott, please adjust the Dutch gaming laws, so we can join the competition next time around...:-p). Check out his version of the tool &lt;a href="http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=992ca223-553c-475a-ac87-da7ae2c9016a"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hope you enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109589188650226790?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109589188650226790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109589188650226790' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109589188650226790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109589188650226790'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/09/biztalk-explorer-v10.html' title='BizTalk Explorer v1.0'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-109549036085193305</id><published>2004-09-18T08:44:00.000+02:00</published><updated>2004-09-18T08:52:40.850+02:00</updated><title type='text'>Using the Pipeline Component Wizard</title><content type='html'>Lately, I've been getting lots of e-mail from people asking me how, after installing the Pipeline Component Wizard, they can actually use it. To do so:&lt;ul&gt;&lt;br /&gt; &lt;li&gt;Open up Visual Studio .NET 2003&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Press CTRL+SHIFT+N to create a new Project&lt;/li&gt;&lt;br /&gt; &lt;li&gt;The New Project dialog appears, containing a tree to the left of the screen, called "Project Types".&lt;/li&gt;&lt;br /&gt; &lt;li&gt;In the project types tree, choose "BizTalk Projects"&lt;/li&gt;&lt;br /&gt; &lt;li&gt;In the templates screen, on the right of the dialog, the available BizTalk templates appear.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Within the templates screen, choose "BizTalk Server Pipeline Component Project"&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Type a name and location for your new project, and press OK&lt;/li&gt;&lt;br /&gt; &lt;li&gt;The wizard will appear, follow the screens and choose your options for the new Pipeline Component you're about to build.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;After finishing the wizard, it will generate the solution, project files, resources, assemblyinfo and code for the options you selected within the configuration pages of the wizard.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;You're done, now a fully functional pipeline component according to your specifications has come to life, implement the code you'd like the component to perform, compile it, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109549036085193305?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109549036085193305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109549036085193305' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109549036085193305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109549036085193305'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/09/using-pipeline-component-wizard.html' title='Using the Pipeline Component Wizard'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109485415430374178</id><published>2004-09-10T23:58:00.000+02:00</published><updated>2006-06-05T17:01:04.240+02:00</updated><title type='text'>Property editors &amp; pipeline components</title><content type='html'>There have been a lot of questions in the newsgroups recently regarding custom type editors within pipeline components. &lt;br /&gt;&lt;br /&gt;I've created a sample component in which you choose which database you'd like to connect to and subsequently choose a customer the pipeline component is specific to. These kind of properties could be used to perform customer specific actions within a pipeline component. &lt;br /&gt;&lt;br /&gt;Currently, the component implements a UITypeEditor derivement to implement it's editing functionality for choosing a customer. It uses the NorthWind database within the choosen server, and has very little error checking to see whether or not the DBMS exists, etc. &lt;br /&gt;&lt;br /&gt;However, it demonstrates the purpose of custom editors for your properties, besides the obvious SchemaWithNone and SchemaList which are already supplied within Microsoft.BizTalk.Component.Utilities.dll and within my Pipeline Component Wizard.&lt;br /&gt;&lt;br /&gt;Now for a screenshot, as it usually clarifies a lot (I've removed a portion of the connection string configured):&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.staticvoid.demon.nl/customerspecificcomponent.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;The component can be downloaded &lt;a href="http://www.tachyons.demon.nl/CustomerSpecificComponent.zip"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please note this:&lt;br /&gt;&lt;br /&gt;1) As BizTalk uses a component called ComponentObjectWrapper to wrap the actual object being handled within the pipeline component editor, and you simply cannot reference Microsoft.BizTalk.PipelineEditor.dll in a decent way without breaking Visual Studio integration with BizTalk, I've applied a "dirty" reflection hack in which I at runtime retrieve the actually instantiated component from this object using reflection, like this:&lt;pre&gt;&lt;br /&gt;BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Instance;&lt;br /&gt;Type t = context.Instance.GetType();&lt;br /&gt;FieldInfo fi = t.GetField("cachedPipelineComponent", bindingFlags);&lt;br /&gt;CustomerSpecificComponent instance = fi.GetValue(context.Instance) as CustomerSpecificComponent;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;It's a dirty way to get to the object, but it means I don't have to reference any other components and currently seems to be the only way to achieve reading another property from our design-time component.&lt;br /&gt;&lt;br /&gt;2) The project has a build event specified which should deploy the component to the GAC. If it doesn't work, please alter it to represent the location of your &lt;em&gt;gacutil&lt;/em&gt; installation.&lt;br /&gt;&lt;br /&gt;As always, all sourcecode is included, and comments are very welcome!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109485415430374178?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109485415430374178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109485415430374178' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109485415430374178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109485415430374178'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/09/property-editors-pipeline-components.html' title='Property editors &amp; pipeline components'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109432649300173308</id><published>2004-09-04T21:20:00.000+02:00</published><updated>2004-09-04T21:34:53.000+02:00</updated><title type='text'>Scripting functoids</title><content type='html'>Ever wondered how the scripting functoid generates the code to perform what you have put into the buffer, how the checking for validity is done and the methods you define are published?&lt;br /&gt;&lt;br /&gt;In reality, Microsoft.BizTalk.BaseFunctoids.InlineScriptCompiler compiles all scripting functoids to the target language. It generates an assembly by using CodeDOM and ICodeCompiler services, in about the same way as outlined in e.g. KB Q304655.&lt;br /&gt;&lt;br /&gt;Let's say we have implemented an inline script functoid which defines a C# method like this one:&lt;blockquote&gt;public string MyConcat(string param1, string param2)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return param1 + param2;&lt;br /&gt;}&lt;/blockquote&gt;The InlineScriptCompiler would generate an assembly like this:&lt;blockquote&gt;using System;&lt;br /&gt;namespace BizTalkMapper &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public class FunctoidInlineScripts {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public string MyConcat(string param1, string param2)&lt;br /&gt;&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;return param1 + param2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/blockquote&gt;Considering the above, I would argue that combining your logic into one external assembly would be better for a lot of reasons, including code re-use, documentation purposes (try using NDoc on inline script functoids :-p), functional grouping, the ability to use resources, external assemblies, etc. &lt;br /&gt;&lt;br /&gt;Just my 2 cents...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109432649300173308?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109432649300173308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109432649300173308' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109432649300173308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109432649300173308'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/09/scripting-functoids.html' title='Scripting functoids'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-109325619722816384</id><published>2004-08-23T12:07:00.000+02:00</published><updated>2004-08-23T12:18:11.670+02:00</updated><title type='text'>Writing a pipeline component in J#</title><content type='html'>Ever wondered if besides C# and VB.NET, J# could be used to create pipeline components for use in BizTalk Server 2004? It can.&lt;br /&gt;&lt;br /&gt;I've created a simple pipeline component in J#.&lt;br /&gt;&lt;br /&gt;However, due to the nature of J#, many interfaces cannot be implemented in this language. This has to do with J#'s inability to deal with &lt;em&gt;out&lt;/em&gt; parameters. As IPersistPropertyBag has an interface containing: &lt;blockquote&gt;IPersistPropertyBag.GetClassID(out System.Guid classid)&lt;/blockquote&gt;, it cannot be implemented and design-time properties have no use.&lt;br /&gt;&lt;br /&gt;Due to this and other rather big differences between C# and VB.NET on one hand and J# on the other, I won't be implementing support for J# in my Pipeline Component Wizard.&lt;br /&gt;&lt;br /&gt;The example can be downloaded &lt;a href="http://www.staticvoid.demon.nl/JSharp_Pipeline_Component_example.zip"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109325619722816384?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109325619722816384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109325619722816384' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109325619722816384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109325619722816384'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/08/writing-pipeline-component-in-j.html' title='Writing a pipeline component in J#'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109312745947953395</id><published>2004-08-21T23:22:00.000+02:00</published><updated>2004-08-22T11:55:42.773+02:00</updated><title type='text'>Update: Pipeline Component Wizard v 1.3</title><content type='html'>Sorry for the delay in posting, I've been on holiday...&lt;br /&gt;&lt;br /&gt;Another update to the Pipeline Component Wizard, this time, the following functionality has been added/changed:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1) support for code generation in both C# and VB.NET!&lt;/strong&gt;&lt;br /&gt;2) bug fixed with the defined component version not being used&lt;br /&gt;3) the designer properties is now a dropdown list, no more editing&lt;br /&gt;4) the designer properties have been expanded with two new members:&lt;br /&gt;4a) SchemaList, which allows multiple (referenced) schemas to be associated with your component (like the XmlDisassemblerComponent has)&lt;br /&gt;4b) SchemaWithNone, a dropdown listbox which allows you to associate a single referenced schema with your component (like the FlatFileDisassembler component has)&lt;br /&gt;&lt;br /&gt;There have been reports of a missing component with the installer in previous versions of the Wizard, resulting in incorrect functioning of the wizard. This was due to me accidentaly excluding the Microsoft.BizTalk.Wizard, which is needed by the Pipeline Component Wizard. Subsequently, the CustomAction failed to register the DLL. This should be fixed now.&lt;br /&gt;&lt;br /&gt;Support for other .net languages could easily be added if needed, as the CodeDOM has code has been updated to be language independent.&lt;br /&gt;&lt;br /&gt;I hope you enjoy this release, please let me know of any issues, my e-mail address can be found &lt;a href="http://martijnh.blogspot.com/2004/07/e-mail-address.html"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The sourcecode for the updated pipeline component wizard can be &lt;a href="http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=1d4f7d6b-7d27-4f05-a8ee-48cfcd5abf4a"&gt;downloaded&lt;/a&gt; at GotDotNet&lt;br /&gt;&lt;br /&gt;Thanks to Jim Bowyer for creating a VB pipeline component for all to have a &lt;a href="http://home.comcast.net/~sdwoodgate/CleanVBPipeline.zip"&gt;look&lt;/a&gt; at!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109312745947953395?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109312745947953395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109312745947953395' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109312745947953395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109312745947953395'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/08/update-pipeline-component-wizard-v-13.html' title='Update: Pipeline Component Wizard v 1.3'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109248131737385655</id><published>2004-08-14T12:49:00.000+02:00</published><updated>2004-08-14T13:07:33.770+02:00</updated><title type='text'>Retrieving the matching schema for an inbound message</title><content type='html'>Ever wanted to know which schema matches your inbound message from within a pipeline component? Here's how:&lt;br /&gt;&lt;br /&gt;Reference Microsoft.BizTalk.Streaming,&lt;br /&gt;&lt;br /&gt;Use the following code within your pipeline component:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Stream orgStream = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;inmsg.BodyPart.GetOriginalDataStream();&lt;br /&gt;&lt;br /&gt;MarkableForwardOnlyEventingReadStream helperStream =&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;new MarkableForwardOnlyEventingReadStream(orgStream);&lt;br /&gt;&lt;br /&gt;IDocumentSpec docSpec = null;&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;docSpec = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pc.GetDocumentSpecByType(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Utils.GetDocType(helperStream));&lt;br /&gt;}&lt;br /&gt;catch(Exception e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Trace.WriteLine(e.ToString());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if(docSpec != null)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;XmlSchemaCollection schemaCollection = &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;docSpec.GetSchemaCollection();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// use the schema collection&lt;br /&gt;}&lt;br /&gt;else &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;Trace.WriteLine(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"No schemas found matching our inbound message");&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Now you have the schema collection which matches your document (this code is minimal, real exception handling should be added ofcourse.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Notes:&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;Utils.GetDocType does nothing more then read the stream using a XmlTextReader and combine any found namespace with the root element name. If you have DOCTYPE declarations, you could implement this yourself to avoid having to put your DTDs in %windir%\system32.&lt;br /&gt;&lt;br /&gt;The MarkableForwardOnlyEventingReadStream class helps in easily resetting the position back to where the stream was once the Utils.GetDocType is done. &lt;br /&gt;&lt;br /&gt;Hope you find this useful!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109248131737385655?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109248131737385655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109248131737385655' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109248131737385655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109248131737385655'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/08/retrieving-matching-schema-for-inbound.html' title='Retrieving the matching schema for an inbound message'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-109247527506341455</id><published>2004-08-14T10:00:00.000+02:00</published><updated>2005-11-25T12:55:52.636+01:00</updated><title type='text'>Update: undeployassembly</title><content type='html'>I've updated my undeployassembly command line utility for a few reasons:&lt;br /&gt;&lt;br /&gt;added support for /a switch, removing all assemblies from BizTalk, other than "Microsoft" namespace assemblies (&lt;strong&gt;be careful!&lt;/strong&gt;)&lt;br /&gt;&lt;br /&gt;added the ability to shoot down any existing message instances within the BizTalk queue by assembly name (&lt;em&gt;killServiceInstancesByAssemblyName&lt;/em&gt;), otherwise assemblies would not be removed because they were in use.&lt;br /&gt;&lt;br /&gt;cleaned up the source somewhat&lt;br /&gt;&lt;br /&gt;What I can't figure out is how to make sure no referenced assemblies are being used, i.e. how to set up the uninstall order. the DeploymentDriver being used doesn't seem to allow me using it's methods for that. If anyone has any suggestions for this issue, please let me know!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATED: &lt;/strong&gt; The file can be found &lt;a href="http://www.tachyons.demon.nl/undeployassembly.zip"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109247527506341455?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109247527506341455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109247527506341455' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109247527506341455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109247527506341455'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/08/update-undeployassembly.html' title='Update: undeployassembly'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109239244198139431</id><published>2004-08-13T11:41:00.000+02:00</published><updated>2004-08-13T12:20:41.980+02:00</updated><title type='text'>XmlDTDValidator pipeline component</title><content type='html'>Ever tried using DOCTYPE declarations in your inbound messages? The XML Disassembler does not validate against DTDs, only schemas. If you have DOCTYPE declarations in your inbound message, BizTalk uses the standard XmlResolver for reading in the message and will log about four error messages into the EventViewer, of which one will state:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;There was a failure executing the receive pipeline: "Microsoft.BizTalk.DefaultPipelines.XMLReceive" Source: "mscorlib" Receive Location: "c:\test\input\*.xml" Reason: Could not find file "C:\WINDOWS\system32\MyDTD.DTD".&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I can imagine situations in which you can't alter the messages coming in on forehand and need the message to be both validated and processed by BizTalk, without having to store your DTD files in C:\WINDOWS\system32.&lt;br /&gt;&lt;br /&gt;I've written a &lt;a href="http://www.staticvoid.demon.nl/XmlDTDValidator.zip"&gt;pipeline component&lt;/a&gt; which both validates the inbound message against it's DOCTYPE, having a design-time property in which you specify where your DTD files reside, and removes the DOCTYPE declaration in order for BizTalk to process the message. (by the way, the framework was built using my &lt;a href="http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=1d4f7d6b-7d27-4f05-a8ee-48cfcd5abf4a"&gt;Pipeline Component Wizard&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Ofcourse, a design-time property setting the folder in which your DTDs reside, might not be the best option, it's for example use only. In a production environment, you want this value to come from the App.Config file or another place you can alter real-time without having the redeploy your pipeline.&lt;br /&gt;&lt;br /&gt;I hope you have fun with this component and would love to hear any comments, flames, what not (see &lt;a href="http://martijnh.blogspot.com/2004/07/e-mail-address.html"&gt;this&lt;/a&gt; page for my e-mail address)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109239244198139431?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109239244198139431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109239244198139431' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109239244198139431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109239244198139431'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/08/xmldtdvalidator-pipeline-component.html' title='XmlDTDValidator pipeline component'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109190800985522090</id><published>2004-08-07T21:37:00.000+02:00</published><updated>2004-08-08T20:28:29.203+02:00</updated><title type='text'>Pipeline components: checking to see if you're interested in processing a message</title><content type='html'>If you ever needed to see whether your component has to process a given message, try implementing the &lt;em&gt;IProbeMessage&lt;/em&gt; interface. It gives you the message, you can analyze it and return a boolean value to indicate whether you're interested in processing the message. If you return false, the next component in the current stage will be executed in the normal manner. If you return true, your component will be executed by the messaging engine.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;public bool Probe(IPipelineContext pc, IBaseMessage inMsg)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;// TODO: implement decision logic for the &lt;br /&gt;&amp;nbsp;&amp;nbsp;// message here&lt;br /&gt;&amp;nbsp;&amp;nbsp;return true;&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;Please note that the stage you will use the component in must be configured as &lt;strong&gt;FirstMatch&lt;/strong&gt;, which in this version is &lt;strong&gt;only the Disassemble stage&lt;/strong&gt; (see the &lt;a href="ms-help://BTS_2004/SDK/htm/ebiz_prog_pipe_yvmd.htm"&gt;documentation&lt;/a&gt;, the BizTalk 2004 documentation mus be installed for this to work and you have to copy the link and paste it in another window because of security constraints)&lt;br /&gt;&lt;br /&gt;Update (2004/08/08): this interface has now been incorporated in my pipeline component wizard (just choose DisassemblingSerializer for the component stage), the pipeline component wizard can be retrieved &lt;a href="http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=1d4f7d6b-7d27-4f05-a8ee-48cfcd5abf4a"&gt;here&lt;/a&gt; or &lt;a href="http://www.staticvoid.demon.nl/plcwsrcv1.2.zip"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109190800985522090?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109190800985522090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109190800985522090' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109190800985522090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109190800985522090'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/08/pipeline-components-checking-to-see-if.html' title='Pipeline components: checking to see if you&apos;re interested in processing a message'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109190732307648157</id><published>2004-08-07T21:14:00.000+02:00</published><updated>2004-08-08T20:30:17.396+02:00</updated><title type='text'>Update: Pipeline Component Wizard</title><content type='html'>The Pipeline Component Wizard has been expanded and some minor bugs were fixed. It's uploaded to &lt;a href="http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=1d4f7d6b-7d27-4f05-a8ee-48cfcd5abf4a"&gt;gotdotnet&lt;/a&gt; and you can also download it &lt;a href="http://www.staticvoid.demon.nl/plcwsrcv1.2.zip"&gt;here&lt;/a&gt; from my personal webspace.&lt;br /&gt;&lt;br /&gt;Major issues: this new version implements the IAssemblerComponent and IDisassemblerComponent interfaces (AssemblingSerializer and DisassemblingParser) as well as the IProbeMessage interface to see if you want to process the message (see &lt;a href="http://martijnh.blogspot.com/2004/08/pipeline-components-checking-to-see-if.html"&gt;this&lt;/a&gt; page for more information)&lt;br /&gt;&lt;br /&gt;I've removed the older version links from the previous article about the Wizard to ensure everyone gets the latest version.&lt;br /&gt;&lt;br /&gt;Hope you enjoy this update! Let me know of any issues, my e-mail address can be found &lt;a href="http://martijnh.blogspot.com/2004/07/e-mail-address.html"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109190732307648157?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109190732307648157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109190732307648157' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109190732307648157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109190732307648157'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/08/update-pipeline-component-wizard.html' title='Update: Pipeline Component Wizard'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109182607641145679</id><published>2004-08-06T22:58:00.000+02:00</published><updated>2005-11-26T14:09:50.236+01:00</updated><title type='text'>Decompression pipeline component (zip files)</title><content type='html'>Ever wanted to unzip a file and use it's content in BizTalk Server? I've implemented an unzip component (disassembler stage) which uncompresses the files within the zip file and allows you to process them like you would normal messages. The sourcecode can be found &lt;a href="http://martijnh.blogspot.com/2004/09/testing-unzipcomponent-sample.html"&gt;here&lt;/a&gt;. I hope you enjoy this sample. Please let me know of any trouble with using it or any suggestions you might have!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109182607641145679?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109182607641145679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109182607641145679' title='34 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109182607641145679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109182607641145679'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/08/decompression-pipeline-component-zip.html' title='Decompression pipeline component (zip files)'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>34</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109130528819996088</id><published>2004-07-31T22:16:00.000+02:00</published><updated>2005-12-14T10:31:09.753+01:00</updated><title type='text'>BizTalk 2004 - Suspended Queue Listener Windows Service</title><content type='html'>Quite a mouth full for the title, but as it says, I've implemented a simple Windows Service component which will watch your Suspended Queue for messages, both realtime and batch-wise. &lt;br /&gt;&lt;br /&gt;The batch-wise implementation searches the Queue for Suspended messages upon Service startup and calls a routine which you will implement to do whatever you want with the message from the Queue. &lt;br /&gt;&lt;br /&gt;The realtime part is realized by subscribing to a WMI Event fired, called "MSBTS_ServiceInstanceSuspendedEvent". I've supplied the sourcecode for you to have a look at, let me know if you find anything you have questions about or don't agree with. Hope you enjoy this one!&lt;br /&gt;&lt;br /&gt;UPDATE:&lt;br /&gt;&lt;br /&gt;it's ready for download &lt;a href="http://www.tachyons.demon.nl/SuspendedQueueListener.zip"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109130528819996088?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109130528819996088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109130528819996088' title='139 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109130528819996088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109130528819996088'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/07/biztalk-2004-suspended-queue-listener.html' title='BizTalk 2004 - Suspended Queue Listener Windows Service'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>139</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109113197188225334</id><published>2004-07-29T22:06:00.000+02:00</published><updated>2004-07-29T22:12:51.883+02:00</updated><title type='text'>E-mail address</title><content type='html'>In order to make it easier for people to contact me with questions regarding my work, blogs, etc. I'll post my e-mail address here. I'll make it cryptic to try and avoid spambots from gaining my e-mail address...&lt;br /&gt;&lt;br /&gt;I work at Macaw (&lt;a href="http://www.macaw.nl"&gt;www.macaw.nl&lt;/a&gt;). Just put my full name (martijn hoogendoorn, replace the blank with a '.' character) in front of the domain, and you'll be contacting me :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109113197188225334?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109113197188225334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109113197188225334' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109113197188225334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109113197188225334'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/07/e-mail-address.html' title='E-mail address'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-109018535361820358</id><published>2004-07-18T23:08:00.000+02:00</published><updated>2004-08-07T21:36:44.823+02:00</updated><title type='text'>Pipeline Component Wizard</title><content type='html'>Following Boudewijn van&amp;nbsp;der Zwan and Scott Woodgate's &lt;a href="http://blogs.msdn.com/scottwoo/archive/2004/07/08/177770.aspx"&gt;adapter wizard&lt;/a&gt;&amp;nbsp;(thanks guys, awesome piece of code!), I've created a Wizard that creates pipeline components as I got tired of implementing the same interfaces over and over again. I hope you enjoy this, as I know I will, please let me know of any problems, recommendations or questions you have! You can download the wizard's sourcecode &lt;a href="http://martijnh.blogspot.com/2004/08/update-pipeline-component-wizard.html"&gt;here&lt;/a&gt;; an installer is included. After installation, start a new Visual Studio instance and press CTRL+SHIFT+N to generate a new project. Browse to "BizTalk Projects" and select "BizTalk Server Pipeline Component Project" to use the wizard. &lt;br /&gt;The project uses CodeDOM instead of template files, as the number of files generated by the wizard is severely limited in regards to the aforementioned wizard from Boudewijn and Scott. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Again, I'd love to here your feedback on&amp;nbsp;this project, as it couldn't possibly be bug-free :-p &lt;br /&gt;&lt;br /&gt;UPDATE: It's also on &lt;a href="http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=1d4f7d6b-7d27-4f05-a8ee-48cfcd5abf4a"&gt;GotDotNet&lt;/a&gt; now.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-109018535361820358?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/109018535361820358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=109018535361820358' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109018535361820358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/109018535361820358'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/07/pipeline-component-wizard.html' title='Pipeline Component Wizard'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-108923031475359163</id><published>2004-07-07T21:57:00.000+02:00</published><updated>2004-07-07T21:58:34.753+02:00</updated><title type='text'>Feed</title><content type='html'>I've been getting some requests to enable my feed. Unfortunately, this blogging site is not using RSS feeds, only Atom feeds. My Atom feed is http://martijnh.blogspot.com/atom.xml&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-108923031475359163?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/108923031475359163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=108923031475359163' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108923031475359163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108923031475359163'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/07/feed.html' title='Feed'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-108922792926572506</id><published>2004-07-07T20:49:00.000+02:00</published><updated>2004-07-08T22:00:11.376+02:00</updated><title type='text'>Virtual Server 2005 Release Candidate ROCKS!</title><content type='html'>WOW! I'm currently setting up 2 BizTalk Server installations to test different settings, and get a good feeling with Enterprise Single Sign-on. I'm using Microsoft Virtual Server 2005 RC - Enterprise Edition to perform this task and what a ride that's been. I've been using other virtual machine software (you know which I mean) before, but this both performs great and is easily viewed from Internet Explorer. What a breeze it was setting up the virtual machines...&lt;br /&gt;&lt;br /&gt;Update: WOW again, you can switch CD-ROM images and network settings realtime!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-108922792926572506?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/108922792926572506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=108922792926572506' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108922792926572506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108922792926572506'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/07/virtual-server-2005-release-candidate.html' title='Virtual Server 2005 Release Candidate ROCKS!'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-108921421047849611</id><published>2004-07-07T17:26:00.000+02:00</published><updated>2004-07-07T17:30:10.476+02:00</updated><title type='text'>ListBindings utility</title><content type='html'>Within a production environment, it can be helpful to easily see your binding information without using BizTalk Explorer (as you don't have Visual Studio handy) or VBScript. This little utility is something I built for such a situation. It might be helpful to you too or alternatively you could use it as a starting point for using ExplorerOM. Download the sourcecode &lt;a href="http://www.staticvoid.demon.nl/ListBindings.zip"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Note: it currently only displays Send and Receive ports and their relevant information (not everything, just the most important elements). Feel free to enhance or just use it. If you have any suggestion, don't hesitate to send me feedback!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-108921421047849611?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/108921421047849611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=108921421047849611' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108921421047849611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108921421047849611'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/07/listbindings-utility.html' title='ListBindings utility'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-108914265777989628</id><published>2004-07-06T21:36:00.000+02:00</published><updated>2004-07-06T21:55:55.460+02:00</updated><title type='text'>More Performance Tips</title><content type='html'>Another tip from Hans-Peter Mayr at TechEd 2004, which I forgot to mention is to keep your schema small (less descriptive). Smaller schemas make for smaller message instances and a smaller impact on performance.&lt;br /&gt;&lt;br /&gt;Don’t promote properties that are not to be used for routing purposes. Use distinguished properties if you need to use a message’s value within an orchestration.&lt;br /&gt;&lt;br /&gt;As most of you know, BizTalk Server 2004 persists data at many points within the lifetime of a message. If you can keep persistence points down to a minimum, performance will increase. One tip I think &lt;a href="http://sphear.demon.nl/weblogs/carlo"&gt;Carlo Poli&lt;/a&gt; already mentioned is to move your mappings from an external format into an internal format out of your orchestrations (where they shouldn’t reside in the first place) and place the map on the receive port which will be bound to your orchestration. This saves you 1 persistence point per message, again enhancing performance.&lt;br /&gt;&lt;br /&gt;Wrapping an atomic scope around subsequent send shapes within your orchestration will also save you persistence points. Imagine a simple orchestration in which you subsequently have 1 receive shape, followed by 2 send shapes &lt;br /&gt;&lt;img src="http://www.staticvoid.demon.nl/images/1rcv2send.png" /&gt;&lt;br /&gt;&lt;br /&gt; Moving the 2 send shapes into an atomic scope together &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.staticvoid.demon.nl/images/atomic.png" /&gt;&lt;br /&gt;&lt;br /&gt;will save you 1 persistence point and thus performance.&lt;br /&gt;&lt;br /&gt;A common mistake made is not having SQL Server Agent running. This will avoid cleaning up DTC packages from being run and your DBMS will grow unchecked.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-108914265777989628?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/108914265777989628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=108914265777989628' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108914265777989628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108914265777989628'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/07/more-performance-tips.html' title='More Performance Tips'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-108914255124905811</id><published>2004-07-06T21:32:00.000+02:00</published><updated>2004-07-06T21:59:37.213+02:00</updated><title type='text'>Example Functoid</title><content type='html'>Functoids are small pieces of code that assist you in implementing the logic which maps an incoming message to an outgoing message. They can be used from the toolbox within Visual Studio in the mapper if correctly installed. To be displayed within the toolbox in Visual Studio, a functoid needs to live inside a special folder. This folder resides within the BizTalk Server installation folder, subfolder Developer Tools\Mapper Extensions. &lt;br /&gt;&lt;br /&gt;Any functoid you write has to derive from the BaseFunctoid Class. A functoid can expose it’s logic as inline script by overriding methods which are called to check for this script (GetInlineScriptBuffer). If you desire not to provide scripting code for the functoid, you should make sure the XSLT mapper can find your component by placing it into the Global Assembly Cache (GAC). I’ve written a very simple &lt;a href="http://www.staticvoid.demon.nl/SearchReplaceFunctoid.zip"&gt;example functoid&lt;/a&gt; for you to play with and use called the "SearchReplace" functoid. It takes 1 node, a searchterm (a regular expression), and a replacement term (also a regular expression). Play around with it and let me know what you think (hint: run the testharness included and do a "test map")!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.staticvoid.demon.nl/images/searchreplace.png" /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-108914255124905811?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/108914255124905811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=108914255124905811' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108914255124905811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108914255124905811'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/07/example-functoid.html' title='Example Functoid'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-108871664105844111</id><published>2004-07-01T23:01:00.000+02:00</published><updated>2004-07-01T23:17:21.106+02:00</updated><title type='text'>Talking to Scott Woodgate at TechEd 2004 Europe</title><content type='html'>This morning I talked to Scott Woodgate, the Product Manager for BizTalk Server 2004. It was both an informative and a helpfull talk as I got to give feedback on using the product and ask questions regarding implementation choices they made for the product. This afternoon Scott presented an excellent session, &lt;em&gt;EBZ315 - A .NET Developers Drilldown into Building Advanced Business Process Using BizTalk Server 2004 Orchestration&lt;/em&gt; (promptly abbreviated by Scott, as the title was both incorrect spelling and way too long to pronounce without restarting at least 3 times :-p).&lt;br /&gt;&lt;br /&gt;Within the session, Scott mainly focused on correlation and convoys, interesting concepts as most of you might already know. Unfortunately, time was short as always with interesting sessions...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-108871664105844111?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/108871664105844111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=108871664105844111' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108871664105844111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108871664105844111'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/07/talking-to-scott-woodgate-at-teched.html' title='Talking to Scott Woodgate at TechEd 2004 Europe'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-108863065385366549</id><published>2004-06-30T23:21:00.000+02:00</published><updated>2004-06-30T23:24:43.060+02:00</updated><title type='text'>Another BizTalk 2004 performance hint</title><content type='html'>Another BizTalk 2004 performance hint comes from TechEd 2004 as well: if you're sending multiple messages at once, wrap it in an atomic scope. This will create 1 persistence point instead of n (n being the number of messages you send). Persistence points are points at which BizTalk serializes the orchestration state into the MessageBox, draining the system from resources.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-108863065385366549?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/108863065385366549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=108863065385366549' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108863065385366549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108863065385366549'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/06/another-biztalk-2004-performance-hint.html' title='Another BizTalk 2004 performance hint'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-108862990702779623</id><published>2004-06-30T23:09:00.000+02:00</published><updated>2004-06-30T23:13:12.370+02:00</updated><title type='text'>Send ports, performance issue</title><content type='html'>Something I've picked up at TechEd 2004 Europe which I hadn't considered myself yet: don't use XmlTransmit on sendports unless you need to demote properties back into the message. This prevents a performance drain!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-108862990702779623?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/108862990702779623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=108862990702779623' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108862990702779623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108862990702779623'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/06/send-ports-performance-issue.html' title='Send ports, performance issue'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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-7492642.post-108862963754503495</id><published>2004-06-30T23:03:00.000+02:00</published><updated>2005-11-25T12:56:38.246+01:00</updated><title type='text'>Easily undeploy an assembly</title><content type='html'>Using this console application you can easily undeploy assemblies from BizTalk. It saves the current binding information into an XML file for easy restore. Things that might be improved: 1) Kill existing orchestrations running from the BizTalk environment, to ensure the assembly can actually be deployed. Currently, false positives might be generated if orchestration instances still exist. 2) bugs? 3) It's poorly documented, if anyone offers...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UPDATED: &lt;/strong&gt;&lt;a href="http://www.tachyons.demon.nl/undeployassembly.zip"&gt;Here&lt;/a&gt; it is&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-108862963754503495?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/108862963754503495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=108862963754503495' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108862963754503495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108862963754503495'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/06/easily-undeploy-assembly.html' title='Easily undeploy an assembly'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7492642.post-108862854878496498</id><published>2004-06-30T22:48:00.000+02:00</published><updated>2004-07-03T20:08:30.146+02:00</updated><title type='text'>File adapter with regular expressions</title><content type='html'>I've altered the FILE adapter &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sdk/htm/ebiz_sdk_samples_aqjw.asp"&gt;SDK sample&lt;/a&gt;&lt;/strong&gt; so that you don't have to create a receive location for each file extension you wish to pick up. It accepts a regular expression for the receive location. It's a simple modification, put I was creating lots of receive locations, one for each filetype I had to pick up and got fed up with it. Let me know what you think!&lt;br /&gt;&lt;br /&gt;In PickupFilesAndSubmit (&lt;em&gt;DotNetFileReceiverEndpoint.cs&lt;/em&gt;), change the lines&lt;br /&gt;&lt;blockquote&gt;DirectoryInfo di = new DirectoryInfo(this.properties.Directory);&lt;br /&gt;FileInfo[] items = di.GetFiles(this.properties.FileMask);&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;into:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;FileInfo[] items = GetFilesRegex(this.properties.Directory, this.properties.FileMask);&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;and add the function GetFilesRegex() where you want it:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;/// This method retrieves all files from a given folder, matching&lt;br /&gt;/// a regular expression in their filename&lt;br /&gt;/// &amp;lt;/summary&amp;gt;&lt;br /&gt;/// &amp;lt;param name="path"&amp;gt;The folder to enumerate&lt;/param&gt;&lt;br /&gt;/// &amp;lt;param name="regularExpression"&amp;gt;the regular expression string for matching the files&amp;lt;/param&amp;gt;&lt;br /&gt;/// &amp;lt;returns&amp;gt;an array containing the found filesystem entries&amp;lt;/returns&amp;gt;&lt;br /&gt;public static FileInfo[] GetFilesRegex(string path, string regularExpression)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;// queue == FIFO&lt;br /&gt;&amp;nbsp;Queue q = new Queue();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;DirectoryInfo di = new DirectoryInfo(path);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;foreach(FileInfo fi in di.GetFiles())&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;// see if we match our regular expression&lt;br /&gt;&amp;nbsp;&amp;nbsp;if(Regex.Match(fi.Name, regularExpression).Success)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// we do, enqueue the file&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;q.Enqueue(fi);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;// copy the queue back into an array of files&lt;br /&gt;&amp;nbsp;FileInfo[] fia = new FileInfo[q.Count];&lt;br /&gt;&amp;nbsp;q.CopyTo(fia, 0);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;return fia;&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;You're done! Now configure the adapter (file mask) with a regular expression: (?i).*\.((dw)|(pd))f&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7492642-108862854878496498?l=martijnh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://martijnh.blogspot.com/feeds/108862854878496498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7492642&amp;postID=108862854878496498' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108862854878496498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7492642/posts/default/108862854878496498'/><link rel='alternate' type='text/html' href='http://martijnh.blogspot.com/2004/06/file-adapter-with-regular-expressions.html' title='File adapter with regular expressions'/><author><name>Martijn Hoogendoorn</name><uri>http://www.blogger.com/profile/04936853262718403065</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>5</thr:total></entry></feed>
