Charles Young

  Home  |   Contact  |   Syndication    |   Login
  104 Posts | 41 Stories | 355 Comments | 406 Trackbacks

News

MVP - Microsoft Most Valuable Professional

Article Categories

Archives

Post Categories

Image Galleries

Alternative Feeds

BizTalk Bloggers

BizTalk Sites

CMS Bloggers

Fun

Other Bloggers

SharePoint Bloggers

Utilities

WF Bloggers

Tuesday, February 26, 2008 #

Jurgen Willis, who is Group Program manager of Microsoft's Connected Framework Team over in Seattle, has been in touch, and I offered to forward his request on via this blog site.   Microsoft is currently looking for people to work in their rules area (WF Rules, etc).   They are specifically looking for a Program Manager and a Development Lead

There are lots of exciting plans regarding the evolution of WF Rules, and lots of rumours currently about how rules will be handled in Oslo.   Now is an excellent time to work for Microsoft in the Connected Systems Division, and especially to work on their rules offerings.   If you are interested, or know someone who might be, drop me a line via this blog site.   I will forward details on to Jurgen.   Otherwise, contact Microsoft direct.
 
Jurgen mentioned some other posts including:
 

Wednesday, January 23, 2008 #

Being known for my interest in rules processing, I quite often get asked to help with problems with MS BRE.   A couple of days ago, I was asked to help investigate an issue occurring in production for a BizTalk Server application.   Occasionally, in a fairly high throughput system, BizTalk logs an error stating that a problem has been encountered while executing a rule set.   That is the only information provided, with no hint of what the problem might be, and because the issue only occurs intermittently under real-world conditions in the production environment, it was not obvious how to obtain further insight without disrupting live operations.

This article investigates one way of handling this deilemma through the use of the compensation handling feature of Microsoft's Business Rules Engine.   It goes on to discuss the broader use of compensation handling in rule processing.

http://geekswithblogs.net/cyoung/archive/2008/01/23/118804.aspx


Sunday, January 13, 2008 #

A question came up tonight on BizTalkGurus on my favourite subject of rule engines.   I don’t blog enough these days, so this gives me an excuse.    Essentially, the question concerned an incorrect, but understandable, suspicion that MS BRE may be using remoting to execute rule sets out-of-process.   This is not the case.    You can find an article describing what actually happens at:
http://geekswithblogs.net/cyoung/archive/2008/01/13/118506.aspx

Saturday, December 01, 2007 #

The recent release of Visual Studio 2008 and .NET Fx 3.5 is causing some confusion.    Microsoft released these two technologies together for good reason.   The wonderful new LinQ technologies introduced in .Net 3.5 rely on explicit compiler-level support, and therefore require LinQ aware compilers in Visual Studio.   The new version of visual Studio provides these compilers, allowing developers to take advantage of the new monadic syntax. In addition, Visual Studio has several new features designed to make it easier to exploit NET 3.5 features such as Ajax and the foundation libraries (WCF, WF and WPF).

The problem is that by tying the release of .NET 3.5 to Visual Studio 2008, the impression is given that, unless you are ready to upgrade to the new version of the IDE, there is no point thinking about upgrading to the new version of the framework.    This is simply not the case.   The .NET framework does not have any built-in dependency on Visual Studio, let alone a specific version of Visual Studio.   More to the point, Microsoft has long since split the versioning of the framework from the versioning of the run-time environment. .NET 3.5 continues to exploit version 2.0 of the CLR. Visual Studio 2005 is perfectly happy to compile your code against .NET 3.5 assemblies.   They are just assemblies.   Even more compelling is the realisation that most of the assemblies in .NET 3.5 are identical to those in .NET 3.0 (same version number).   There are some new assemblies with new features. .NET 3.5 is just .NET 3.0 with extra stuff.

