BizTalk ESB Toolkit 2.0: Exception Management Gotchas–Create the Fault Message in the Right Place
I’ve been having a lot of fun lately with the ESB Toolkit. It’s got lots of great features, including Exception management which, by far, surpasses any framework that’s already out there. However, one small issue I’ve encountered is that when using the Exception Management framework, you must only create your message inside an Exception handler in your orchestration.
Code such as this:
FaultMsg = Microsoft.Practices.ESB.ExceptionHandling.ExceptionMgmt.CreateFaultMessage();
Anywhere besides inside an exception handler will cause your CPU to max out and your orchestration to hang indefinitely. On one occasion, I’ve seen the process complete, but that was when I started it on a Friday afternoon and left for the weekend to find it errored out on Monday morning. Other times, I’ve had to terminate the orchestration and then restart the host instance to clear it out and return my CPU to a less-stressed state.
I solved this issue by creating an exception object and throwing it when I hit a state in my orchestration that meant we shouldn’t go on anymore. If you want to send a fault message and just keep on going, I’m afraid you’re out of luck. One other caveat–you must use the generic System.Exception class when generating your custom exception to throw. If you don’t, the ESB framework will throw an exception similar to this:
Error 115004: An unexpected error occurred while attempting to retrieve the System.Exception object from the ESB Fault Message.