End-to-end tracking using BAM services and the BAM Service Generator tool

End-to-end tracking using BAM services and the BAM Service Generator tool

An integration between systems can often be view upon as a chain of system and services working together to move a message to its final destination.

One problem with this loosely-coupled way of dealing with message transfers is that its hard to see if and where something has gone wrong. Usually all we know is that the sending system has send the message, but the final system never received it. The problem could then be within any of the components in between. Tracking messages within BizTalk is one thing but achieving a end-to-end tracking within the whole “chain” is much harder.

One way of solving the end-to-end tracking problem is to use BAM.aspx). BAM is optimized for these kind of scenarios were we might have to deal with huge amount of messages and data – several of the potential problems around these issues are solved out-of-the-box (write optimized tables, partitioning of tables, aggregated views, archiving jobs and so on).

And even though BAM is a product that in theory isn’t tied to BizTalk its still a product that is easier to use in the context of BizTalk than outside of it due tools like the BizTalk Tracking Profile Editor.aspx) and the built in BAM-interceptor patterns within BizTalk. It is however fully possible to track BAM data and take advantage of the BAM infrastructure even outside of BizTalk using the BAM API.aspx).

The BAM API is a .NET based API used for writing tracking data to the BAM infrastructure from any .NET based application. There are however a few issues with this approach.

The application sending the tracking data has to be .NET based and use the loose string based API. So for example writing to the “ApprovedInvoice” activity below would look something like this – lots of untyped strings.

public void Log(ApprovedInvoicesServiceType value) 
{ 
    string approvedInvoicesServiceActivityID = Guid.NewGuid().ToString();

    var es = new DirectEventStream("Integrated Security=SSPI;Data Source=.;Initial Catalog=BAMPrimaryImportw", 1);

    es.BeginActivity("ApprovedInvoices", approvedInvoicesServiceActivityID);

    es.UpdateActivity("ApprovedInvoices", approvedInvoicesServiceActivityID, 
        "ApprovedDate", "2011-01-18 12:02", 
        "ApprovedBy", "Richard", 
        "Amount", 122.34, 
        "InvoiceId", "Invoic123");

    es.EndActivity("ApprovedInvoices", approvedInvoicesServiceActivityID); 
}

One way of getting around problem with the usage of strings is to use the “Generate Typed BAM API tool”. The tool reads the BAM definition file and generates a dll containing strong types that corresponds to the fields in the definition. By referencing the dll in the sending application we can get a strong typed .NET call. The fact that this still however requires a .NET based application remains.

The obvious way to solve the limitation of a .NET based client – and to get one step closer to a end-to-end tracking scenario – is of course to wrap the call to the API in a service.

BAM Service Generator

BAM Service Generator is very similar to the Generate Typed BAM API tool mentioned above with the difference that instead of generation a .NET dll it generates a WCF service for each activity.

c:Toolsbmsrvgen.exe /help 

BAM Service Generator Version 1.0 

Generates a WCF service based on a BizTalk BAM definition file.

 -defintionfile: Sets path to BAM definition file.
 -output: Sets path to output folder.
 -namespace: Sets namespace to use.

Example: bmsrvgen.exe -defintionfile:c:MyFilesMyActivityDef.xml 
-output:c:tempservices -nampespace:MyCompanyNamespace

The BAM Service Generator is a command line tool that will read the BAM definition file and generate a compiled .NET 4.0 WCF service. The service is configured with a default basicHttp endpoint and is ready to go straight into AppFabric or similar hosting.

This service-approach makes it possible to take advantage of the BAM infrastructure from all different types of system, and even in cases when they aren’t behind the same firewall! As shown in figure below this could take us one step closer to the end-to-end tracking scenario.

“BAM Service Generator” is open-source and can be found here.

How the WCF-SQL Adapter builds the ADO.NET connection string

How the WCF-SQL Adapter builds the ADO.NET connection string

