Codit Wiki

Loading information... Please wait.

Codit Blog

Posted on Wednesday, October 26, 2016 7:31 AM

Glenn Colpaert by Glenn Colpaert

The moment we've all been waiting for has arrived, as of now BizTalk Server 2016 is RTM!

BizTalk Server 2016 comes with lots of new exciting features, with focus on HA improvements and addressing customer asks and pain points, BizTalk Server 2016 tries to bridge the gap between on premise and cloud and take your business on a successful hybrid integration journey. The goal of this blogpost is to give you an in depth vision of all the new features of BizTalk Server 2016.

Before diving into the details of this blogpost be sure to also check following blogpost released by Microsoft on the vision and the shift of momentum in the integration space.

High Availability with SQL Server 2016 AlwaysOn

BizTalk Server 2016 comes with support for SQL Server 2016 AlwaysOn Availability Groups. With this addition of AlwaysOn, BizTalk Server provides a modern and consistent way for doing HA/DR scenarios. Next to that you can run your multi-node BizTalk deployments both on-premises or as Azure IaaS in the cloud in a supported way.

SQL Server 2016 supports MSDTC with AlwaysOn Availability Groups (AG) on Windows Server 2016 and Windows Server 2012 R2, any version prior to SQL Server 2016 will not be supported.

Another important remark in the new HA/DR setup is that MSDTC between databases on same SQL Server instance is not supported with SQL Server 2016 AlwaysOn Availability Groups. This means that no two BizTalk databases in a distributed transaction can be hosted on the same SQL server instance. For transactional consistency BizTalk databases participating in distributed transaction should be hosted on different SQL server instances.

The illustration below demonstrates the recommended configuration for BizTalk Server Databases in SQL Server 2016 Always On Availability Groups.

(Click on the image to enlarge)

Adapter Improvements

  • SFTP Adapter now supports additional ciphers (DES, Blowfish and ArcFour) and more SFTP Server.
  • ServerBus Adapter is updated with support for Shared Access Signature (SAS) authentication for the BasicHttpRelay, NetTcpRelay, BasicHttp and WebHttp bindings.
  • The MLLP Adapter (HL7 Accelerator) supports the option to initiate an outbound connection.
  • Further improvement of SAP NcO Support for the SAP Adapter. You can find more info of the switch from RFC to NcO in following blogpost.


Next to the platform alignment with Windows Server 2016, SQL Server 2016, Office 2016 and Visual Studio 2015, BizTalk Server 2016 comes with a whole new range of miscellaneous additions and improvements.

  • SHA2 Support
  • Support for xslCompiledTransform or xslTransform
  • Binding management improvements like 'Include/Exclude tracking settings', 'Export on Party Level'

(Granular import of binding files)

(Importing/Exporting on Party level)

  • Admin Console improvements like 'Search/Filter on artifact name', 'Change multiple host settings', 'Suspended messages - multi select save to file"

(Search and Filter on Artifact name)

(Multi Select save to file)

BizTalk Logic Apps Adapter

One of the key goals of BizTalk Server 2016 is to bridge the gap between on premise and cloud by taking advantages of the API App available through Logic Apps.

The new Logic Apps Adapter for BizTalk Server 2016 enables to integrate seamlessly with Logic Apps via the recently released On-premises Data Gateway. More details on how to install and configure the BizTalk Logic Apps Adapter please visit following blog.


(BizTalk and Logic Apps - Better Together)


Launch Event

To celebrate the launch of the 10th version of BizTalk Server, Codit organizes a BizTalk 2016 launch event.

Learn everything about the new features in BizTalk Server 2016 and the vision of Microsoft on Integration anno 2016.More information of the event can be found on following website.

If you still have question on BizTalk Server 2016 after reading this blogpost, don't hesitate to contact me and if you're in the neighborhood, don't forget to register for out BizTalk Server 2016 Launch event.



Categories: Azure, BizTalk, Products
written by: Glenn Colpaert

Posted on Thursday, October 20, 2016 10:00 AM

Glenn Colpaert by Glenn Colpaert

BizTalk Server 2016 is scheduled for General Availability (GA) later this year. To celebrate the launch of the 10th version of BizTalk Server, Codit organizes a BizTalk 2016 launch event.

