BizTalk Installation on a 64-bit Machine

I completed my first 64-bit installation of BizTalk last week and thought it would be beneficial to post a few notes about the experience as there doesn’t appear to be all that much out there on the interweb.

Architecture

  • BizTalk supports both 32- and 64-bit architectures out of the box.; Itanium (ia64) is not supported, but x64 (AMD64 and EM64T) architectures are. This applies to the BizTalk runtime only and not the SQL Server database – you can run SQL Server on any supported hardware.
  • The BizTalk runtime can execute in 32-bit mode using the WOW64 service to emulate a 32-bit runtime environment. On an x64 architecture, WOW64 switches the processor hardware from its 64-bit mode to compatibility mode when it’s time to execute a 32-bit thread, and then handles the switch back to 64-bit mode. No expensive emulation is required for WOW64 on x64 in comparision to Itanium. For more information, see the Wikipedia entry on WOW64.

Installation

  • Installation is relatively simple and requires no additional work. If you are downloading the CAB file prior to installation (rather than letting the installer download from the web), make sure that you get the 64-bit version, rather than the 32-bit version.
  • On a 64-bit architecture, Setup installs the 32-bit elements into the ‘Program Files (x86)’ directory, rather than the standard ‘Program Files’ directory.
  • The following screenshot was taken while installing ESSO on a 64-bit system and although it doesn’t show the full installation, it gives an idea of the additional work the installer completes (about as exciting as it gets!!):

64-bit Installation WizardAdministration

  • BizTalk Hosts can be configured to execute in either 32-bit or 64-bit mode. The execution mode is set when creating a new Host – uncheck the 32-bit option in the Host Properties dialog box and any new Host Instances created will execute in 64-bit mode. Note that you cannot toggle between 32- and 64-bit mode while you have Host Instances [in a Host] – to change the execution mode, delete the Host Instance and toggle the 32-bit checkbox and recreate the instances.

Development

  • To enable 64-bit execution of orchestraions, assign to a 64-bit Host Instance; note that the Host Instance must be running on a 64-bit machine.
  • To enable custom assemblies to execute within Host Instances running in either 32- or 64-bit mode, compile the assembly with the AnyCPU flag set. The assembly will then JIT-compile for the correct runtime.

WSE Adapter Setup

After struggling to get the WSE Adapter setup on a new dev box, I’m writing this post for posterity, so I don’t waste another three-hours getting the adapter installed….

The adapter has one prerequisite – The Microsoft Web Services Enhancements 2.0 SP3 for .Net [1] – download and run the setup; once finished, check that you have the correct version of the Microsoft.Web.Services2 assembly in your GAC, it should be version 2.0.3.0.

Microsoft.Web.Services2 Version in the GACThis is where I was coming unstuck with the install – there are several versions of MS WSE for .Net, however the BizTalk WSE Adapter seems to need SP3 (which provides the aforementioned version).

Download and install the BizTalk Adapter for WSE 2.0 [2] and its associated service pack, Service Pack 1 [3]. Once the service pack is installed, you should have a working WSE Adapter. If the user that is installing the adapter is not a member of the BizTalk Server Administrators Group, the installer will throw a message informing you that it can’t add (create?) the adapter in the BizTalk Group – simply add the adapter manually from the Admin Console.

Downloads

  1. Web Services Enhancements (WSE) 2.0 SP3 for Microsoft .NET
  2. BizTalk Adapter for Web Services Enhancement (WSE) 2.0
  3. BizTalk Adapter for WSE 2.0 Service Pack 1 Update

Palm Treo 750v – The Wonderphone!

Treo 750When my mobile phone contract came up for renewal in December of last year, I decided to move into the 21st Century, abandoning my trusty Nokia 6330 and going for a Windows Mobile device. For my sins, I opted for a T-Mobile contract and the MDA smartphone. Unfortunately, it wasn’t all that smart and should be re-banded as a ‘waste-of-time-effort-and-money-phone’ (I plan on writing an entry about this bag of shite in the hope that someone will stumble across it and steer clear of the device, but thats for another time).

