Have you ever found yourself in a position where you needed to understand how a particular BizTalk solution works? And to make matters worse, the majority of the solution is implemented based on content-based routing?

Routing Messages in BizTalk Server

So first, what is this: Content-Based routing?

Don’t get me wrong the definition that I will provide because there are several Message Routing Patterns that you can implement in BizTalk Server. For example, you can implement in BizTalk Server a:

But the reality is that in BizTalk Server:

  • a message is always composed by the message itself and the metadata associated with it;
  • the architecture is based on Publish and Subscribe;

So in his essence, the subscriber will subscribe to the messages based on Content-Based Routing.

And you may say: yes, but I can route a message without examining is content.

And you are right. The problem is the default definition of this pattern:

  • As the names describe, Content-Based Router examines the message content and routes the message onto a different channel based on data contained in the message. For example, routing a message based on specif values of specif fields, or based on some criteria like existing fields.

However, as I told you before, a message in BizTalk Server is always composed by the message itself and the metadata associated with it. And for that reason, you may found other variations or other names like:

  • Context-Based Routing: Context-Based Routing is similar to the previous one, but instead of analyzing the content of the message, it will analyze the metadata of the message. This information, in BizTalk Server, is normally created on the receive port by the adapter and pipelines.
    • Remember that I can promote messages to the context of the message and route them;
  • Message-Based Routing: that is normally defined when:
    • a message is routed by BizTalk only based on the message type;
      • But this is metadata associated in the message, and you need to inspect the message to get is type;
    • or in pass-thru scenarios when you are just redirecting the message to other systems, i.e., BizTalk is a broker and don’t “touch” or modify the message;
      • But these filters are also associated with metadata of the message;

The problem of managing these solutions

If you have found yourself managing solutions, that majority is implemented with content-based routing, which is usually associated with not using orchestrations. You know that is not easy to understand the solution:

  • What ports are subscribing to the messages?
    • In which conditions?
    • In which application?

But that’s not all. Even worse if you have orchestrations using filters based on the content/context of the message in the activation.

This kind of analyze is hard because BizTalk Server Administration Console doesn’t provide an easy way out-of-the-box for you to see these subscriptions for example in a central place or in a visual diagram like:

BizTalk subscriptions diagram prof-of-concept

This picture is actually from BizTalk360 Graphical Message Flow, but it serves well here as prof-of-concept.

The default solution

So the default solution that you have out-of-the-box with the product is to query the subscription from the BizTalk Server Administration Console by:

  • In the console tree, expand BizTalk Server Administration, and then click the BizTalk group.
  • In the details pane, click the New Query tab.
  • In the Query Expression group, in the Value column, select Subscriptions from the drop-down list box.
BizTalk Administration Console Subscription query

But then you need to go one by one and see what the filters are.

You can minimize this by filtering more the query using the following filters:

  • Maximum Matches: The number of matches to display.
  • Service Instance ID: You can filter subscriptions by service instance ID.
  • Service Name: You can filter subscriptions by service name.
  • Subscription Type: You can filter subscriptions by Activation Subscription or Instance Subscription.

But that will not solve all your problems also. In conclusion, this is a hard and time-consuming task.

And sometimes what I need is just to have a quick overview of all these filters.

BizTalk Filter Finder Tool

“BizTalk Filter Finder Tool” is a simple tool that aims to simplify the process for better understand and maintain solutions based on content-based routing. By allowing you to have a quick overview of all the artifacts, send ports or orchestrations that have filters associated.

BizTalk Filter Finder Tool

This tool will extend default BizTalk Server capabilities transforming this tedious and sometimes complicate analyze a little simple, easy and fast.

It way not be an amazing tool; it may not be beautiful but for me is a timesaver tool.

Credits also to my team member at DevScope, Pedro Almeida that collaborated with me in the development of this tool.


You can download BizTalk Filter Finder Tool from:
BizTalk Filter Finder ToolBizTalk Filter Finder Tool

Author: Sandro Pereira

Sandro Pereira lives in Portugal and works as a consultant at DevScope. In the past years, he has been working on implementing Integration scenarios both on-premises and cloud for various clients, each with different scenarios from a technical point of view, size, and criticality, using Microsoft Azure, Microsoft BizTalk Server and different technologies like AS2, EDI, RosettaNet, SAP, TIBCO etc. He is a regular blogger, international speaker, and technical reviewer of several BizTalk books all focused on Integration. He is also the author of the book “BizTalk Mapping Patterns & Best Practices”. He has been awarded MVP since 2011 for his contributions to the integration community.

3 thoughts on “BizTalk Filter Finder Tool”

Leave a Reply

Your email address will not be published. Required fields are marked *


Back to Top