BizTalk Server 2016 comes with lots of new, exciting features such as HA improvements, a platform refresh and more, but most important of all - BizTalk 2016 tries to bridge the gap between on premise and cloud allowing you to take your business on a successful hybrid integration journey.

What will you learn?

Learn everything about the new features in BizTalk Server 2016 and the vision of Microsoft on Integration anno 2016. See why support for SQL Server 2016 AlwaysOn makes production high availability (HA) workloads in Azure a reality. To top it off you will learn to create basic IFTT (If This Then That) scenarios, or think bigger and build full-scale enterprise integration scenarios, with Logic Apps.

Practical Details

  • Date: Thursday November 24, from 14:30 PM to 17:45 PM (Including walking dinner)
  • Language: English
  • Location: Crowne Plaza - Brussels Airport (Leonardo Da Vincilaan 4, 1831 Brussels)


Speakers and Sessions

  • Keynote: Microsoft's view on Integration anno 2016
  • A dip into the new BizTalk 2016 and and answer to your "should we or shouldn't we upgrade"
  • High Availability versus Always On Support: the battle
  • Azure IPaaS: Integration Evolved

For more information and registration, visit our website

Hope to see you there!


Categories: Community
written by: Glenn Colpaert

Posted on Monday, October 17, 2016 11:11 AM

Brecht Vancauwenberghe by Brecht Vancauwenberghe

Deallocating Azure Service Fabric cluster nodes, means you will be paying less for your cluster! In this blog post I will show you how to do this.

Probably you used the Azure Portal to create your first Service Fabric cluster, but when done playing with it, it seems impossible to deallocate/stop/suspend your cluster so you are not paying for the cluster nodes. The Azure Portal appears to expose no obvious way to "disable" the cluster.

One way would be to delete all resources that make up the cluster or delete the whole Resource Group and recreate it when you want to use it again.

Imagine you have a test environment that only needs to run once a week. I can imagine you don't want to recreate it every week but you also don't want to pay for all this when you are not using it. Good news, there is a solution, and I'm here to tell you!

First deactivate the necessary nodes with the Service Fabric cluster Explorer, otherwise you might have problems getting your cluster back up and running.

Service Fabric cluster nodes reside within a Virtual Machine Scale set, through PowerShell and even with the Azure portal you can disable instances within the Scale set:

Stop-AzureRmVmss -ResourceGroupName "resource group name" -VMScaleSetName "scale set name" -InstanceId #

Now you can deallocate your Service Fabric cluster whenever you want!

Categories: Technology

Posted on Monday, October 3, 2016 3:48 PM

Pieter Vandenheede by Pieter Vandenheede

For BizTalk Server developers, given the choice between XSLT and the BizTalk mapper, opinions tend to change. This is my view on the purpose and value of both, trying to provide the ultimate answer: should I use XSLT or the mapper to create BizTalk maps?

Here at, we are always eager to try and do things as fast as possible and as efficient as possible. Lately, there has been several cases at clients/prospects, where I had to make a case for the "Codit" way of working and more specifically, how we make a BizTalk mapping... Some experienced BizTalk developers tend to look at me with an awful look of disgust, when I tell them we do not use the BizTalk mapper for mappings... at all. Yes, at Codit, we always use custom XSLT in our BizTalk mappings. And this blog post will try and explain why! First, let me talk to you about the difference between the BizTalk mapper and custom XSLT...

What is XSLT?

  • XSLT or Extensible Stylesheet Language Transformations is a language for transforming XML documents into other XML documents, HTML, plain text or xsl-fo.
  • XSLT is, in contrary to most programming languages, declarative instead of imperative. It's based on pattern matching. Rather than listing an imperative sequence of actions to perform, templates define how to handle a node matching a particular XPath-like pattern.
  • XSLT uses XPath.
  • XSLT was not made for BizTalk Server, it is BizTalk Server implementing XSLT 1.0. To this day it still remains on this version, including BizTalk Server 2016 CTP2! XSLT 2.0 has been out for a long while now, but BizTalk remains at 1.0, due to the fact that .NET does not offer support for XSLT 2.0. With XSLT 3.0 out last year, one might wonder if XSLT 2.0 support will ever come...

