by community-syndication | May 23, 2010 | BizTalk Community Blogs via Syndication
As you know I’m a big fan of Virtual Box being able to run my x64 VMs on my Win7 machine.
Yay!!
So armed with my trusted new Core i7/8 GB laptop – I figured the VMs will be cooking
on this new kit
After installing the lastest VirtualBox (3.2.0) I was away – only to notice the machines
were running like a SLUG! (I actually have a cat that has the nick name ’slug’ and
this machine was slower than her)
After waiting a full 20mins (still booting – ’loading windows files’ etc) my machine
Blue Screened for a millisecond and then rebooted.
So I rolled up my sleeves and started digging – could be the VHD, the bios, the machine,
the 1000 and 1 settings
Firstly I ran a command line command (from under the vbox install dir) –
VBoxManage setextradata VMNAME “VBoxInternal/PDM/HaltOnReset” 1
Finally I got a glimpse of the BSOD and it was an error “STOP7B”
I twigged this is an error of “Inaccessible boot device.” which I’ve had several
times when the SATA drivers couldn’t be loaded by the O/S during boot up.
Solution: (in my case)
I configured the Virtual Box VM with IDE Storage Controllers and NOT SATA
ones for the bootup.(still connected to the same VHDs though)
Win2008/R2 boots up and I’m able to load the SATA drivers in and we’re away.
Back to BizTalk 2010 Beta playing. 🙂
by community-syndication | May 22, 2010 | BizTalk Community Blogs via Syndication
It’s finally arrived. The BizTalk Documenter v3.4 can now be run on 64 bit systems. There are a few other fixes and featuresas well Firstly it now supports SxS scenarios. In the past if you had an orch or a schema with the same name in 2 different assemblies (different versions of the assembly), the […]
by community-syndication | May 22, 2010 | BizTalk Community Blogs via Syndication
Scenario
I came across a nice little one with multi-part maps the other day. I had an orchestration where I needed to combine 4 input messages into one output message like in the below table:
Input Messages |
Output Messages |
Company Details
Member Details
Event Message
Member Search
|
Member Import |
I thought my orchestration was working fine but for some reason when I was trying to send my message it had no content under the root node like below
<ns0:ImportMemberChange xmlns:ns0=”http://—————/”></ns0:ImportMemberChange>
My map is displayed in the below picture.
I knew that the member search message may not have any elements under it but its root element would always exist. The rest of the messages were expected to be fully populated.
I tried a number of different things and testing my map outside of the orchestration it always worked fine.
The Eureka Moment
The eureka moment came when I was looking at the xslt produced by the map. Even though I’d tried swapping the order of the messages in the input of the map you can see in the below picture that the first part of the processing of the message (with the red circle around it) is doing a for-each over the GetCompanyDetailsResult element within the GetCompanyDetailsResponse message.
This is because the processing is driven by the output message format and the first element to output is the OrganisationID which comes from the GetCompanyDetailsResponse message.
At this point I could focus my attention on this message as the xslt shows that if this xpath statement doesn’t return the an element from the GetCompanyDetailsResponse message then the whole body of the output message will not be produced and the output from the map would look like the message I was getting.
<ns0:ImportMemberChange xmlns:ns0=”http://—————/”></ns0:ImportMemberChange>
I was quickly able to prove this in my map test which proved this was a likely candidate for the problem.
I revisited the orchestration focusing on the creation of the GetCompanyDetailsResponse message and there was actually a bug in the orchestration which resulted in the message being incorrectly created, once this was fixed everything worked as expected.
Conclusion
Originally I thought it was a problem with the map itself, and looking online there wasn’t really much in the way of content around troubleshooting for multi-part map problems so I thought I’d write this up.
I guess technically it isn’t a multi-part map problem, but I spend a good couple of hours the other day thinking it was.
by community-syndication | May 22, 2010 | BizTalk Community Blogs via Syndication
I came across something which was a bit of a pain in the bottom the other week.
Our scenario was that we had implemented a helper style assembly which had some custom configuration implemented through the project settings. I’m sure most of you are familiar with this where you end up with a settings file which is viewable through the C# project file and you can configure some basic settings.
The settings are embedded in the assembly during compilation to be part of a DefaultValue attribute. You have the ability to override the settings by adding information to your app.config and if the app.config doesn’t override the settings then the embedded default is used.
All normal C# stuff so far
Where our pain started was when we implement Continuous Integration and we wanted to version all of this from our build. What I was finding was that the assembly was versioned fine but the embedded default value was maintaining the non CI build version number.
I ended up getting this to work by using a build task to change the version numbers in the following files:
- App.config
- Settings.settings
- Settings.designer.cs
I think I probably could have got away with just the settings.designer.cs, but wanted to keep them all consistent incase we had to look at the code on the build server for some reason.
I think the reason this was painful was because the settings.designer.cs is only updated through Visual Studio and it writes out the code to this file including the DefaultValue attribute when the project is saved rather than as part of the compilation process. The compile just compiles the already existing C# file.
As I said we got it working, and it was a bit of a pain. If anyone has a better solution for this I’d love to hear it
by community-syndication | May 22, 2010 | BizTalk Community Blogs via Syndication
Background
Mapping reference data is one of the common scenarios in BizTalk development and its usually a bit of a pain when you need to manage a lot of reference data whether it be through the BizTalk Cross Referencing features or some kind of custom solution.
I have seen many cases where only a couple of the mapping conditions are ever tested.
Approach
As usual I like to see these things tested in isolation before you start using them in your BizTalk maps so you know your mapping functions are working as expected.
This approach can be used for almost all of your reference data type mapping functions where you can take advantage of MSTests data driven tests to test lots of conditions without having to write millions of tests.
Walk Through
Rather than go into the details of this here, I’m going to call out to one of my colleagues who wrote a nice little walk through about using data driven tests a while back.
Check out Callum’s blog: http://callumhibbert.blogspot.com/2009/07/data-driven-tests-with-mstest.html
by community-syndication | May 21, 2010 | BizTalk Community Blogs via Syndication
Available here:
http://www.microsoft.com/downloads/details.aspx?FamilyID=751fa0d1-356c-4002-9c60-d539896c66ce&displaylang=en
Only 18 GB or so 🙂
by community-syndication | May 21, 2010 | BizTalk Community Blogs via Syndication
http://blogs.technet.com/betaexams/archive/2010/05/19/register-for-sharepoint-2010-beta-exams.aspx
by community-syndication | May 21, 2010 | BizTalk Community Blogs via Syndication
Here is the latest in my link-listing series. Also check out my VS 2010 and .NET 4 series and ASP.NET MVC 2 series for other on-going blog series I’m working on.
[In addition to blogging, I am also now using Twitter for quick updates and to share links. Follow me at: twitter.com/scottgu]
ASP.NET MVC
ASP.NET
.NET 4
-
Entity Framework 4 Video Series: Julie Lerman has a nice, free, 7-part video series on MSDN that walks through how to use the new EF4 capabilities with VS 2010 and .NET 4. I’ll be covering EF4 in a blog series that I’m going to start shortly as well.
Visual Studio 2010
Silverlight and Windows Phone 7
Hope this helps,
Scott
P.S. If you haven’t already, check out this month’s "Find a Hoster” page on the www.asp.net website to learn about great (and very inexpensive) ASP.NET hosting offers.
by community-syndication | May 20, 2010 | BizTalk Community Blogs via Syndication
In this post I’d like to talk about an architecture scenario we had recently and how we were able to utilise NServiceBus to help us address this problem.
Scenario
Cognos is a reporting system used by one of my clients. A while back we developed a web service fa%u00e7ade to allow line of business applications to be able to access reports from Cognos to support their various functions.
The service was intended to provide access to reports which were quick running reports or pre-generated reports which could be accessed real-time on demand. One of the key aims of the web service was to provide a simple generic interface to allow applications to get any report without needing to worry about the complex .net SDK for Cognos.
The web service also supported multi-hop kerberos delegation so that report data could be accesses under the context of the end user.
This service was working well for a period of time.
The Problem
The problem we encountered was that reports were now also required to be available to batch processes. The original design was optimised for low latency so users would enjoy a positive experience, however when the batch processes started to request 250+ concurrent reports over an extended period of time you can begin to imagine the sorts of problems that come into play. The key problems this new scenario caused are:
- Users may be affected and the latency of on demand reports was significantly slower
- The Cognos infrastructure was not scaled sufficiently to be able to cope with these long peaks of load
From a cost perspective it just isn’t feasible to scale the Cognos infrastructure to be able to handle the load when it is only for a couple of hour window each night. We really needed to introduce a second pattern for accessing this service which would support high through-put scenarios.
We also had little control over the batch process in terms of being able to throttle its load. We could however make some changes to the way it accessed the reports.
The Approach
My idea was to introduce a throttling mechanism between the Web Service Fa%u00e7ade and Cognos. This would allow the batch processes to push reports requests hard at the web service which we were confident the web service can handle. The web service would then queue these requests and process them behind the scenes and make a call back to the batch application to provide the report once it had been accessed.
In terms of technology we had some limitations because we were not able to use WCF or IIS7 where the MSMQ-Activated WCF services could have helped, but we did have MSMQ as an option and I thought NServiceBus could do just the job to help us here.
The flow of how this would work was as follows:
- The batch applications would send a request for a report to the web service
- The web service uses NServiceBus to send the message to a Queue
- The NServiceBus Generic Host is running as a windows service with a message handler which subscribes to these messages
- The message handler gets the message, accesses the report from Cognos
- The message handler calls back to the original batch application, this is decoupled because the calling application provides a call back url
- The report gets into the batch application and is processed as normal
This approach looks something like the below diagram:
The key points are an application wanting to take advantage of the batch driven reports needs to do the following:
- Implement our call back contract
- Make a call to the service providing a call back url
- Provide a correlation ID so it knows how to tie each response back to its request
What does NServiceBus offer in this solution
So this scenario is not the typical messaging service bus type of solution people implement with NServiceBus, but it did offer the following:
- Simplified interaction with MSMQ
- Offered the ability to configure the number of processes working through the queue so we could find a balance between load on Cognos versus the applications end to end processing time
- NServiceBus offers retries and a way to manage failed messages
- NServiceBus offers a high availability setup
The simple thing is that NServiceBus gave us the platform to build the solution on. We just implemented a message handler which functionally processed a message and we could rely on NServiceBus to do all of the hard work around managing the queues and all of the lower level things that would have took ages to write to any kind of robust level.
Conclusion
With this approach we were able to deal with a fairly significant performance issue with out too much rework. Hopefully this write up gives people some insight into ideas on how to leverage the excellent NServiceBus framework to help solve integration and high through-put scenarios.
by community-syndication | May 20, 2010 | BizTalk Community Blogs via Syndication
In case you missed the Application Infrastructure Virtual launch today (you can go watch it on demand), Microsoft has made available:
- BizTalk Server 2010 beta, get it here (note that the ESB Toolkit 2.1 beta is on that page also)
- The Windows Server AppFabric release candidate, get it here
You can read the official announcement on the BizTalk team blog, and also here at the Endpoint blog.
Make sure you check out the new mapper functionality in the BizTalk, it ROCKS! What seems like a simple problem quick deteriorates into some very complex UI issues, and the team has really done a great job in providing a UI that nicely addresses those challenges, and more.
One of the coolest features of the mapper is the new “indicate match” capability. In the screen shot below, I right-clicked the “PO403” node, the mapper thought “PONumber” was the best match, but that the other “PONumber” and “PODate” were also possible matches. Very very nice!!
Happy downloading!!