Charles Young

  Home  |   Contact  |   Syndication    |   Login
  109 Posts | 43 Stories | 215 Comments | 406 Trackbacks

News

MVP - Microsoft Most Valuable Professional

Article Categories

Archives

Post Categories

Image Galleries

Alternative Feeds

BizTalk Bloggers

BizTalk Sites

CEP Bloggers

CMS Bloggers

Fun

Other Bloggers

Rules Bloggers

SharePoint Bloggers

Utilities

WF Bloggers

Wednesday, November 12, 2008 #

I spent some time today looking at Microsoft's Enterprise Service Bus (ESB) Guidance Toolkit, and this reminded me of an issue which we noticed a year ago, and did attempt to raise with Microsoft at the time, but which I never blogged about.   It's always a little uncomfortable taking the good people at Redmond to task, but, while this is hardly the most urgent problem facing today's world, it is, nevertheless, a bit of a problem and something which should be addressed.

In the article, I discuss the problem, where the Toolkit goes wrong, how UDDI should be used, and a possible remedy.    The article is at http://geekswithblogs.net/cyoung/archive/2008/11/12/126975.aspx.


Tuesday, October 21, 2008 #

I'm delighted to report that Microsoft is currently asking for responses to an on-line survey on the use of Microsoft BRE - delighted because it indicates that serious thought is being given to the evolution of this technology.    If your organisation uses MS BRE, do please take a few minutes to provide feedback.

The survey is at:   https://live.datstat.com/MSCSD-Collector/Survey.ashx?Name=BRE_Usage_Survey_Blog

The only issue I would highlight is that the survey deals mainly with present and past use of MS BRE, and not about how its use could be extended in the future.

 


Wednesday, October 15, 2008 #

The last couple of weeks have seen a significant increase in terms of announcements and information from Microsoft ahead of the Professional Developer’s Conference next week.   It is a key time for Microsoft’s Connected Systems Division (CSD) as they go public with their plans for .NET 4, Oslo and ‘Dublin’.  Microsoft’s announcement of Dublin led immediately to an interesting, if somewhat predictable, debate within the company I work for, and I think it is worth going over some of that territory here.

 

http://geekswithblogs.net/cyoung/archive/2008/10/15/125848.aspx


Friday, September 05, 2008 #

Microsoft announced BizTalk Server 2009 today, and gave the green light to talking about the new version.    It’s due for release in the first half of next year, and is shaping up nicely.    Microsoft is casting BizTalk Server 2009 as a major new version in its own right, rather than just an updated 'release' of BizTalk Server 2006.   This is an important move, and one I strongly welcome.   There is certainly enough in BizTalk Server 2009 to warrant thinking of it as a major revision of the product, although it retains the same familiar functionality and tooling we have been using since 2006 (or even 2004).

I've been fortunate in getting my hands on the current non-public CTP in the last month or so, and putting aspects of the new version through its paces.   It's not wise to go into much detail about this first CTP because some of those details will doubtless change in forthcoming betas, driven in part from the feedback Microsoft is getting.   However, I will say a little about the new development and build features and expand just a little on the press releases.   These are the areas I have been looking at in depth.

BizTalk Server 2009 will ship with bindings for Visual Studio 2008, and you will need to upgrade to this version of the IDE if you are still using Visual Studio 2005 (which you will be, of course, if you are a BizTalk Server 2006 user).  It happens that, in previous months, I've seen more than one BizTalk shop where developers are having to run both versions of the IDE side by side in order to continue developing for BizTalk Server 2006 whilst exploiting features like WCF and WF in .NET 3.5.   For many, the changes in BizTalk Server 2009 will come as a relief.   This is not a cynical ploy by Microsoft to force people into upgrades for no additional benefit.   The move to Visual Studio 2008 is accompanied by a very welcome move to a new project format, bringing BizTalk Server 2009 into line with mainstream .NET development.   The new BizTalk project type is defined using MS-Build, just like C# or VB.NET projects.   This has major implications in a number of areas.   First, it means that, if you use TFS Build, you can now build BizTalk Server 2009 projects without having to write complex scripts that shell out to DevEnv.    Just like C# projects, you can let TFS Build do the majority of the grunt work for you, and concentrate your attention more fully on ensuring that your automated build scripts are comprehensive and robust.   This is worth the upgrade in its own right, and removes a major source of current irritation.   Thanks to the rough edges in the current CTP, one of my colleagues has had the opportunity to get to grips with this side of BizTalk Server 2009 in some depth, and we can report that it is all looking very good indeed, once a few remaining gremlins have been chased out.

