Handy Hint: BtsCompile

Are you looking for the build action on an orchestration, you know BtsCompile
For the uninitiated, it is great for having a BizTalk Artefact that’s broken, or not
complete and having it not form part of the compile. It works for maps, schemas,
you name it.

I generally use it to set it for some unfinished orchestrations not to include in the
build/compile, so it does not break things….

Well, as it happens, in BizTalk 2009, it can disappear, for some reason, however I have
discovered the way of making it re-appear.

Simple copy and paste ANY orchestration in your solution, and paste it back, now the
BuildAction property appears, not just for that orchestration, of ALL of them.

It’s as if it knows, if you are copying and pasting an existing orchestration you
are probably not going to want to have it build right away.

BizTalk Server 2010 Unleashed

This weekend I received my copy of the new BizTalk Server book BizTalk Server 2010 Unleashed.

This book, from the hands of elite members of the BizTalk community Brian Loesgen, Charles Young, Jan Eliasen, Scott Colestock, Anush Kumar and John Flanders is the second edition of a series that started with BizTalk Server 2004 unleashed and which was then concidered to be The Book when working with BizTalk Server 2004.

Although I have not yet had the chance to read it front to back, I am already delighted to see some very exciting and usefull chapters in the Advanced Topics section of the book.

The book deals with the topics of the Business Rules engine and the ESB Toolkit not only from a technical perspective but adds conceptual insights too. This alone should be reason enough to get the book at your earliest convenience.

In chapters 10 and 11 the business rules engine is explained to a level of detail I have never seen in one single place before. It is the coherent collection of snippets of information to be found all over the internet but also adds value by explaining some theoretics behind Rule-based programming.

In chapter 12, you will find the ESB Toolkit described. Again, it offers a complete overview of the technology and some basic insights into the concept of ESB, the added value of the ESB Toolkit and what you are supposed to use it for. Unfortunatly, despite being well written and well explained, it still is very theoretic with little to no handles for developers developing interest to get started. This is in contrast with most other chapters and may very well be the biggest shortcoming of the book. However, this still does not disqualify it at any time as a must-have for BizTalk consultants of any given level.

BizTalk 2010 Web Console

BizTalk 2010 Web Console