What is the BizTalk mapper?

  • The BizTalk mapper is a, very nifty, visualisation tool, created to visualize a mapping between a source and a target schema.
  • The BizTalk mapper is quite easy to use, especially since it uses a drag-and-drop mechanic to map one field to another.
  • Using functoids, a developer can loop/modify/adapt/select certain data before putting the result in the resulting output.
  • Using more than one cascading functoids, one can easily chain up these operations to allow a more complex mapping.
  • The BizTalk mapper generates XSLT 1.0!
  • The BizTalk mapper facilitates complex mappings, by using pages in the grid view

Let's compare!

Comparing one to the other is always hard, especially if you are in favor of one in particular. Let's try to be as objective as possible anyway... Let me know in the comments if you find otherwise!

Performance - winner: XSLT
Custom XSLT is - unless you are working with really easy maps - almost always better performing. The reasoning behind this is that the mapper will for - example - create too much variables for every substep. Any developer optimizing a mapping will see straight away that these might be optimized. The mapper is a tool which generates XSLT. For easier mappings, the XSLT will be as good as anyone can write it. The moment it gets more complex, you would be able to tweak the generated XSLT code to perform better.

(So far: XSLT 1 - 0 Mapper)

Ease of use - winner: Mapper
For some reason XSLT is something special. People tend to be afraid of it when they do not know it. As it happens, not many people tend to easily write XSLT, so there is a certain threshold to get over. For people already knowing XSLT, it flows naturally. The mapper is built to be intuitive and easy to use, for the untrained BizTalk professional and the seasoned BizTalk veteran. There are hundreds of scenarios you can tackle easily with it, only for some there is a need for a custom functoid or some custom XSLT.

(XSLT 1 - 1 Mapper)

Source Control - winner: XSLT
If you use a custom XSLT file, you need to add it to your solution and also to your source control. For every check-in you perform, you get a perfect version history: you can clearly see each and every byte of code that was changed, since it's just text, like any source code you write in .NET. The mapper is more complex for source control versioning. Your .btm file contains representations of the graphical links you made by dragging and dropping. It contains codes for every page, functoid, etc... and it's location on the grid. Updating a mapping can affect a whole lot more code than just your small change.

(XSLT 2 - 1 Mapper)

Maintainability - winner: draw
It might take some time to ‘dive’ into a mapping when working with XSLT. But the same can be said from the mapper.
Making small changes can be as easy as searching for the node(s) you need to change and updating the code.
It might take some time to ‘dive’ into a mapping when working with the mapper. Especially when working with multiple pages and complex links and functoids, in several cases it might even take longer. However, just like in XSLT, it depends how you structure your map.

(XSLT 3 - 2 Mapper)

NEW Interoperability  - winner: XSLT
XSLT can be run anywhere and there is support for it everywhere. Visual Studio, Notepad++ (XML Tools plugin), Altova, Eclipse, oXyGen, etc... It can be run on lots of editors, can be run from .NET/Java/etc... XSLT is a standard, here to stay, proven and tested. Be sure however, to keep yourself to XSLT 1.0! Try to avoid inline c# code or extension objects or your interoperability is also gone! Unfair competition for the mapper. The mapper is available in the BizTalk Developer Tools for Visual Studio. Your existing mappings will however be transferable to Logic Apps, with existing functoids. But this is nowhere near as interoperable compared to XSLT.

(XSLT 4 - 2 Mapper)

Debugging - winner: draw
XSLT can be debugged from within Visual Studio. Open your XSL file and click Debug. Easy. The mapper can be debugged, just like XSLT. You can step into functoids. Just as easy.

(Winner: XSLT 5 to 3)

This is how we (Codit) do it

At Codit, it is custom to do practically everything in custom XSLT. However, we are not ignorant of the mapper. It is a great tool and not using it for what it does best, would be such a waste. So this is our way of working:

  1. Create your mapping file (.btm) and select the source and target schemas.
  2. Link the fields you need in your specific mapping, using the BizTalk mapper, but do not use any functoids.
  3. Validate your mapping in Visual Studio, locate the XSLT and place it in a 'xsl' subfolder, using the same filename as your btm file.
  4. Assign the XSL file to your BTM file and make sure to delete all of the links in your grid view. This ensures any future developer looking at the code, that no mistakes can be made: it's all in the custom XSLT.
  5. Edit your custom XSLT and enjoy your freedom!

