Martijn's blog - E-Commerce, EAI, BizTalk and .NET


BizTalk 2004 - Suspended Queue Listener Windows Service

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.

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.

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!


it's ready for download here


E-mail address

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...

I work at Macaw ( Just put my full name (martijn hoogendoorn, replace the blank with a '.' character) in front of the domain, and you'll be contacting me :-)


Pipeline Component Wizard

Following Boudewijn van der Zwan and Scott Woodgate's adapter wizard (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 here; 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.
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.
Again, I'd love to here your feedback on this project, as it couldn't possibly be bug-free :-p

UPDATE: It's also on GotDotNet now.



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

Virtual Server 2005 Release Candidate ROCKS!

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...

Update: WOW again, you can switch CD-ROM images and network settings realtime!

ListBindings utility

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 here.

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!


More Performance Tips

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.

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.

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 Carlo Poli 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.

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

Moving the 2 send shapes into an atomic scope together

will save you 1 persistence point and thus performance.

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.

Example Functoid

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.

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 example functoid 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")!


Talking to Scott Woodgate at TechEd 2004 Europe

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, EBZ315 - A .NET Developers Drilldown into Building Advanced Business Process Using BizTalk Server 2004 Orchestration (promptly abbreviated by Scott, as the title was both incorrect spelling and way too long to pronounce without restarting at least 3 times :-p).

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...