Why is this important?   Well, not everyone is ready to upgrade to Visual Studio 2008.   Apart from the expense this involves, consider the dilemma of BizTalk Server developers.   Currently, there are no Visual Studio 2008 bindings for BizTalk Server (i.e., you can't create BizTalk Server project types in the new IDE).   This, we are assured, will be addressed at some point, but that could be months away.    For the time being, BizTalk developers are stuck with Visual Studio 2005 :-( Hence, some people are currently discounting the possibility of using .Net 3.5 because they believe, quite incorrectly, that it requires an upgrade to Visual Studio 2008.

There are issues, of course.   As well as the absence of compiler support for LinQ, Visual Studio 2005 does not have access to various new project and file templates and tools that support the new version of the framework.   Developers may need to do more coding in Visual Studio 2005 than would be necessary in Visual Studio 2008.   This is often a small price to pay, however, in order to access the improvements in 3.5.    As an example, consider the new integration between WF and WCF, provided in the new System.WorkflowServices assembly.   The integration is provided via the new WorkflowServiceHost class and a couple of new activities.   Visual Studio 2008 has new template support for building workflow services, and comes with a very useful new WCF test harness.   However, exploiting this new functionality in Visual Studio 2005 is trivial.   Create a WF workflow library, add a reference to System.WorkflowServices and add the new activities to your tool box.   Finally, use the WCF Service template to add a service class to your project and you are just about in the same position as you would be in Visual Studio 2008 if you used the new Workflow Service project template.   You'll need to write a couple of lines of code to use WorkflowServiceHost to host your service, of course.   Off you go, and enjoy .NET 3.5.


Tuesday, October 30, 2007 #

Noon (Redmond time) on Tuesday 30th October marks the moment in history we can begin to talk publically and openly about Microsoft’s 'Oslo'.   Oslo is the codename for the next generation of Microsoft's SOA platform...'Microsoft SOA vNext' if you will.   It is a huge vision, and one which Microsoft is throwing some serious resource at.   Their strategy will unfold over several years, but the first public view has been provided today. 

Get more details at http://geekswithblogs.net/cyoung/archive/2007/10/30/116456.aspx


Tuesday, October 09, 2007 #

Earlier this year, Microsoft released a CTP version of a new technology stack called 'BizTalk Services'.   In July, they updated this with a new release.    It is only now, at long last, that I've got around to playing with BizTalk Services, thanks to the gentle pursuasion of my colleague, Andy James (CTO at SolidSoft).   I must say that I am very pleased that Andy applied some pressure.   This is a really interesting development in the BizTalk world, and having now had a chance to stub my toe against the tyres (I'll leave the full-blown kicking until a future date), I feel rather excited about the possibilities this technology opens.

I have provided an overview of BizTalk Services at http://geekswithblogs.net/cyoung/archive/2007/10/09/115944.aspx.   I have also written an article on the Identity Service that is part of the stack.   This is at http://geekswithblogs.net/cyoung/archive/2007/10/09/115943.aspx.   I have published some notes on solving problems when installing the SDK.   These are at http://geekswithblogs.net/cyoung/archive/2007/10/09/115942.aspx.


Sunday, September 16, 2007 #

