At the moment I’m taking the first steps in moving the BizTalk Software Factory to the BizTalk Server 2009 platform.
In order to accomplish that I need to look carefully into the ‘new’ project type and structure of the project file used.
One thing I came across was where the BizTalk Application name is stored, because that used to be in the .btproj file. After some research I found out that it is stored in the .btproj.user file.
From ‘regular’ C# projects I know I can find user specific settings in the .user file and one of the things you should not do is add that file to source control for that reason.
Is that different in BizTalk 2009 development and were these settings added to the .user file because they would otherwise invalidate the .btproj file?
Should we add the .user file also to source control now?
At the moment I think we should because it contains vital information. Anyone who knows the rationale behind this decision?
Yesterday I co-presented at the Dutch BizTalk User Group. It was a talk about the BizTalk Software Factory and I did the demo. Afterwards I got the question on how to set the icon on a guidance recipe, like in the picture below.
I had to look it up in the code but I found it. By blogging it now it is also a note to self.
In the recipe you specify the arguments, actions and also the icon for the recipe. Below is a piece from the recipe for adding a map unit test from the BizTalk Software Factory. The HostData section specifies the icon and where the recipe should show up.
Next issue is what icon to take and what does the 133 mean? There is not much documentation about that on, for example, how to add your own icon. So I decided to use an existing one. Which one to take? To find out the ID of the icons, I used this tool: FaceID browser
It is a tool to get the ID’s of the Office icons and since Excel is installed on basically every BizTalk installation it does work well.
Next Thursday, June 18, I'll be presenting at the Dutch BizTalk User Group.
It is a presentation about the BizTalk Software Factory that I've built with D. Dijkstra. It is a great opportunity to show the (most) Dutch developers what the BSF is capable of and how they can use it to create consistent, testable, maintainable and easy to create BizTalk solutions.
I hope to see you in Utrecht.
I have a laptop that I use for my day to day work. It is a laptop equipped for running multiple virtual images at the same time. My operating system has been Windows Vista Business 64-bit for the last 1,5 years.
At the beginning I was enthusiastic about Vista and it’s user interface. But after a certain period of time my laptop didn’t perform as good as I was used to. I tried to clean some things up, defragged my hard drive and stopped unnecessary services to make the machine run smooth again. I still wasn’t very satisfied with the performance but reinstalling the machine wasn’t something I was looking forward to.
This changed when Windows Update stopped functioning back in March. It suddenly wasn’t able to update and also my Forefront Client Security stopped working. At first I thought it was a hick-up but I couldn’t get it to work anymore (MSDN forum question).
After a few weeks in this situation I started to worry. I didn’t get any updates for Vista and even worse I didn’t get any virus definitions. To solve the latter I installed AVG, but that is known to be very slow where I was actually very satisfied with the performance of Forefront Client Security.
This weekend I decided this situation should end and I was at the point of reinstalling. What to choose? Windows Vista again of which I knew everything would run or try the RC of Windows 7?
I decided to give Windows 7 a go.
The installation procedure was smooth, it took a while but I faced no issues. After that the first challenge was to get my display to show full HD resolution. At first this appeared to be a problem because nearly all Dell drivers for my Vostro 1700 quit installation after finding out it wasn’t Vista. However one driver was installed without the check and that was enough.
Then the endless process of installing Forefront, Office, Visual Studio and all other programs started. I was under the assumption that Windows 7 came with Virtual PC installed but that wasn’t the case. I had to get it from here.
I was a bit concerned about Forefront. If that wouldn’t install I had to resort to AVG again (ironically AVG is the only available supported Windows 7 virus scanner according to the Windows 7 security settings) . I run Forefront as a stand-alone client and you install it from the commandline with “ClientSetup /NOMOM”. Trying this resulted in an access denied error. I binged a bit and I found the solution. Like with Vista the client setup has to run as administrator. That did the trick.
The other applications installed without any issue. However with the service packs I ran into something. Visual Studio 2008 SP1 didn’t install. Also Office SP2 didn’t install from the downloaded version but actually was successful with Windows Update. I´m still looking for a way to get VS SP1 installed.
So far so good. My first hours with Windows 7 are great. The user interface is very friendly and the new taskbar is awesome. It runs fast and most important to me: Windows Update runs fine and so does Forefront!
Update: Yesterday evening I shutdown my laptop and this morning I started it again to find out it couldn't boot anymore. It just started and crashed and restarted and crashed. Start repair failed and I couldn't return to a restore point. Even a safe boot resulted in a crash. Memory check showed no problems. Again I was at the point of reinstall. While last time I installed Windows 7 next to Vista, this time I decided to format my hard drive and give Windows 7 a second chance. So far so good, but my confidence in Windows 7 is at a low level at the moment and I fear every Windows Update that results in a shutdown or restart.
Last Thursday and Friday I attended the Dutch Dev Days in The Hague. It is a two day conference of which some say it is a small TechEd. Conferences like this are always good for meeting old friends and colleagues and gaining some knowledge about technology that I don't work with on a daily basis.
Besides good sessions about Windows Azure, BizTalk and WCF/WF, there were two sessions that blew me away.
One was by Ingo Rammer of Thinktecture. He talked about Tasks and Threading in .NET 4.0 and how easy it was to actually utilize your multiple core machines instead of just utilizing one core. He clearly explained and demoed the power of the new tasks based API in .NET 4.0. With changing some simple statements he turned a regular multi threaded.NET program into one using all available cores.
For example using "Parallel.For" instead of "for" or "Parallel.ForEach" instead of a "for each" statement. It also has support for LINQ (PLINQ) where just adding the extension method "AsParallel" will do.
Here you can find information about it from the development team and here about PLINQ.
The second very interesting session was by Jan Tielens of U2U. He had a session about how to pimp up your Sharepoint site. He showed some techniques to enrich the user experience using ASP.NET Ajax, Silverlight and jQuery. I don't work that much with Sharepoint so I'm easily impressed but it was very nice what he showed. And like all things that are hard, he made it look very easy to implement. Jan also talked about the Smart tools for Sharepoint which contain some nice tools to pimp up your Sharepoint site.
Like with all cool new things, if I find some spare time (which I know I don't have with stuff like Dublin, BizTalk 2009, ESB Toolkit 2.0, WCF 4.0, WF 4.0 and……) I'll try out these things myself.
For a proof of concept I wrote a rather small BizTalk application. Because the proof of concept was started earlier this year, BizTalk Server 2006 R2 was used.
Now the proof of concept is successfully finished it was decided to start with BizTalk Server 2009. The first thing we had to do was make the proof of concept run on the 2009 server. While I thought that should be easy, some unexpected issues came up.
There were 2 issues we face that appear hard to reproduce.
First we had a custom pipeline with the flat file disassembler. When we opened the custom pipeline and clicked the flat file pipeline component the properties weren't shown, no matter how hard we tried. We found out that the component version is still 3.0.1.0 but the file version is different. However when I tried to reproduce this, I was one time successful but no more than that.
Second the mappings. We have very simple mappings, but when we tried to recompile the message "Unexpected Character '\'" showed up and we couldn't figure out what caused this. The 'solution' in this case was recreate the simple mapping but when I tried tonight I was again successful only once….
If I can reproduce the problem I'll post again. Anyone experienced something like this on a migration?
Last week I was working on a proof of concept regarding BizTalk Server 2006 R2. Part of the concept was writing records in a database with a parent child relationship. I knew the classic way of doing this by using an orchestration to write the parent and then a while-loop to write all the child records. But actually I'm not very fond of this solution because it is a lot of work for using some standard functionality.
In my situation I had to use the Identity of the just inserted parent record for the child records, so I Googled a bit to find the best way to do that. I came along this post, which uses update grams, but I was looking for a way with stored procedures to fix this. l also found an example here.
It is really terrible that I cannot find the In this excellent blogpost anymore where I read the solution. Bottom line is that you don't have to create a while-loop to insert all child records. The only thing you have to do is change the 'maxoccurs' of node in the generated schema based on the stored procedure you're going to use to insert the child records to 'unbounded'. After that you are able to map all children to one message which will be processed by the SQL adapter in a batch!
I used an orchestration to write the parent record and used a multiple input-message map to map the parent ID from the parent record insert and the source child messages to the destination child messages. After some head-scratching I found out that the order of the input-messages is very important. I couldn't get it to work if the source child message was the first source message in the map and the message with the parent ID was second. The adapter was reporting a missing parameter in the stored procedure (the parent ID). However if I specified the parent ID message first and then the source child message second it worked fine!
The Patterns & Practices team released CTP2 of the ESB Guidance 2.0.
You can get it here.
What's New in the January Release?
This is the second CTP release of the Microsoft ESB Guidance 2.0 for Microsoft BizTalk Server 2009. It incorporates several modifications and additions compared to the October 2008 CTP release. The following list summarizes these changes.
New Features and Components
- New core features. This version includes the following new core features:
- UDDI 3.0 Resolver
- UDDI 3.0 categorization schemas
- LDAP Resolver
- WCF-Custom Adapter Provider
- SMTP Adapter Provider
- New and Updated Samples
- SSO Configuration Provider Sample
- SQL LOB Adapter Sample
Changes to Existing Features and Components Modifications.
- Itinerary Designer
- UDDI 3.0 resolver extender
- File itinerary exporter
- Itinerary database exporter
- Resolvers can be executed from design surface to verify resolver configuration via resolver service.
- SMTP adapter design support
- WCF-Custom adapter design support
- LDAP resolver extender
- Additional itinerary model validation rules
- Management Portal
- Chart controls migrated to use Microsoft Chart Controls for Microsoft .NET Framework 3.5
- UDDI Publisher Utility
- General bug fixes.
Retired features.
Future Plans
Updated documentation for ESB Guidance 2.0 CTP2 will be released at the later date as separate download. The upcoming releases will contain additional improvements including JMS intergation as well as and general bug fixes.
If you're interested in the beta documentation for BizTalk Server 2009 beta, you can find it here.
Right after BizTalk Server 2009 beta was announced I worked on a virtual PC image to check this new stuff. I installed Windows Server 2008, SQL Server 2008, Visual Studio 2008 and of course BizTalk Server 2009 beta.
When I tried to create a new Empty BizTalk Server Project in Visual Studio I ran into the exception "The project type is not supported by this installation". I thought it had something to do with my installation so I tried again and again with different settings, but with no result. I couldn't find much about this error on the internet so I suspected it to be my issue only.
It must be something with Visual Studio so I tried a different version, the trial version of Visual Studio 2008 Team System and it worked right away. In my other attempts I used the Visual Studio 2008 Standard edition, so it looks like some part of the installation isn't done correctly for this Visual Studio version.
It took me quite some time so I hope I can save you some time in case you experience the same issue.

Last night the good news of BizTalk Server 2009 beta being public received me, finally!
It consists of the following items:
| 12/8/2008 |
BizTalk Server 2009 Beta - Release Notes |
|
Document |
BizTalk Server 2009 Beta - Release Notes |
| 12/8/2008 |
BizTalk Server 2009 Beta - Installation and Configuration Guide |
|
Document |
BizTalk Server 2009 Beta - Installation and Configuration Guide |
| 12/5/2008 |
BizTalk Server 2009 Accelerators Beta Evaluation Download |
|
Build |
BizTalk Server 2009 Accelerators Beta Evaluation Download |
| 12/4/2008 |
BizTalk Server 2009 Public Beta Evaluation Download |
|
Build |
BizTalk Server 2009 Public Beta Evaluation Download |
Also the ESB Guidance 2.0 CTP was released, with system requirements like Microsoft BizTalk Server 2009 and Microsoft Visual Studio 2008 SP1 :-) I wrote in a previous post about the features of this 2.0 release.
To be complete, I also noticed a new release of BizUnit 3.0 now with support for creating test cases via an object model and reading test cases from an Excel sheet.
So how about that? A lot of cool BizTalk news! I know I have something to do the coming weeks.
Let me start with the good news, the Microsoft announced the long expected version 2.0 of the ESB guidance. The present version is about a year old (November 2007) so it was time the lessons of the 1.0 version would result into a 2.0 version. Also some people doubted that Microsoft would invest into a second version of the guidance because it was quiet for some time. However on CodePlex the team announced a follow up already in July.
How about the bad news? Well, the bad news is that it is only available for Micrsoft BizTalk Server TAP customers, at least for now. This CTP is targeted for BizTalk Server 2009 so I guess that it will take some time before we can play with it since BizTalk Server 2009 is scheduled for first half of next year. Although I expect the first public CTP of BizTalk Server 2009 to be available soon.
So, what is actually new and changed in this version?
New Features and Components:
-
New samples. This version includes the following new samples:
- SSO Configuration provider for Enterprise Library 4.0
- Multiple Web Service Execution Sample
- Exception Handling Service Sample
-
New ESB Web services. This version includes the following new ESB Web services:
- Generic Itinerary Services ( no itinerary header required)
-
New core features. This version includes the following new core features:
- Alignment with Microsoft BizTalk Server 2009 ( Beta )
- ESB Configuration tool
- Centralized itinerary store
- Itinerary resolver components
- Itinerary forwarder pipeline component
- Itinerary selector pipeline component
- Itinerary designer
- Centralized configuration uses Enterprise Library 4.0 Configuration Block
- Centralized caching uses Enterprise Library 4.0 Caching Block
- Multiple service invocation using both messaging and orchestrations
- Itinerary BAM tracking
- Improved ESB Core engine and itinerary execution
Changes to Existing Features and Components:
You can read more about it on the Architects Rule blog and here. Also Charles Young mentioned it a while ago but didn't go into feature details.
It is official now, I'm going to the TechEd this year in Barcelona!!
I have no idea how many guys from the Netherlands will be there, but at least I'm there :-)
At the moment I'm working with Gerben van Loon on a WCF project at a large insurance company in the Netherlands. One of the requirements of the project is to log all incoming and outgoing messages. Because we want to customize the way these messages are logged, we cannot use the standard tracing and message logging functionality.
To also be able to use the message logging functionality from within other applications, we decided to build a WCF behavior (message inspector) and a WCF service to log the messages to a database. Message logging is very important in this case so we came up with a very reliable, scalable and good performing solution: using MSMQ as a transport.
Our idea was that messages could be written into the queue very fast using a reliable one way operation call and the service could read from the queue and log the message. Messages would not be lost in case the service was overloaded and the consumer wouldn't have to wait, the ideal situation!
However, while testing the behavior and service, Gerben found out messages were lost somehow. He called the service twice and one operation was registered and the other was not. What was going on? After turning on the WCF trace and messagelog it was clear what went wrong. The log showed this message:
There was an error deserializing the object of type Service.Operation. The maximum string content length quota (8192) has been exceeded while reading XML data. This quota may be increased by changing the MaxStringContentLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader.
The second operation contained a body of 10k and therefore couldn't be processed. Ok, so far our understanding of why this happened.
But the thing that worries us is that if the trace and messagelog are switched off, you never know the error occurs because there is obviously no report to the consumer of the service (there never is with one way) and there is also no message in the eventlog. Of course the solution in this case is to increase the content length quota, but maybe there are other errors like this that can occur without knowing. And because we don't know what the size of the messages will be, should we use Int32.MaxValue as value for MaxStringContentLength?
Please let me know if we overlook something of if you know a way to solve this.
Finally the next major release of the BizTalk Software Factory is on CodePlex, version 1.5.
This version supports, besides the current functionality, the following:
- Solution folders for the BRE artifacts Rules and Policies
- Support for creating Pipeline Components
- Support for generating Unit Tests
Adding solution folders to the guidance was a piece of cake, but it took quite some time to figure out how to integrate Martijn Hoogendoorn's Pipeline Component Wizard. The classes he used to derive his dialog classes from aren't supported in the guidance so I actually had to understand what he was doing there instead of just copying. But that is also a good thing.
You can now add a Pipeline Component to your project like any other artifact and the wizard is basically the same as Martijn used. The only thing I skipped was the image that you can set on the component. Thanks for borrowing your code Martijn! I was also able to solve one issue in the Pipeline Component Wizard regarding SchemaList design-time properties. Thanks to Kader Yildirim (http://www.techheadbrothers.com/Articles.aspx/decouverte-biztalk-server-2006-1-3-page-4). The page is in French, but babefish does a great job if your French is as good as mine.
Another need to have was the ability to generate unit tests for artifacts. I wanted to add all kinds of generated tests like for BRE Rules, Policies and Pipelines. I know Martijn also has written something to unit test BRE Rules and I know there is a nice Pipeline test framework. Unfortunately lack of time made me skip these things. Feel free to add it to the code J
So, what was I able to add?
- Support to generate unit tests for Schemas
- Support to generate unit tests for Maps
- Support to generate unit tests for Orchestrations
What you can do now is select the unit test project and select 'Add' from the context menu. You'll see options to add these artifacts. For Schemas, I used the class Michael Stephenson wrote (http://geekswithblogs.net/michaelstephenson/archive/2008/03/30/120850.aspx). This class does and XSD validation of the supplied XML test message. You can also use BizUnit for this. For testing a map I also (tried to) used a class from Michael Stehpenson. This was not as easy as it looked and at the end I decided to leave the code in there but it doesn't work as I would like it to. Besides the custom transform there is another issue because the output of the transform is character by character compared to the 'expected' output. Because of this way of comparing it marks an output of <Body/> not the same as <Body></Body> so the test would fail.
In a next version of BizUnit it is possible to test a map, but maybe someone has built a custom step for this and is willing to share it with me so I can put it in now. J
For orchestrations the regular unit test is generated, together with a test-case and test-data file.
The one big thing missing is setup and deployment. There were plans of also putting it into this release, but at the moment it would just take too much time. Maybe next release.
If you're working with BizTalk, go get it here!!
(and don't forget to share your opinion on the BSF with me, I'm very interested in improving it)
More Posts
Next page »