The WCF-SQL Adapter that is part of the BizTalk Server Adapter Pack 2010 takes advantage of ADO.NET in the .NET Framework to connect to SQL Server, specifically the classes in the System.Data.SqlClient namespace. Internally the adapter uses a combination of the following URI parts and WCF-SQL binding properties to make up the final ADO.NET connection […]

The black hole called Dell Customer Support

“Total Satisfaction Return Policy”

Total Satisfaction

I was in need of a second power adapter for my laptop, a couple of days ago I went into Best Buy and they immediately told me, that for high end laptops, I really should contact the manufacturer to get the proper adapter, as any variation in wattage/voltage could potentially ruin the motherboard.

So I called up Alienware to order a second adapter for my Alienware laptop. Alienware was purchased by Dell, so I was directed to Dell Sales to make the purchase. I gave them my information they confirmed that I had a Alienware M15X, and told them I wanted a second power adapter. They were happy to take my credit card and for a price, shipped it as fast as they could to me.

Today I received the package. I did not think much to open it up and look at it, until my son kept bugging me to open it up. The shape of the converter was much smaller, and so I thought, great, less load on my back as I travel!

However just by looking at it, I noticed that this adapter was not going to work for me:

This should be a breeze, Dell has documented taking great strides to improve customer support:

In 2006, Dell acknowledged that it had problems with customer service. Issues included call-transfers[76] of more than 45% of calls and long wait-times.Dell’s blog detailed the response: “We’re spending more than a $100 million – and a lot of blood, sweat and tears of talented people – to fix this.”[77]Later in the year, the company increased its spending on customer service to $150 million.[78]

I called up Alienware support at 6:30pm and told them my situation. Technical support listened to my story and said, that they could not help me and that they would transfer me to customer support. “okay” I thought: they would be able to resolve this situation, it was a mistake, they can send me the correct adapter and give me a return slip for this one that doesn’t work. I then talked to someone at customer service, and they stated that the adapter that was sent to me was for the second generation M15X and that I owned the first generation M15X. WHAT!” Didn’t I call up Dell (who now owns Alienware) who confirmed with me my computer in their system and sent me the correct adapter?!

They then told me that they could not help me with exchanging this, as this order was generated in the sales department, and only they could rectify the problem. They then transferred me to sales.

Sales then listened to me explain: AGAIN the issue and then said that they could not help me, that I was talking to Dell Sales, and I needed to talk to Alienware, and gave me Alienwares phone number. I told them that the number they had just given me was the number I had called. I asked repeatedly to be transferred to this person’s manager, as I wanted to talk to someone who could help me. He then told me that his manager was on a call. “Fine, I will sit on the phone and listen to you breath until your manager gets off the phone to talk to me” He then proceeded to tell me that he gets paid based on how many calls he gets in a shift and that they manager was taking calls!

I told him, that I knew that, I had once upon a long time ago, worked in a call center myself, but I needed to talk to someone that could help me and follow this issue through to completion. He then told me that he could not help me and that the only people that could help me was customer support, and that the only thing he could do was transfer me.

He then transferred me to customer support. The time was 7:35 MST, which is 9:35 EST. By this time customer support is closed.

So I am here with a power chord that doesn’t fit my computer, that I paid handsomely to get, and NO ONE AT DELL/ALIENWARE can help me with.

Does anyone have any hints at who can help me? I don’t have 3 hours per day to dedicate to this, is there a customer advocate at Dell/Alienware that can champion an issue like this through the maze that Michael Dell has put in place to ensure no return customers (at least not me now), all in the name of Total Satisfaction?

New BizTalk 2010 Training from QuickLearn

Last year was a busy teaching year for me. I taught 35 BizTalk training courses to over 385 BizTalk developers and admins around the world. I received lots of great feedback from our students on ways to improve on our BizTalk Server training. This has resulted in complete rewrites of our BizTalk 2010 Developer Immersion and BizTalk 2010 Developer Deep Dive to make our BizTalk Server 2010 courses even better than ever. Here is a summary of what’s new in these two classes…