Like most BizTalk Server developers I am addicted to the use of DebugView.   This, in case you are one of the three BizTalk developers out there who are still not aware of it, is a free utility written by the SysInternals people.   Microsoft bought SysInternals a while back, and the utility can now be downloaded from their web site at:
http://www.microsoft.com/technet/sysinternals/utilities/debugview.mspx
DebugView provides a viewer for traces created using the Win32 OutputDebugString() API. You can liberally instrument your .NET code using calls to System.Diagnostics.Debug.Write<xxx> methods, then open up DebugView and run you code.   The output is nicely displayed in the DebugView console. For BizTalk developers, this is an indispensable tool because there is no way to single-step through XLANG/s expressions.   The Orchestration debugger is built on top of the orchestration engine, and is not a 'true' Win32 debugger.   It can only single-step through interactions between the orchestration and the orchestration engine which occur at a much coarser level of granularity than individual lines of XLANG/s code.
I've spent the last couple of weeks pretending to be an ASP.NET 2.0 developer.   The code I was writing does a fair amount of re-direction.   It supports a number of different log-in models based on the Forms Authentication model in ASP.NET 2.0, but integrated with a remote identity provider.   The code is 'proof of concept' stuff, and supports different ‘candidate’ approaches, including the ability to switch to local authentication in order to demonstrate the code in scenarios where we have no remote connectivity.   To begin with I (rather stupidly, in hindsight) was trying to develop using the new Web Site project type in Visual Studio.   Oh dear.   I needed to use SSL sessions to debug the code because we are using CardSpace.   You can't do this under the local web server.   I tried, without success, to debug my code under IIS, but found that, for some reason, I was unable to attach to IIS worker processes!   Then, I really came unstuck when ASP.NET completely lost the ability to debug.   It was creating pdb files OK, but one of them appeared to be corrupted somehow each time it was built (for example, no version number), and Visual Studio insisted that I had no symbols loaded, even though the Module window clearly showed that I did!
I gave up, and ported the code over to a Web Application project.   I still have problems.   Visual Studio currently reports a set of spurious build errors 'dynamically' while using the designer (these change dynamically over time even if I don't touch the keyboard - yes I mean it! I just sit there and stare at the screen for a minute or two and see the error messages change before my eyes), but then builds and publishes the application anyway.   It has lost the ability to see Master Pages if I use generated paths with the '~' specifier. It has also become hopelessly confused in regard to a custom control that I am using - a problem, incidentally, for which there are hundreds of hits in Google, but only one conclusion - 'tough - it's a long-standing bug - you can't fix it and there's no known workaround - rebuild your project from scratch'.   Apart from that, the Web Application works OK, and I can now debug my code smoothly under SSL sessions.   A good lesson learned.   I certainly won't use Web Site projects in future, and will try not to use ASP.NET unless I have to, until such time as Microsoft sees fit to stabilise the design-time ASP.NET tools.
[Update: I had another go at clearing the persistent "Unknown server tag" problem, which is the issue I reported above with the custom control.   I tried (yet again) a whole variety of approaches, including registering the control via the web.config file, rather than using the @Register directive.   I eventually hit on an approach which seemed to work.   I recompiled the control using a strong name.   I had tried this before, but when I GACd the assembly, I got a new error in which ASP.NET reported confusion at runtime over having two copies of the assembly (one in the ASP.NET TEMP folders and one in the GAC).   So this time, having encountered the same problem, I simply removed the control from the GAC (duh).   And suddenly I can use the control in the designer again!   As far as I am aware, this is the only change I have made (of course, you have to update the assembly name in the @Register directive to the strong name).   I note that Visual Studio automatically updates an assembly reference for the control in the web.config file.   Of course, everything was originally working fine for some time with a simple-named version of the same control (I haven't changed the control code in any way), so I fully expect everything to break down again for no apparant reason].
[Update 2: Oh yes.  As predicted.   Within an hour or two the designer magically lost its ability to handle my strongly-named version of the control.   How do ASP.NET developers cope with this day in, day out?]
The point of this, apart from letting off steam about the general flakiness of ASP.NET 2.0 under Visual Studio 2005 SP1 (it's horrible), is that while developing using the Web Site, I needed to use DebugView quite extensively.   Even now, it is of some use due to the re-direction.   I can trace my code in one page, even though this page redirects to another so that I can't see my trace output using the built-in tracing features of ASP.NET.   DebugView shows me what I need to see, as long as I remember to place '#define DEBUG' statements in my 'CodeBehind' files.
I ran into a problem with DebugView which I have seen before.   I've been trying to research it to come up with a definitive answer, but I don't know the underlying cause - just the symptoms.   My problem is that my ASP.NET code runs in a different session to the desktop.   This means that the output does not appear in DebugView unless I enable the 'Capture Global Win32' option.   However, this option was not available in DebugView.
At this point, I should say that I am developing on Windows Server 2003 R2.   I run Vista on my notebook.   When I open the same version of DebugView on my Vista notebook, I can see the 'Capture Global Win32' option.   However, I can't see it when I run DebugView on the Windows Server 2003 box.
I was tearing my hair out over this one, and it isn't the first time I have run into this problem.   I spent some time trying to find an answer on Google.   I didn't turn anything up, but somewhere I read something about remote connections.   I had a thought.   I powered up a Remote Desktop session to my own development box and then opened DebugView.   Success!   The 'Capture Global Win32' option appeared, and once selected, DebugView started happily displaying the output from my ASP.NET application.
This approach cannot be used on XP (or, I think, Vista) because, even with SP2, XP does not support concurrent remote desktop sessions.   Apparently, Microsoft was going to lift this restriction at some point, but then decided not to.   As I say, when running DebugView under Vista, I don't get the problem anyway.
I experimented further with DebugView by setting up a 'client' instance (surely this should be termed a 'server' instance') and then connecting to this on the same machine.   In my first attempt, this appeared to work, but when I tried to reproduce the approach the following day, it failed.   The Remote Desktop approach works every time though.
As I say, I don't currently have an explanation.   I know, from Googling, that there are some interesting issues when using OutputDebugString regarding the permission set granted to an underlying Mutex.   Maybe the behaviour of DebugView has something to do with this.   Maybe the explanation is simpler.   It may have something to do with having another registered debugger in the same Windows session.   I'm not sure.   What I do know is that remoting into your own desktop on Windows Server 2003 works very nicely indeed.

My fellow BizTalk MVP, Leonid Ganeline, asked if I would comment further on mechanisms to govern sequential flow in rules in MS BRE.    He was picking up on some comments I made in my article comparing WF and MS BRE rule performance (see http://geekswithblogs.net/cyoung/archive/2007/08/12/114597.aspx#143628).
What I had in mind was the use of state transition patterns within rule sets.   These can be used to layer a degree of sequential control over the set-based pattern matching approach taken by engines like MS BRE.   The basic pattern is simplicity itself, and very common.     What I generally do is assert an additional 'context' fact to the engine (typically some custom .NET object) in which I maintain a state specifier (e.g., a simple string property).   I can then group rules together to match specific states, and use a low-priority rule in each group to change the state.   The 'sequential' flow is then governed by the state transitions.   Of course, any single group of rules that match the same state do not operate in a sequential fashion amongst themselves.   However, you can always just have one main rule per state if you wish.   Here is a very, very simple example of the kind of pattern I have in mind.

/*********************************************
 * Group 1 - 'Started' state
 ********************************************/
 
Rule 1
IF
 AND
    Context.CurrentState == "started"
    MyFactA.Property1 > 5
    MyFactB.Property1 < MyFactA.Property
THEN
 MyFactB.Property1 = MyFactA.Property1
 assert MyFactB
 
Rule 2 (priority -1)
IF
 Context.CurrentState == "started"
THEN
 Context.CurrentState = "initialised"
 assert Context
 
/*********************************************
 * Group 2 - 'Initialised ' state
 ********************************************/

Rule 3
IF
 AND
    Context.CurrentState == "initialised"
    MyFactA.Property2 == "USA"
THEN
 MyFactA.SetCountryCode("01")
 
Rule 4
IF
 AND
    Context.CurrentState == "initialised"
    MyFactA.Property2 == "UK"
THEN
 MyFactA.SetCountryCode("44")
 
Rule 5 (priority -1)
IF
 Context.CurrentState == "initialised"
THEN
 Context.CurrentState = "completed"
 assert Context
 assert MyFactA  // convenient place to re-assert MyFactA 
                        // to avoid loops if, for example, 
                        // MyFactA.SetCountryCode() changes the 
                        // state of MyFactA.
 
/*********************************************
 * Group 3 - 'Completed' state
 ********************************************/
 
Rule 6
IF
 AND
    Context.CurrentState == " completed "
THEN
    MyFactA.Property1 = 0 
    MyFactB.Property1 = 0
 
/********************************************/

The low-priority ‘state transition’ rules are rules 2 and 5.   Group 2 contains two main rules, whereas the other groups have just one main rule.
Personally, I think MS BRL (and the Rules Composer) should provide a built-in abstraction for this design pattern - i.e., provide a way of grouping rules by state, and declaring how to transition to a new state when a group has completed its work.   If this was supported, it would not be necessary to explicitly define an additional low-priority rule in each group.
This design pattern can be a little difficult to maintain in MS BRE currently because the rule composer displays rules in alphabetic order in the UI, regardless of the order in which you created them, and so you cannot see the groupings and state transitions.   The answer to this, of course, is to adopt a rule naming convention which makes the pattern more explicit in the UI.
I used this design pattern recently when creating a rule set for applying Bayes Theorem.   See   http://geekswithblogs.net/cyoung/archive/2007/08/27/114988.aspx.   The rule set was written for other rule engines (Jess and CLIPS), but uses exactly the same principle.   I have ported the rule set to MS BRE, but just need to clear a potential commercial hurdle before publishing the code.
You can download a slide set for a presentation I gave earlier this year at an architect's conference from http://download.microsoft.com/documents/uk/msdn/architecture/architectinsight/2007/collaboration/COL01-Rules-Processing-in-Business-Processes.ppt.   There is a slide in the set which illustrates how a declarative rule set might map onto a process (I've used a BizTalk orchestration to represent the process).

Thursday, September 13, 2007 #

I had an unpleasant time yesterday afternoon re-stabilising an ASP.NET 2.0 application after it went berserk.   I don't do that much coding in ASP.NET these days, but when I do, I seem to run into lots of problems. A fellow developer on the same project wasn't very helpful or sympathetic - he sat there and informed everyone in a loud voice that he'd just come off another project where he'd built a much larger ASP.NET app without any problems at all.   Yes, thanks for the support!

I had several problems layered on top of one another, including those strange issues where Visual Studio 2005 seems to get into a complete mess somehow with assembly references. I also saw evidence of Visual Studio putting incorrect duplicate file references into the project file. Killing every bin and obj folder and deleting the entire contents of the Temporary ASP.NET Files folder helped no end. However, I had one problem that I couldn't clear for ages.   Certain .aspx pages constantly reported errors associated with their @Page directives.   One page, in particular, constantly reported this error (even after I had re-built the page from scratch), and others intermittently reported the same error!   The error message stated that:

"There is no build provider registered for the extension ''. You can register one in the <compilation><buildProviders> section in machine.config or web.config. Make sure is has a BuildProviderAppliesToAttribute attribute which includes the value 'Web' or 'All'."

Why on earth would I need to register a build provider for non-existent file extensions?   The problem seemed also to manifest itself in an inability to find a master page unless I provided a fully qualified path name.   Another strange thing was that sometimes a different error would be reported by Visual Studio saying that part of the path to the web application directory could not be found.   Needless to say the path was correct and present.   The problem survived cleaning down the project and rebooting the system. 

I tried everything I could think of to solve the issue.   Nothing worked until, by trial and error, I hit on a solution.   In Web.Config, I added the following buildProviders extension entry to the compilation element:

    <compilation debug="true">
      <buildProviders>
          <add extension="*" type="System.Web.Compilation.PageBuildProvider"/>
      </buildProviders>
    </compilation>

Success!   The problem disappeared.   I then had the presence of mind to IMMEDIATELY go back and comment out the buildProvider entry. The problem did not come back!   Whatever happened when I added the build provider seems to have solved the underlying issue.

I can't explain the cause, but I can see a few reports of the same delinquent behaviour when I Google.   Hopefully this will be of help to someone out there.   I really do hope Microsoft has put some effort into stabilising Visual Studio 2008 rather than just concentrating on adding features.

Also, before someone asks, yes, I do have Visual Studio 2005 SP1 installed, and yes, I am using a Web Application project rather than a Web Site project.


Tuesday, August 28, 2007 #

I had an interesting time yesterday writing a rule set in order to demonstrate that Bayesian analytics can be combined with rule processing in an entirely natural fashion.   Armed with an understanding of how a rules engine works, I also believe that it is entirely possible for a Rules Engine to implement and apply Bayes theorem in an efficient manner.   I wrote the rule set for a Java-based rule engine called Jess, so please note this is not a BizTalk-related post.   

My reason for writing the rule set was to counter some statements published on the Complex Event Processing Blog site, including references to a 20-year old academic paper that appears to claim, incorrectly, that rules engines cannot efficiently handle the concept of uncertainty.    Bayes theory is one way of handling dependencies amongst uncertain beliefs (i.e., calculating the probability (and changes to probability) of the accuracy of hypotheses based on uncertain beliefs and evidence).   Another approach to handling uncertainty is to employ 'fuzzy logic', which I found myself demonstrating to a client (using MS BRE) just last week.   But that's another story...

If you are interested in this rather obscure discussion, please read on at http://geekswithblogs.net/cyoung/archive/2007/08/27/114988.aspx

 


Tuesday, August 14, 2007 #

I’ve been asked a few times how the performance of WF (Windows Workflow Foundation) Rules compares with that of the Microsoft Business Rules Engine (MS BRE).   Having done no testing, I could only guess at the answer.  
I’ve now undertaken some initial performance testing to compare WF and MS BRE, and decided to publish the results.    You can read my write-up of the results here.
 
http://geekswithblogs.net/cyoung/archive/2007/08/12/114597.aspx

Thursday, July 19, 2007 #

I got an email today requesting help in deciding the appropriate selection of rule processing technology for a workflow application.   I’ve got requests like this before, so I’ve decided to post a reply publically.

http://geekswithblogs.net/cyoung/archive/2007/07/19/114061.aspx.


Wednesday, May 30, 2007 #

Apologies if anyone has been experiencing IE7 crashes when trying to read articles on this site (though I don't really see why I should apologise for IE7 crashing!).   As far as I can tell, this seems only to affect IE7 users on Vista.   IE7 on XP appears to be unaffected, and Firefox is OK.   The problem appears to be related to having a 'blogmap', although it only affects certain pages (articles, rather than posts).   I've removed my blogmap, and the problem appears to have gone away.

 

If anyone has any further problems, please contact me via the site (once you've recovered from a crashed IE7 instance, that is!).

 

Update: The problem continued to re-occur, although far less frequently.   So I played around some more.   I had switched on the Subtext CoComment feature.   I switched this off, and things got much more stable.   So, something about CoComment support in SubText seems to cause an IE7 crash.   I've put the blogmap back in.   Seems to be working OK.


Tuesday, April 10, 2007 #

I posted an article on MS BRE side effects yesterday.   I had immediately to withdraw it for a few hours because I realised it was incomplete (and actually a little wrong) in one part.   Then I noticed I had swapped the legend text on the graph making it appear that caching made things slower, rather than faster!   I then discovered today that for the last three years I have been completely ignorant of the fact that you can drag and drop object constructors onto the 'assert' argument in the Rules Composer in order to expolit the built-in CreateObject function!   Big red face.   I have changed the offending paragraph where I moaned at Microsoft for not providing access to this functionality!   Given the number of times I have complained about the lack of comprehensive documentation for BizTalk and related technologies, it is ironic that Microsoft has documented this particular feature very cleary indeed, and even given a brief description of what happens behind the scenes!   I am suitably chastened.

The updated article remains at http://geekswithblogs.net/cyoung/articles/111169.aspx.   If anyone spots any other artefacts of my ignorance or inattention, do please let me know!


Monday, April 09, 2007 #

For almost two years now, I've been intending to write an article about the mysterious 'side effects' flag used in Microsoft Business Rule Engine policies. Microsoft documents this feature (see http://msdn2.microsoft.com/en-us/library/aa559124.aspx), and describes very briefly how to control it. The mystery that surrounds this flag arises because it is represented by an attribute named 'sideeffects' in Microsoft's BRL (Business Rule Language) although it actually controls a caching mechanism,

Wednesday, April 04, 2007 #

I recently had reason to revisit the exact mechanisms Microsoft use when you assert facts to the Microsoft Rules Engine.   I was discussing stuff on-line with a fellow rules enthusiast when a terrible thought occurred to me.   Can the MS BRE always uniquely identify each different fact, or is there a chance that sometimes it might confuse two facts with each other?

For a couple of days, I was convinced that I had stumbled on a significant bug.   Indeed, at one point, I thought there was such a serious problem that I would have to recommend to my company that we desist from any further use of Microsoft’s rules engine.   Melodramatic, huh!    Fortunately, after a bit more research, I discovered that I was quite wrong.   The MS BRE does not suffer from a terminal flaw and can be trusted to always distinguish correctly between all your facts.   It’s worth recording my suspicions, mistakes and eventual enlightenment.   There is something useful to learn, here, about the inner workings of the engine, and also about Microsoft’s implementation of the Hashtable class in .NET.   

Read more at http://geekswithblogs.net/cyoung/articles/110852.aspx


Thursday, March 15, 2007 #

Day three of the MVP summit was held at the Microsoft Campus.   Things started badly with a long and slow bus ride through heavy traffic leaving me with no time for breakfast when I finally arrived at the conference centre.   I boarded the shuttle for building 43 to find most of my fellow BizTalk MVPs (the ones who have been staying in downtown Seattle since the weekend) equally late, and we arrived en masse about 15 minutes into the first session.    Jesus Rodriguez was on his feet presenting the forthcoming WCF adapter SDK with a particular focus on building LOB adapters with metadata harvesting and dynamic, consumer-orientated contracts.   Sonu Arora presented code examples.

After a frantic and barely successful search for coffee, I sat through the next session with Gruia Pitigoi-Aron.   This continued the focus on the new adapter framework, discussing the development of custom WCF channels from the perspective of BizTalk developers.   Custom channels can be exploited in BizTalk land using the WCF Custom Binding adapter that will ship with R2.   Gruia sees this as a new extension approach to be used alongside custom code in orchestrations and pipeline components.      I need to do more thinking at some point about this approach.   Although the adapter allows custom channels to interact with the BizTalk message box, this does not mean that you automatically get the recoverability and tracking you might need in a real-world solution.   The appropriate use of this new facility will, I trust, become clear as we begin to apply it for real.

Next up was Marty Wasznicky discussing the BizTalk Server disaster recovery model and support for high availability.   Microsoft has certainly improved this side of things, and we saw a good demo (slightly cursed by the demo gods at the end) of a BizTalk installation being recovered.   Marty had to present under the eagle-eye d scrutiny of Lee Graber who, although now working with the SQL Server product team, joined us for part of the day.  I was amused by Lee’s comments about BizTalk’s feature history.    ‘No’, he said on more than one occasion, ‘that feature wasn’t introduced in BTS 2006; it was in BTS 2004 SP2’.   Ah, the voice of authority.

Not being a system administrator, I was suitably impressed by the DR features that Marty demonstrated.   This was, however, the subject of some discussion later in the day, with alternative viewpoints and strategies being discussed.    The inability to support SQL Server mirroring was a matter of some concern.    Again, BizTalk DR is a subject I need to look more deeply into.

After lunch, we were briefly back to adapter-land with a presentation by Tapas Nayak looking at Microsoft’s new WCF SAP adapter.   This was especially interesting in terms of seeing the application of dynamic contract creation features in the new framework.

The direction of the day now changed with a fascinating presentation by Pravin Indurkar on the next release of WF.   This will be part of .NET 3.5 which will ship in the ‘Orcas’ time frame.   Pravin discussed and demonstrated a number of extensions that more closely integrate WF and WCF, allowing workflows to be exposed as services via WCF bindings and behaviours.   WF will include new Send and Receive activities, and will support a context exchange protocol that will support a wide spectrum of service-orientated interaction patterns, including ‘conversations’ similar to patterns used in SQL Server Service Broker.   This is very powerful, and I couldn’t help thinking that, conceptually at least, we were seeing something of a stepping stone on the way to integrating .NET 3 into a future version of BizTalk.    WF 2.5 will support durable services via a persistence provider, and may even offer BizTalk-like features such as property promotion.  

Next up was Paul Andrews, a Microsoft product manager, who discussed the drivers for choosing between different integration and workflow technologies (specifically BizTalk and WF).   We’ve all sat through presentations were an attendee annoys us by reacting visibly and negatively to the presentation.   On this occasion, I was that attendee, so I apologise to Paul if I made his life difficult.   However, I profoundly disagree with the line he took.   A major aspect of my work as a BizTalk consultant is to help clients understand how to best select and fit available technologies to their requirements, and I therefore want to see a Microsoft approach that is grounded in a solid understanding of the nature of specific technologies.   To me, Paul’s approach would be analogous to comparing and contrasting the IP stack to Internet Explorer, and suggesting that while IE might be suitable technology for use by ‘enterprise’ customers, an ISV would probably want to install the stack.   After all, draw up a tick-box list of features offered by IE and the IP stack, and you will see that the stack essentially offers a subset of the features you can access via your browser.    So, if you don’t have ‘enterprise’ requirements, you only need the IP stack to access the Internet.   Enterprise clients, of course, don’t need the stack.   Huh?

For IE, read BizTalk, and for the IP stack, read WF, and you may begin to understand where I am coming from on this.   Try to imagine how many minutes I would be allowed to stay in a client’s building before being marched back to the entrance if I was to take this approach in helping them to select appropriate technologies.   Maybe three?  

The point, surely is that WF is foundational.   It is a framework on which we build.   It is not a ‘product’ to be compared and contrasted with other products.   BizTalk will, in future, build on this foundation.   K2 ‘Black Pearl’ will build on this foundation.   MOSS has already built on this foundation.   MIIS is building on this foundation.   Developers will build on this foundation when implementing custom workflow solutions.   Edge servers will exploit this foundation and then interact with BizTalk which builds on this foundation and integrates with other services which build on this foundation.   You’ve got to understand the foundational nature of WF before you can realistically advise clients in regard to technology selection.   This is not enabled by plugging WF into a tick-box product comparison matrix.

OK, I bet (and hope) I get some kick-back on that.   Let’s move on.

Brad Paris and Tiho Tarnavski were next up with a session on the WCF and WF BAM interceptor extensions in BizTalk R2.   A few months ago, a colleague and I spent a couple of hours reflecting on WF in order to work out how its tracking infrastructure works.   I won’t discuss here, but it is suitably impressive.  At the time, we compared and contrasted this with the instrumentation you would need to do if using the BAM interceptor APIs directly.   I was therefore delighted to discover that the WF BAM interceptor is built on the tracking infrastructure, which means that it should prove really powerful.   There are a couple of caveats though.   The point was well made that Microsoft does not offer anything like TPE (the BizTalk Tracking profile Editor) in order to exploit interception in WF workflows.   This means that configuration must be done long-hand by editing verbose XML, and that this makes BAM instrumentation difficult.   A good point, which is, of course (yet again) a tooling issue.   I hope Microsoft takes note.   A second point is that the interceptors do not use buffered event streams.   This is potentially a killer.   I do not understand why Microsoft persists in coupling BAM buffered event streams so closely to the BizTalk message box.   Why not re-factor the technology to allow persisted events to be streamed out to any persistence provider.

Anush Kumar presented the next session on RFID.   I’m very familiar with this subject thanks to the focus we have in SolidSoft, and many conversations with Simon Holloway who heads up our efforts in this area.   I wanted to question Anush more closely on Microsoft’s story with regard to simulation and the current lack of support for ALE.   However, there was so much interest from others that I didn’t get the chance after the presentation.   Maybe I will email my questions.   I did, at least, get to raise my concerns briefly about the lack of support for rules development when using the BRE event handler, and was later able to explain this in more depth to Jon Flanders and others.

The day finished with a session on Identity Management from Richard Turner and an extra session on MIIS which is built around WF.   I’ve known Richard for many years, and I spent some time last year building a managed card demonstrator using CardSpace which we demonstrated at the Microsoft Security Summit last year, so am familiar with the technology and Kim Cameron’s laws of identity on which it is based.   I am less familiar with MIIS, so was very interested to see this demonstration.   MIIS certainly appears to provide a flexible approach to identity management and process governance.

In the evening, we got to share some quality time with members of the product team.   I met with some of the guys working the next version of BizTalk orchestration, and also had a long conversation with Clemens Vasters who, years ago, sparked my initial interest in BizTalk.   A group of us were able to articulate some of our concerns and questions about the future of BizTalk, and Clemens promised to look more closely at how roadmap information can be shared more effectively with the MVP community.

I’d love to add more and more names to my emerging list of BizTalk MVPs who I have met, but time does not allow.   It’s great to meet all you guys.

Previously posted at http://blog.solidsoft.com/blogs/charles_young_mvp_biztalk/default.aspx

Saturday, March 17, 2007 #

And so for my final report from the MVP summit.    For the BizTalk MVPs, day four started with a Q&A session with product team members.    A number of issues were discussed centred on the recurrent themes of evolving a coherent strategy across the Connected Services Division and the more effective inclusion of the MVP community into the feedback loop.   From my perspective, the BizTalk MVPs must surely be a valuable, if rather under-utilised, resource for CSD.   The collective wisdom and experience bought together in the Adams room in building 43 over the last couple of days represents decades of person-year experience in applying a central CSD product to the real-life needs of Microsoft’s customers around the globe.   Listening to the MVPs in discussions over coffee or in the evenings, there was a common set of fears, complaints, wishes and hopes, and, as Jon Fancy was saying in the airport at the end of the day, we should have far more practical, ongoing, input into the product team in order to reflect the real world back to those responsible for our favourite integration toolkit.

The first session of the day was an introduction by Tony Barnard into the new EDI support in BizTalk Server 2006 R2.   Microsoft has recognised the need to provide a much better out-of-the-box story for EDI, and R2 provides support and tooling for over 8000 schemas.  Microsoft will continue to partner with other organisations to build, for example, robust HIPAA (US health system electronic data interchange) support, and is looking at its options with regard to managing schema updates over time.

Steve Maine led the next session looking at web development enhancements in ‘Orcas’ and WCF.   Specifically, he discussed and demonstrated new support for partial trust, RESTful development, a unified model for both SOAP and POX, a data model for RSS, and AJAX/JSON support.

The general WCF theme continued with a Shy Cohen demonstrating Orcas improvements for developing and testing WCF server and client applications.   He demonstrated a new metadata-driven client test harness and the ‘autohost’ features for testing server-side code.   WCF development should be a lot easier in the future.

There was one more session, but NDA means that I cannot discuss.   Sorry.   Suffice to say that we have a lot of exciting stuff to look forward to from CSD in the future.

And that was that.   By now, the lack of sleep, jet lag and constant activity of the last few days was beginning to take its toll, and I was glad to enjoy a leisurely lunch and then make my way back to the airport and an early-evening flight back to the UK.   I can never sleep on planes (not in economy, anyway), so by Friday afternoon , back in the UK, I was shattered.   12 hours sleep later, I feel a little more human.   The MVP tee-shirt has gone to my eldest daughter.   The CSD Soduku game has gone to my second eldest (I already had one, anyway).   Other tat has been duly distributed around the family, and I plan to spend a quiet weekend catching up with my life and remembering an excellent conference and many new faces.   My thanks to Microsoft for organising a great event.


Tuesday, March 13, 2007 #

I'm in soggy Seattle at the MVP Global Summit, and, like so many of my fellow MVPs, it seems appropriate to keep some kind of daily journal - you know the form - let you know how fortunate I am to be on a big Microsoft freebie, and how unfortunate you are to, er..., not be...and, of course, get a bit of name-dropping in as well.

The first round of name-dropping has nothing to do with the summit.  A week ago I was at the Microsoft Architect Insight conference at the Celtic Manor outside Newport, Wales.   The Celtic Manor is famous for golf and is the venue for the 2010 Ryder Cup.   It is also famous, these days, for software architects working on the Microsoft platform.   This was the second year of the conference, and SolidSoft, having attended last year, was a co-sponsor of the event this year.   The conference started with a keynote from Merlin Hay who, later in the bar, entertained a group of us with his views on hereditary peerage and 'breeding' (what else - he is the 24th Lord Erroll!), and, more seriously, provided some interesting insights into the way that political decision-making happens at a national level.   Later that evening, the SolidSoft team had the pleasure of a couple of hours with Ivar Jacobson, one of the 'three amigos' (the gentlemen responsible for UML) and an early advocate of component development.  Perhaps the best thing was that, instead of deep discussions on the applicability of agile methodologies in enterprise integration, we instead talked love, live and the pursuit of happiness.   Hey, w