Some XSLT tips & tricks

Here are some additional tips a tricks I like to tell our developers which are starting off their integration career:

  • Use proper spacing in your XSLT! Empty lines between stylesheets, empty XML comments before and after a <xsl:for-each/> make your structures stand out so much more.
  • Use proper, clear and descriptive variable naming. It make such a difference.
  • Write and use comments for "future-you"! Don't give "future-you" any reason to hate "past-you", because you will regret that extra 5 minutes you neglected to spend on comments while you still 'got it'.
  • Don't do math in XSLT! Don't tell anyone, but it's not very good at it. Use extension objects or specific math functions.
  • Avoid inline C# code in your XSLT code at all costs. We have seen that inline C# code in your mapping may result in memory leaks if you call your mapping from a custom pipeline component for example.
  • Stylize the first line of your stylesheet. Put all namespaces on a separate line for example, for easier readability.


XSLT is the way to go! Although it does mean you need to invest in yourself. XSLT 1.0, XPath 1.0, etc... these are things you will need to learn. However, consider this is a good investment! Knowledge of XSLT can be used in several fields, from front-end design to PDF generation, it is something you will need at some point and it is very easy to learn! Also consider this: as a BizTalk / integration consultant: people using the mapper will not easily be able to handle an XSLT-file. People who know XSLT, can do both, since any BizTalk map can be converted to XSLT in a few seconds. Also this: whenever things get really complex, the developers which favor the mapper, still might need to copy/paste some of that custom XSLT in their scripting functoids to make their mapping work.

If you are interested in learning XSLT, please check the reference material provided at the end of this post. Also, be aware that Codit offers quite an extensive XSLT training, designed for integration products like BizTalk Server, Logic Apps, etc...

Please let me know if you have any remarks/comments. I'll be happy to elaborate further or to review some sections, given enough feedback.


For now:happy XSLT-ing!



Reference material

XSLT W3 Schools Tutorial -  


Note: this post also appeared on

Categories: BizTalk
written by: Pieter Vandenheede

Posted on Thursday, August 25, 2016 2:39 PM

Glenn Colpaert by Glenn Colpaert

We're currently working on a Service Fabric project where we have to implement a Service Fabric Actor that does work, based on a certain schedule or timeframe.
One of the challenges in this implementation was activating the actor immediately after deployment and registration.

This blogpost will explain on how this problem was handled.

If you are not familiar with Service Fabric Actors, please have a look at this in-depth description of the Actor Design Pattern and Service Fabric Reliable Actors:

Timers vs Reminders

Service Fabric Actors can schedule periodic work by registering either timers or reminders.

The main difference between timers and reminders is that reminders are triggered under all circumstances, until the actor unregisters the reminder or the actor is explicitly deleted.

Specifically, reminders are triggered across actor deactivations and failovers, because the Actors runtime persists information about the actor's reminders.

In-depth details of timers and reminders can be found here:

How did we do it?

The implementation starts with creating a Reliable Actor. When the Actor is being activated we register a reminder to do a certain job every 30 seconds. The actual job is being implemented in the ReceiveReminderAsync method.

In our case, the StartWork method is simply there to trigger the activation of the Actor. The activation of the actor is done inside an ActorService. This service is a simple derived service from the base ActorService.

The only difference here is that inside the run we create and active an instance of our ISchedulingActor and that way start the 30 seconds reminder.

The only thing we then have to change is the entry point of the service host process. In the main method instead of using the base ActorService to register our Actor.

We are using our own derived service SchedulingActorService to register the Actor and that way trigger the RunAsync (and therefor the creation and activation of our actor) on the SchedulingActorService.


Timers and reminders are a great way to schedule periodic work for your Service Fabric Actors. For our specific implementation it was important that the Service Fabric Actor was activated immediately after deployment.

Using the above implementation of creating a derived service based on the Actor Service is a good approach to achieve that goal with a small amount of effort in a 'static' Actor Scenario.

Keep in mind that the reminder or timer is re-initialized every time the primary replica of your actor service is started. This happens after failover, resource balancing, upgrade,… So make sure that your methods and actions performed by your Reliable Actor are idempotent.



Categories: Azure
written by: Glenn Colpaert