BizTalk 2010 Developer Immersion

This class is still intended for students who are new to developing BizTalk Server solutions. However, we have re-written all of the hands-labs to provide a less-traditional end-to-end scenario that I think students will really enjoy working with. We’ve also abandoned the use of step-by-step instructions in later labs. Essentially, we show students how to perform a task one time and then make the assumption that they will be able to repeat the process on their own as they progress through the course. This learning style changes the dynamic of the labs and requires students to apply what they have learned instead of just following written instructions. This makes the lab experience more challenging and much more rewarding.

Also, we have added optional challenge labs for students who want to dive deeper into more advanced BizTalk development topics during open lab time or by remoting into our lab environment after hours. For example, we have challenge labs for students who want to learn about EDI integration, how to process HIPAA healthcare documents, how to write application deployment scripts, and many more. We have also added new modules that cover tracking and troubleshooting of BizTalk run-time errors and BizTalk project planning and management.

BizTalk 2010 Developer Deep Dive

In the past we have had some problems with the leveling for the Deep Dive class. We kept getting too many students with little or no experience with BizTalk, who were not prepared for an advanced BizTalk course. As a result, students were often left behind or the instructor had to water down the training to meet their needs.

After much deliberation we finally decided that it was time to make the Deep Dive class exactly what it should be, very advanced! In this class we absolutely hit the ground running. There’s no time for “introduction to…” conversations. We assume that students already know everything that is taught in the BizTalk Immersion class and crank the dial to 11 with over 30 hands-on labs! We cover all the fun things in BizTalk like: custom components (pipeline and functoids), loosely-coupled orchestration patterns (call/start orchestration shapes, direct-bound ports), convoys, calling pipelines in orchestrations, failed message routing, and more. In fact, this is probably the most fun I’ve ever had while teaching a BizTalk class.

Whether you are new-to-product or a seasoned BizTalk developer, we have the best training to fit your needs. Check out 2011 training calendar for upcoming classes.

BizTalk 2010 on SQL 2011 CTP 1 (Denali)

BizTalk 2010 on SQL 2011 CTP 1 (Denali)

Today I kicked off an install test of BizTalk 2010 with SQL Server 2011 CTP 1 (Denali). Here is my install order, all on a single box using local accounts: Windows 7 SQL 2011 CTP 1 from http://www.microsoft.com/downloads/en/details.aspx?FamilyID=6a04f16f-f6be-4f92-9c92-f7e5677d91f9 VS 2010 Premium BizTalk 2010 This install order did produce one error when setting up VS 2010. […]

BizTalk Orchestration Error Message – Using Parallel Action – if shared data is updated in a parallel then all references in every task must be in a synchronized or atomic scope

BizTalk Orchestration Error Message – Using Parallel Action – if shared data is updated in a parallel then all references in every task must be in a synchronized or atomic scope

SCENARIO I have one scenario that at the end of the orchestration I will delivery notification to the client, one branch will send notification by SMS, another by email but both branches make user of one orchestration variable: UserProperties. When using parallel shape inside orchestration that makes uses of a given orchestration variable, you can […]

SharePoint 2010: Stranger than Strange error – “Key cannot be null.” when creating

I recently came across a SharePoint Portal that previously was working a treat up
until Christmas (just gone) and then the client got this on their Create Site
Page
:

So the good old “Parameter name: key” errorthat old chestnut I thought (like I had
any idea at that stage).
Null – is always an interesting thing. So something is going through
a collection and not finding the value, not that they should have tested for the existence
of the value firstbut we’ll leave that for another story.

Why this was happening now? I haven’t got to the bottom of it, could be an update?
security patch? SQL update? code somewhere? I find these things happen on the night
before an important release date.

So after sheer luck of me just ’doodling’ on the Create Site Page, this appears to
have fixed it:

From the highlighted area – just simply fill in the empty(null) search box EVEN though
we are Creating a Site here.

Go figure

Do I add SharePoint to the Wonders of the World list?