Join the New QuickLearn Technical Community!

Visit the new QuickLearn Community Portal to get breaking news and access our free learning resources for BizTalk, SharePoint, .NET 4.0, and Microsoft Virtualization!

Join the community portal to:

  • Connect with QuickLearn instructors and your peers.
  • Subscribe to the newly redesigned QuickLearn Team Blog to find enlightening blog articles from our team of technologists. 
  • Explore the brand-new QuickLearn Technical Library which contains a compilation of technical articles, useful links, and other relevant content to jumpstart your knowledge or dill-down on emerging technologies.
  • View Screencasts created by QuickLearn Technologists to highlight their favorite features of emerging Microsoft Technologies.

Happy Browsing!

Dallas TechFest 2010 – Call For Speakers

I’m thrilled to announce that Dallas TechFest 2010 has set a date of July 30th, 2010 and is currently engaged in a Call For Speakers looking for those in all sorts of technology areas who wish to speak.  If you’ve got expertise in .NET, Java, Ruby, PHP, ColdFusion, Python, Flex or anything else then send in an abstract and see if you can secure a speaking slot at Dallas TechFest 2010.

Sometime in March we will be opening registration, but in the meantime mark the date on your calendar, and get ready for our registration drive.  Like in previous years, if you recommend people to register you will be entered to win a great prize.  What prize? Hmmm.  Well it’s got a touch screen, a 3G modem, and a huge app store.

WCF Http And Non-Http Calls hosted in the same Asp.Net Application (IIS7)

You may want to consider the following issue if you plan on hosting your WCF endpoints in IIS. Consider an ASP.NET application which makes both http and non-http (netNamedPipeBinding or netTcpBinding) WCF calls. If the ASP.NET application is restarted, then a 500.21 error will occur if the very first call is a non-http call.

Why does this happen? ASP.Net is heavily dependent on IIS7 where IIS7 calls into ASP.Net and gives ASP.Net the chance to initialize its applications in either Classic or Integrated mode.  There is no way for ASP.Net to know which mode it is in, other than which entry point IIS7 calls into.  So when applications use non-HTTP WAS methods to start app domains and do things without giving IIS7 a chance to initialize ASP.Net, then ASP.Net has to guess.  When ASP.Net knows it is hosted by IIS7, it uses that knowledge to assume it should do Integrated mode initialization.  In other places ASP.Net doesn’t know if it is hosted by IIS7 and decides to initialize a ‘classic’ runtime.  There’s just no way for ASP.Net to know for sure what to do when it is being non-HTTP activated.

In this particular case, the WCF web service executes and then raises a web event on a background thread.  When the configured web event providers try to process the event, the TemplatedMailWebEventProvider creates an internal HttpRequest and tries to execute it and use the output as the email template.  Of course, without having gone through HTTP activation yet, ASP.Net isn’t quite initialized.  When it goes through init code, it initializes the HttpRuntime in a ‘Classic’ style, and it stays that way for the lifetime of the application.  When later HTTP requests come through, the requests are processed by the integrated pipeline, but with a classic StepManager, which results in confusion and failed requests and AV’s.

Unfortunately, ASP.Net can do nothing here since Webhost/WAS doesn’t notify ASP.Net to start an application unless the request is over HTTP. (Thanks to Steve Molloy for his insights)

RESOLUTION

In the specific case:

If you use TemplatedMailWebEventProvider.  use SimpleMailWebEventProvider instead if you must have email alerts for events.

Or, if you need to make the email pretty or fit a special format, you can extend System.Web.Management.MailWebEventProvider to provide that functionality without too much extra effort.

In the general case, you can resolve this issue with the following:

Split the application in two so that http calls are in one and non-http calls are in the other application.

Create a secondary application that can be called from the main application. This requires .NET 4.0 where the location tag can be used in the following scenario. Create two web applications where all the http calls are in the main application and the non-http calls are in the secondary application. In the main application’s web.config file, use a location tag to locate the second application that houses non-http endpoints.

An article based on this issue can be found at this link: http://support.microsoft.com/?kbid=2018968

Understanding Extenders in the Itinerary Designer

I was lurking around the ESB Toolkit forums yesterday, and got involved in an exchange with someone who was hitting the same roadblock to the Itinerary Designer that a lot of people hit: confusion with the model elements and extenders. Upon my first exposure to the Itinerary Designer it took me a week to get over the learning curve of this, and to understand why every send operation seemingly involved two off-ramp shapes instead of one.

Now in the case of that thread, the problem was actually not having a properly formatted SOAP request for the service that was going to be invoked (also a fairly common issue), but getting to the actual issue took cutting through some of the confusing bits of how the itinerary services themselves are implemented, and what they do.

That being said, I took some time last night to write up an article on the different model elements in the itinerary designer, their extenders, and how they can be used to compose an itinerary. You can access the article here: Making Sense of Model Elements and Extenders in the Itinerary Designer

Side note: The article is now part of the brand new (and still under-construction) QuickLearn Technical Library, which will soon contain many more similar articles and links to technical resources for all of the technologies about which QuickLearn teaches.

That’s all for now!

Four New BizTalk Server ESB Toolkit Webcasts

Peter Kelcey has been kind enough to let me host his “How to” webcast series on the BizTalk Server SEB Toolkit on CloudCasts.
ESB Toolkit How To 1: Dynamic Routing and Endpoint Resolution
ESB Toolkit How To 2: Dynamic Mapping and Service Composition
ESB Toolkit How To 3: Itinerary Resolution in the ESB
ESB Toolkit How To 4: Dynamic Itinerary Resolution
The ESB toolkit videos are getting very popular, so I’ve given them their own section.

Attach/Detach VHD

Windows 7 has some nice and very welcome functionality for attaching/detaching VHD files so that you can access files in them directly from the operating system, which is something I’ve been finding very useful when working out of my laptop. Unfortunately, it’s a bit of a drag to have to go through disk manager every […]

Implementing Simple Discovery using WCF

Imagine that you have written an application that will need to invoke a service at some point. You can hard code the service address, you could place it in configuration, you can stick it into an external registry (a la UDDI), or you could come up with some custom method for resolution (e.g., storing endpoint information in a table of a SQL database).

However, Juval Lowy reminds us that we don’t have to re-invent the wheel. He wrote an excellent article in last month’s MSDN magazine about simple discovery in WCF. In the article he provides a simple explanation of what it is, and how it works, and even provides sample classes that can jump-start your development.

You can check out the article here: Foundations – Discover a New WCF with Discovery

.NET 4 RC Documentation is Now Available

Just before the long weekend, Microsoft quietly released a documentation update alongside their RC release of Visual Studio 2010. If you were dying to know how to implement Out-of-Order Message Processing in Workflow Services, click-away because you shouldn’t find any more place holder content where you’re expecting technical articles.

This should definitely lessen the learning curve a bit more.

Check out the announcement via The .NET Endpoint blog here: The .NET Endpoint: RC docs are live!