I am very glad to announce the BizTalk Web Console version which is published on codeplex (http://btswebconsole.codeplex.com/) for public now. The demand for the web version of the BizTalk Administration console has been around by the community so I decided to develop it. Project Description BizTalk 2010 Web Console allows administrators/operators to perform operations below […]
Blog Post by: Abdul Rafay

BizTalk: Adding BizTalk 360 to your Environment

BizTalk: Adding BizTalk 360 to your Environment

For those that are not familiar with BizTalk 360, it is a Rich Internet Application (RIA) that allows you to monitor and maintain your BizTalk environment via a Web browser.  From what I can see, from a high level, there are a few components that you install in your BizTalk environment that make up the solution:

  • Silverlight Application which can be accessed via a remote web browser
  • WCF Service(s) that expose the operations to the Silverlight application
  • A Windows Service that handles some of the monitoring and notification features
  • A BizTalk 360 database that will store your configuration and audit/governance

My organization recently purchased a license and support from BizTalk 360.  In this blog post I plan on explaining some of the rational and features that influenced our decision.

Requirements

Over the past 5 years our BizTalk environment continues to grow.  With this growth comes more responsibility maintaining it.  Our current middleware team consists of both developers and administrators and therefore there is an on-call rotation that is used to handle the after hours support.  After hours support requirements are very binary; BizTalk’s infrastructure is either on or off.  This would include the core components like SQL Server, SSO, Host instances and applications being online.  We are not concerned if a single message is suspended.  The reason?  There is no one from the business available to consult with in order to correctly determine a resolution to the problem.

Also, in parts of Canada the IT Market is getting hot.  Let’s face it there is nothing fun, or cool about being on-call. Even though our environment is very stable, people felt that they were still tied down to their cell phone since we have Service Availability metrics to meet and when an issue occurs response time is very important.  As all BizTalk resources know, BizTalk doesn’t have to be down to get roped into “fire fighting” triage sessions.  Sometimes your large ERP or engineering systems go down and since BizTalk connects into them you are impacted as well. 

The company that I work for is very committed to employee retention and reducing the amount of on-call is a step in the right direction for reducing turnover and keeping employee morale high.

Solution

I know Saravana from the MVP program and at the last MVP Summit Saravana was showing MVPs and some of the BizTalk Product Group an early preview of what is now BizTalk 360.  My initial thoughts included what a nice looking application and some of the features fill a void left by the BizTalk Admin Console but I wasn’t convinced that I had an immediate use for it. 

While I was in Sweden in June, with Richard Seroter,  promoting the book I contributed to, I ran into Saravana again and checked out the progress his start-up made on the product.  Once again I was impressed with the tool but wasn’t sure how I would use it.

Come July and some more concerns about the on-call situation arose and this turned on a light bulb in my head about how we could use BizTalk 360 to help support our environment after hours.  We already have contracted resources that focus on after-hours support for our core infrastructure: Servers, SAN, Network etc.  I thought what if I could piggy back on this existing agreement?  Knowing that I didn’t need BizTalk Experts to keep an eye on my servers after hours, remember the type of service I am looking for is binary: on or off.  BizTalk 360 provides this visibility in a couple ways:

  • Dashboard – By looking at this type of screen if is very obvious which artifacts are up and which are down.  Enabling these artifacts is a pretty easy action to perform so I don’t need to pay to have BizTalk Experts monitoring after hours.

Portal

 

  • Notifications – My company also uses SCOM for monitoring BizTalk and we will continue to do so even with BizTalk 360.  But the feature that I like about BizTalk 360 is the Health Summary email notification that you can configure.  I can now subscribe this after hours team to periodic notifications where they can quickly, and easily, determine the health of the environment.  I don’t want these people logged onto my BizTalk servers hitting F5 all night inside of the BizTalk Admin Console.  Using these email notifications frees them up to work on other things but also provides the visibility that we need.

(Sample email notification – note I have added the black marks to retain some privacy)

    EmailNotification
    Another area that is important to me is the Audit and Governance features that exist.  When trusting a 3rd party to provide support it is very nice to have an audit of what actions took place during support periods.  It protects both the client and the service provider and is a win-win all around.  This is a feature that has been missing from the BizTalk Admin Console that could benefit many organizations.

Overall the process of procuring the BizTalk 360 application has been very positive.  When I first tested out the product there were a few features missing that I really wanted.  Saravana took the time to review them over a Live Meeting, took my high priority needs and was able to provide me with a build on a committed timeline.  Some of my feature requests involve clustered host instances so if you use clustered host instances in your environment – you are welcome!

The BizTalk 360 team is very committed to the product and their customers.  It has been refreshing to work with a company that is so motivated.

Conclusion

Something that I have learned through this process is to always keep your eyes open to new trends and tools.  I find Twitter really helps in this regard by following likeminded individuals.  You don’t need to deep dive on every new technology that you see but it is important to know that it exists as you never know when your requirements may change and you can benefit from it.  Case in point my situation that emerged this past summer.

ExpectedException in MSTest does not check the exception message

When you’re writing a unit test to verify that an exception is thrown and you want to check the content of the error message, the ExpectionException attribute doesn’t do it.

This code (which you see a lot):

[TestMethod]
[ExpectedException(typeof(ValidationException), “Postcode must be provided”)]
publicvoid PostcodeIsNullOrWhitespace()
{
//etc.
}

– checks that an exception is thrown, and the test will pass if the exception is of type ValidationException. The second parameter of the ExpectedException attribute is the string that will be written in the MSTest output if the test fails, so this test is not checking the content of the exception message.

If you do want to test the exception message as well as the exception type, this utility method does it for you:

///<summary>
/// Runs the action statement and asserts that it causes an exception with the expected type and message
///</summary>
///<typeparam name=”TException”></typeparam>
///<param name=”action”></param>
///<param name=”expectedMessage”></param>
publicstaticvoid AssertRaisesException<TException>(Action action, string expectedMessage)
where TException : Exception
{
try
{
action();
Assert.Fail(“Call suceeded. Expected exception of type: {0} with message: {1}”.FormatWith(typeof(TException).Name, expectedMessage));
}
catch (Exception ex)
{
if (ex isAssertFailedException)
throw ex;
var exception = ex as TException;
Assert.IsNotNull(exception, “Expected exception of type: {0}, actual type: {1}”.FormatWith(typeof(TException).Name, ex.GetType().Name));
Assert.AreEqual(expectedMessage, exception.Message, “Expected message: {0}”.FormatWith(expectedMessage));
}
}

Usage:

[TestMethod]
[ExpectedException(typeof(ValidationException))]
publicvoid PostcodeIsNullOrWhitespace()
{
var postcode = “”;
AssertRaisesException<ValidationException>(() => ValidatePostcode(postcode), “Postcode must be provided”);
//etc.
}

Uncaught exceptions in Task threads will kill IIS – even with WCF error handling

Yes, all unhandled exceptions will kill the IIS worker process, but in WCF you can tag an IErrorHandler onto your service behavior and all unhandled exceptions will be neatly taken care of. Unless that exception is thrown from a factory task, in which case the error handler is bypassed and the worker process is killed.

So this code:

public ServiceResponse OnBoardClient(Client newClient)
{
if (IsValid(newClient))
{
var client = newClient;
Task.Factory.StartNew(() => OnBoardClientInternal(client));
}
//etc.
}
private static void OnBoardClientInternal(Client newClient)
{
var zero = 0;
var dbz = 10 / zero;
}

– will throw a System.AggregateException in the TaskExceptionHolder.Finalize() method and it will take down the IIS worker process with it (as described in this StackOverflow question). Of course this also kills any other connections being handled by the worker process.

This is in-line with the expected behaviour for ASP.NET applications:

“Exceptions that occur in the context of a request do not cause the worker process to end. However, unhandled exceptions outside the context of a request, such as exceptions on a timer thread or in a callback function, cause the worker process to end”.

So the WCF error handler only applies within the request-response context, and within task code you need to explicitly add error handling:

private static void OnBoardClientInternal(Client newClient)

{
try
{
var zero = 0;
var dbz = 10 / zero;
}
catch (Exception ex)
{
//etc.
}
}

– which can call into your error handler’s HandleError method (if your scenario warrants consistent error handling).

MSMQ and External Certificates

I’ve spent some time lately playing around with MSMQ, Authentication and the use of External Certificates. This is an interesting scenario, but one that I found to be documented in relatively unclear terms, with somewhat conflicting information all over the place. Plus, the whole process isn’t very transparent at first. Normally, when you’re using MSMQ […]
Blog Post by: Tomas Restrepo

BizTalk360 – Recommendation from Jan Eliasen

Last week on 21st September we had the privilege to present the capabilities of BizTalk360 to an enthusiastic audience in Copenhagen, Denmark (You can view the pictures here on our facebook fan page).

We fully understand for any technical user group meetings you are not going to get decision makers who will put the money down and buy the product, it will normally be truly technical chaps, who are prepared to spend some of their spare time either to present or come and learn some new stuff. We don’t treat these presentations as marketing pitch, instead we use this opportunity to spread the word and more importantly get some real feedback from people who are on the field. It proved really valuable for us, and we can see the proof in the evolution of BizTalk360.

Jan Eliasen doesn’t require any introduction in the BizTalk world, he is a long time BizTalk Server MVP, he is great blogger all things BizTalk, along with few energetic chaps he runs the BizTalk user group in Denmark, he is the first one to write any BizTalk exams that comes out, and more importantly he is the author of the newly released book "Microsoft BizTalk Server 2010 Unleashed"

You can read Jan’s article about BizTalk360 here http://blogs.eliasen.dk/Technical/post/2011/09/25/BizTalk-360.aspx

We are super excited to see such a positive feedback from a great influencer in the community.

Nandri
Saravana Kumar

Social:
Join us on @biztalk360 | http://facebook.com/biztalk360 | http://getsatisfaction.com/biztalk360

Upcoming Melbourne BizTalk Server 2010 Training-November 2011

Following on from the successful BizTalk Server 2010 Developer training that Mexia ran in Melbourne in August 2011, we are doing it again, this time we have added a 2 days BizTalk 2010 Administrator training course.

  • BizTalk Server 2010 Administrator Training – November 21st & 22nd, 2011 –
  • https://bizadmmel1111.eventarc.com/event/view/5767/biztalk-2010-administrator-training—melbourne

  • BizTalk Server 2010 Developer Training – November 28th to 2nd December, 2011 –
  • https://bizdevmel1111.eventarc.com/event/view/5765/biztalk-2010-developer-training—melbourne

For any questions or to organise on-site BizTalk Server 2010 training please Contact Me