Archive for May, 2008
I just learned very recently that I will be going to TechEd (http://www.microsoft.com/events/teched2008/default.mspx) to learn more about Microsoft technologies. I will be primarily going to SOA & Business Process sessions and will also be working in a few Unified Communications classes as well. I will be blogging every night about the sessions I attended as well as other aspects of the conference so be sure to tune in here to read my event information.
Recently I was asked to send an MSMQ message which only contained the data from a flat file. The reason for this was the need to simply relay messages that came in through MSMQ onto a distant trading partner using MQSeries. Through BizTalk this is made possible through send port filters which can essentially query messages coming into the BizTalk MessageBox database through receive locations and then forward them onto the send ports based on the filters. So in this scenario the goal was to reduce latency as much as possible by simply forwarding the message received through BizTalk to the distant partner. The challenge is in getting the format of the MSMQ message body to simply be the flat file string.
Sending text for an MSMQ message body using the .NET namespace System.Messaging will by default use the XmlMessageFormatter in the body of the message. Switching over to the BinaryMessageFormatter will almost accomplish this goal but you will see some extra characters in the body if you look at the body contents as shown here for an MSMQ message (the desired message does not begin until the 0120 on the fourth line):
One formatter that accomplishes these objectives but does receive much written about it is the ActiveXMessageFormatter (in System.Messaging), which will serialize a string exactly like you would expect it to w/o any additional header or wrapping content. This is very useful when you want to send something across to MSMQ without any extra wrapping or header content.
I was working at a client who is using the financial industry "standard" format 8583 (which is basically an open format too – see http://en.wikipedia.org/wiki/ISO_8583) and was struggling a little with a way to specify in Xml Schema that the data was of hexadecimal type. The 8583 format includes a few hex fields as well as some open-ended fields that are usually customized by payment processor. The challenge with a hex field is that its field length when coverted to ASCII will have twice the number of characters so it would be easy to overrun a positional flat file thinking all of the fields were just based on an ASCII encoding. In BizTalk you would use the flat-file schema wizard to generate a schema for the file, but the question was how to specify that a field was hexadecimal just based on Xml Schema types.
I did some research and found out about Xsd:HexBinary, which gives us this capability. I found an IBM article which mentioned this in the context of sending attachments as part of (or embedded in) web service calls: http://www-128.ibm.com/developerworks/library/ws-tip-noattach.html. Ironically, this article shows both Java and .NET code examples which is pretty cool. So the Xsd:HexBinary gives us the ability to give an Xml schema information about a hex field, but this is unfortunately not something (that I am aware of) which can be specified during the BizTalk flat-file wizard. This might be a good future feature.
Lately I have been working a lot on Windows Server 2008 and have been very impressed with the updated Event Viewer. If you have ever been debugging a particular Windows Service or BizTalk application and were watching the event log for errors, you end up spending a lot of time refreshing the Event Viewer. In Windows Server 2008, the my newest favorite feature is the way that the event viewer will notify you if it is not currently showing the latest events. At the top of the Event Viewer MMC you can find a line which shows the number of events currently visible, as seen below:
Then when new events occur, you will get a notification of the new events to the right of the event count. This is shown below:
This notiifcation means that you can now wait until the notification in order to refresh the event viewer rather than refreshing it manually yourself to watch the events roll in. This is a very helpful and productive addition to Window Server!