… or how automatic formatting of XML files can make you miserable.

During the last few days I’ve been helping out a client get ready for deploying a
BizTalk solution. One of those things this involved was taking the existing BizTalk
Binding XML files and making minor edits to them so they would match the new environment.

I did the changes, and the BizTalk Administrator used the updated Binding Files to
import them into the new BizTalk Servers. They imported without any errors at all.
A couple hours later he noticed some test messages were getting incorrectly routed
to the wrong send ports (there’s a lot of messaging only stuff in this solution).,
so he checked the send port configuration.

There were no filters defined at all! We checked the Binding files again,
and yes they were clearly defined there. Why were they not getting imported?

The culprit turned out to be Visual Studio. I had edited the binding files in VS and,
for several reasons, this involved doing copy-and-pasting the entire XML content of
the binding files between machines. Normally this isn’t a problem, but this time it
was.

VS will reformat XML content when you paste it into VS. This is usually a welcomed
feature, but not now. Turns out that VS reformatted the <Filter> elements
of the Send port configurations like this:

<Filter>

   &lt;?xml
version="1.0" encoding="utf-16"?&gt;

   &lt;Filter
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;

...

See anything weird? I didn’t see it either at first. The problem is the line break
and extra white space caused by the indentation between the opening <Filter>
element and the actual string-encoded XML of the filter expression.

Apparently, BizTalk can’t deal with this at all and simply treats it as if the <Filter> element
had been empty when it imports the binding file. No warnings, no errors, it simply
ignores it silently.

I removed the space leaving it like this:

<Filter>&lt;?xml
version="1.0" encoding="utf-16"?&gt;

   &lt;Filter
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;

...

And now it was imported correctly and all the Filters were recreated successfully.
This was maddening to say the least, and it’s one of those pesky bugs that can make
deploying BizTalk solutions an even more miserable experience than it already is.
Definitely a very annoying bug in the Binding importer code.

technorati BizTalk
Server 2006, XML