September 2004 - Posts

Deploying a custom BizTalk Adapter in a merge module (and registry trouble)
Thu, Sep 30 2004 9:38 AM
I've been struggling the last two days to deploy a custom BizTalk adapter using a merge module. My idea was to deploy the binaries and add the necessary registry keys using standard installer technology and then run a custom script to register the adapter in BizTalk using WMI. It didn't work in one go.
 
If you create a adapter project using the adapter wizard, a registry file gets created as well that you need to merge into the registry to get the stuff working. These keys are all in the space HKCR\CLSID\<yourkey>. As you can read in this Registry Architecture article from the Windows IT Library the HKCR is in real life a merged key consisting of the HKLM\Software\Classes and the HKCU\Software\Classes keys. So computer settings and user settings in one place. What happens if you create a key there? I don't really know, but it turns out that in most cases exactly what you want (the adapter works) but in some case not. In my case it didn't.
 
When I ran my setup the installation succeeded but the WMI script failed. When I monitored using RegMon from www.sysintenals.com, it turned out that the WMI Service (wmiprvse.exe) tried to read the HKCU\CLSID\<mykey> value and it couldn't. 
 
Since I think an adapter is a computer owned object, I decided that the keys needed to be computer settings, so instead of adding them to HKCR\CLSID, I added them to HKLM\Software\Classes\CLSID and now the WMI script does succesfully register.
 
For the interested few, here's the WMI script that registers an adapter in BizTalk using C# (this script requires you to reference System.Management both as a DLL and as a using statement):
 
    PutOptions options = new PutOptions();
    options.Type = PutType.CreateOnly;
 
    //create a ManagementClass object and spawn a ManagementObject instance
    ManagementClass newAdapterClass = new ManagementClass("root\\MicrosoftBizTalkServer", "MSBTS_AdapterSetting", null);
    ManagementObject newAdapterObject = newAdapterClass.CreateInstance();
           
    //set the properties for the Managementobject
    newAdapterObject["Name"] = "<your adapters name>";
    newAdapterObject["Constraints"] = "<yourconstraints>";  //see the registry file!!
    newAdapterObject["MgmtCLSID"] = "<your adapter clsid>"; //see the registry file!!
            
    //create the Managementobject
    newAdapterObject.Put(options);
    System.Console.WriteLine("Adapter has been created successfully");
MQSeries adapter release
Wed, Sep 29 2004 8:12 AM

Now this is something I could have used in my current project where I need to tie Oracle and BizTalk together. We now go via the filesystem, with all issues like no garanteed delivery, no garanteed message order, etc. We could have solved these issue much easier when we would have used MQSeries.

The announcement by Scott Woodgate is here, the download is here.

Bringing the best of both worlds together on blog reading
Tue, Sep 28 2004 10:25 AM

I read my blogfeeds webbased via Bloglines for quite a while now and I love it, because whether I am at home or at work, I always have the same feeds available, with the right status of what I have read.

But while Bloglines did come a long way, they just can't beat a native Windows blogreader in usability. That is going to change. Yesterday an announcement was made that Bloglines will have a web service interface, with some major windows based blogreaders supporting it. So, feeds and read status are centrally managed, yet you have the power of a windows client app. Great stuff.

Why you need to change operation names
Sun, Sep 26 2004 6:38 PM
Kevin Lam is yet another Microsoft-employee that starts a blog about BizTalk. His introductionary post tells us why we should have unique operationnames in our ports. Turns out that if you don't the stress on the master-messagebox (the one you can't scale out) can increase dramatically, effectively lowering your solution scale limits.
by Carlo Poli | with no comments
Filed under:
Funky BizTalk pipeline logic?
Thu, Sep 23 2004 4:02 PM
Charles Young describes some strange behavior in pipelines. The topic is quite complex but he manages to describe it in a readable manner. Very good job.
 
It made me rethink about some of the issues I had in the past that I couldn't get to work in the way I expected it to. It re-emphasizes the value of knowing what is really going on.  
by Carlo Poli | with no comments
Filed under:
Another "under the hood" BizTalk 2004 post
Tue, Sep 21 2004 1:34 PM
Gilles posted on how BizTalk artifacts gets compiled into assemblies. Very interesting if your really want to understand what's going on.
by Carlo Poli | with no comments
Filed under:
How to query the BizTalk 2004 messagebox
Tue, Sep 21 2004 9:02 AM
Now here's something I like a lot. A document on how to query the messagebox is published via the BizTalk Core Engine Blog.
I've worked with Commerce Server, Content Management Server and SharePoint a lot in the past and with all these products I eventually came into a position where something was broken or didn't work as expected and querying the database was really the last resort. So I think that this kind of documentation is invaluable. Great job.
Yet another BizTalk Blogger
Tue, Sep 21 2004 8:42 AM
Gregory van de Wiele has started his El Grego's BizTalk blog with three impressive posts on MSMQT, updating (versioning) mappings and EIF integration, not the easiest topics in BizTalk. Interesting blog.
by Carlo Poli | with no comments
Filed under:
Multiple rootnodes in one schema in BizTalk 2004
Mon, Sep 20 2004 4:19 PM
BizTalk 2004 allows you to have multiple rootnodes in one schema. I thought that this was a nice way to capture a contract having multiple messagetypes in one document, so I use this in my current project. Since BizTalk identifies a messagetype by it's namespace/rootnode combination, I didn't really expect any problems with that.
 
But I just keep on running into issues that makes me wonder. The latest one I discovered just now.
 
I receive all message through the same receiveport and I want to map those messages to some central datamodel. Turns out that I can't. As soon as I specify one of the maps, the other ones dissappear from the list! Incredible. And I had more of such issues. I don't have the time to dive in now, but I hope to blog about those soon as well.
 
I just wonder if I misunderstand the value of multiple rootnodes and I shouldn't be wanting this or my approach in itself is good, but BizTalk is limited (and if so I like to know why). Any comments very appreciated.
Blogging from InfoPath
Mon, Sep 20 2004 9:13 AM
Several people including Don Box and Aaron Skonnard have pointed that they blog using InfoPath. Aaron even linked to an InfoPath sample template from Guoqiang Wu. Time to download that sample and test it out. I just posted this article using the InfoPath form.