The other aspect of BizTalk Server 2009 which we have spent some time on is unit testing and debugging.   In one sense, this is not really so much about new functionality, but more about bringing what has previously been considered 'black-belt' into the mainstream.    In Biztalk Server 2006, we currently use BizUnit to drive black-box (grey-box?), end-to-end testing, but we have also created some additional code of our own to support unit testing of BizTalk maps, schemas and pipelines.    Similarly, if you know the undocumented registry key in BizTalk Server 2006, you can get BizTalk to retain the generated C# code for debugging purposes, manually attaching to BtsNtSvc.exe processes in order to debug into orchestrations, etc.    This has proved a life saver in certain situations.  The new version of BizTalk Server is now designed to support these approaches seamlessly.   Of course, it is designed to work with the integrated unit testing features of the IDE, rather than BizUnit.   There are currently some outstanding questions with regard to the debugging support which I won't go into here, because they simply reflect the unfinished state of the first CTP.   However, unit testing certainly works smoothly with BizTalk Server 2009 projects, and will help to raise the bar in terms of the approach that is taken to development of BizTalk solutions.   Again, I will avoid going into further here because I will hit issues that are still to be fully resolved, but things are generally looking good.

I have only mentioned those areas of BizTalk Server 2009 which I have been looking at in any depth.   There is a lot, lot more.   One thing I will monitor closely is the inclusion of ESB Guidance 2.0.   I have some problems with some aspects of ESB Guidance 1.0, like the unfortunate way in which the UDDI resolver violates the UDDI standard!    However, having spent the last year doing little else but designing and implementing service bus patterns using BizTalk Server and WCF (or, in one case, WSE), I regard the inclusion of ESB Guidance 2.0 as a really intriguing, and hopefully worthwhile, aspect of the new version.    It is also intriguing that Microsoft has decided to release their implementation of UDDI 3.0 as part of the BizTalk package.   Let no one tell you that BizTalk has no role to play in building service buses, or that it is to be regarded as 'merely a hub-and-spoke message broker'.   In my experience, the exploitation of the dynamic features of BizTalk (dynamic ports, BAM interception, the rules engine, etc.,) in a rigorous, policy-driven fashion provides good support for implementing many of the core patterns described within the world of ESB.   The core design of BizTalk Server predates later ESB thinking, but is much better aligned to it that some people will admit.

Roll on 2009.


Monday, July 28, 2008 #

IBM has announced plans to buy ILOG for $360m, subject to antitrust scrutiny.   ILOG specialises in rules-based processing centred on their JRules engine.   Although it has been obvious for some time that ILOG was interested in being purchased, the news still came as something of a surprise.    In recent times, they have been pursuing a greater presence in the .NET world, releasing a .NET version of their engine, becoming a Microsoft Global ISV partner and joining Microsoft's prestigious Business Process Alliance.    Not surprising, then, that a few months ago there were rumours circulation of an impending purchase of the company by Microsoft.   I have to say that, when I put this to a Microsoft contact a few months ago, it was strenuously and unequivocally denied that any such deal was being, or had ever been, considered.    I have no idea if there was ever any truth in the rumour.   Still, I can't help wondering if an opportunity has been missed.
 
Now that the company is to be bought by IBM, and their technology is to be incorporated into WebSphere, I wonder what will become of their partnership with Microsoft and their .NET offering.

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