To cut a long story short, the MDA decided to die one evening when away from home with work (when I say die, I actually mean that it kept responding to phantom key-presses but wouldn’t respond to any real key-presses. After a couple of attempts to persuade it back to life, it was invited to have a meeting with the bedroom wall – amen). With a dead phone, I started looking around for something new. I had seen the Treo 750v reviewed and a few colleagues had the model, so after a little playing (and subsequent drooling) I decided to buy one off eBay. After running the unlock software (it was locked to Vodaphone), I’m was the proud owner of a Palm Treo 750v!!

Simply put, the is the best gadget I have ever seen (even more so than my iPod nano) – it blows away all of the competition and should put HTC (the makers of the T-Mobile MDA) to shame. It’s responsive to key-presses, never seems to be bogged down trying to run too many applications and has a snazzy little QWERTY keyboard at the bottom that works great (although I think I need matchsticks for fingers). The screen isn’t as big as the MDA, but all the information I need is there, along with some excellent productivity applications that help you get to stuff a lot faster than the MDA ever did. I also love the fact that there are Ok/Close and Windows buttons on the keypad – this means that you never need to get the stylus out if you’re doing the day-to-day stuff. Simply Excellent.

I think the only thing I don’t like are the proprietary connectors for data and charging (which means I now have another two cables to carry around with me), but I think I can live with that.

In closing I’ll prove my geekiness (I sometimes think I’m a bit of a closet geek) – my first customisation was to add the ringtone from CTU in the 24 Series. Geek Central ;-)

Using Send Port Maps with Untyped Messages

I’ve spent the last few days working on a proof of concept for a generic (web-service) message bus application based on BizTalk 2006. The message bus is an orchestration exposed as a web service and accepts any message, consumes a remote web service and sends the results back to the calling web-service.

The Big Idea

As messages enter the message bus, they are updated with routing information identifying their sender and written to the Message Box. Following the traditional pub/sub architecture, it is then up to subscribing Send Ports to grab the messages they want, map them into the relevant format and consume the designated web service; the response is written to the Message Box and is correlated to the message bus orchestration for final delivery to the originating caller.

The Problem

The problem came when trying to map the outbound message on the Send Port, as each web service we want to consume is likely to have a different signature. The port subscribed to the routing information as expected, the map worked as expected (when testing in Visual Studio), but when run on the port nothing happened.

My first thought was that because the port was subscribing to untyped messages, it just wouldn’t work (it was expecting a typed message that corresponded to the source schema of the map – duh). After a little more thinking, head-banging and reading this post on Google Groups, it all became it little clearer:

Understanding What its Doing Under the Hood

From what I can gather* maps on send ports don’t do anything particularly clever – they simply look at the MessageType in the context property and check whether the source schema matches (i.e. namespace#root-node-name). Maps work on Send Ports with typed messages because the MessageType property is promoted into the message context by the XLANG/S engine which ‘knows’ the type of the message (you’ve told it which schema the message corresponds to in the orchestration designer). With untyped messages, the XLANG/S engine doesn’t know the type (well, it knows its of type System.Xml.XmlDocument but that doesn’t really help) and therefore can’t promote the MessageType property into the context. As a result, the map doesn’t work because it doesn’t know what the message is (and doesn’t report an error either – helpful).

The Fix

The fix is really simply – promote the MessageType into the context of the untyped message using a correlation set (as described here) and – hey-presto – everything works! Swindon, we have maps….

Nick.

* Please feel free to shoot me down on this one…

Clustered SQL Server Installation – Setup Failed to Start on the Remote Machine

I’m on a client site today installing clustered SQL Server to be used as a BizTalk 2006 backend. During the installation, I was flummoxed by the following error and the setup would fail:

Setup failed to start on the remote machine. Check the Task Scheduler event log on the remote machine.

The domain user accounts were in order (we had just created them) and the second node of the cluster was active and working normally. After re-reading the error (I blindly went looking through the event log thinking that would indicate the problem) I noticed that the error mentioned the Task Scheduler…

Background

Lost feeds on Bloglines.com? Updated

I’m a massive fan of Bloglines.com and have around 80+ subscribed feeds. Up until now I’ve not had a problem with the service, until this weekend – has anyone else lost all of their feeds?!?!?

My account is still recognised and I can log-in, but none of my feeds are displayed. Bugger.

Come on Bloglines, what are you playing at? Please can I have them back? I may just have to move to Google Reader….

Update: my account is back – phew. No indication as to the problem on the bloglines.com website. I dabbled with Google Reader, but it just didn’t feel quite right.