Examining the QuickLearn Virtual Lab Infrastructure

With the sudden proliferation of cloud-based services it no longer seems like much of a novelty to have an elastic infrastructure capable of on-demand scaling provisioning of virtual resources. Instead it has become something almost taken for granted, and it may even be expected that this can be easily provided given enough on-premise machines. New terms, however misleading, have even been coined to describe such an internal elastic architecture, and software custom tailored to the challenge has already been developed many times over, with even more offerings still in development.

However, working in technology education layers an additional set of requirements on this common expectation. Customers themselves must be able to trigger the provisioning of virtual resources, and access them directly from out in the wild wild web. What I am describing, albeit rather cryptically, are Virtual Labs.

The concept of a Virtual Lab is that a student can access a web page, and after a short period of boot-up time, be connected directly into a virtual machine that is set up and ready to provide a hands-on learning experience. These activities are typically limited in duration and do not provide persistence of a student’s work between sessions. This is less than ideal for typical classroom learning where a student will be using a single machine all week, but makes perfect sense for self-paced learning offerings wherein the student may spend many weeks working through the same material and computing resources cannot be tied up for the entire duration.

Right now QuickLearn is working to deliver some of its core .NET, SharePoint 2010 and BizTalk Server 2010 training offerings in a self-paced format. As part of this effort, it was decided that the lab activities for these new courses should be provided as Virtual Labs available from anywhere and on any device or platform containing a capable RDP client. An additional requirement was that we must be able to use existing VHD files for the classes, without having to rebuild anything or re-install software.

After existing solutions were evaluated (including Microsoft’s Virtual Machine Manager Self-Service Portal), it was decided that the solution should be built internally. Development was completed at the beginning of this week, and the resulting experience was even better than I had initially imagined.

(click for a larger view)

The solution ended up ultimately consisting of four separate components. The first was QuickLearn’s online player application. This provides the interface through which a student can initiate a Virtual Lab. Once the student decides to begin a virtual lab, a request is sent to a Virtual Lab Service. The Virtual Lab Service is a WCF service that is responsible for managing a pool of Hyper-V servers, and routing control messages to start / stop virtual machines. It is also responsible for providing the client with updates about the status of their request. Once the Virtual Lab Service receives the request, WMI is used to spin-up the requested instance (from a known save state). Within each instance, an application is running that will call back to the Virtual Lab Service when it realizes that the machine is back online. Once the Virtual Lab Service knows that the machine is online, it provides the client with connection details for accessing the Virtual Machine. Throughout all of this there is a processing loop that ensures VMs are properly destroyed whenever the time allocated for a given lab has expired.

Since RDP is being used for connectivity, the student can be offered an embedded connection within their browser (given that they are using Internet Explorer). If their browser will not support an embedded connection, they are provided connection details and instructions to connect directly to the image. One really interesting implication of this is that students running Windows 7 will be able to access newer Virtual Labs with true multi-monitor support.

The implications of using Hyper-V on the back-end is that we are able to share machines with up to three students and still provide a killer experience with multiple cores and up to 4GB of RAM per instance.

Overall, the development was more or less straight-forward, only requiring ~30 human-hours of time, and the reward for students will be incredible.

BizTalk 2010 Beta and AppFabric

BizTalk 2010 Beta and AppFabric

In my previous post I mentioned I was going to try out AppFabric on my BizTalk Server 2010 Beta VM. There is whitepaper out called BizTalk + AppFabric, Better Together, but I used different set of prerequisites:

  • Latest version AppFabric that can be download from MS;
  • SQL Server 2008 Enterprise Edition;
  • BizTalk Server 2010 Beta;
  • BizTalkWCFLOBAdapterSDK_x86_Beta.exe;
  • BizTalkAdapterPack_x86_Beta.exe.

I forgot to install the hotfix, so when you want to configure AppFabric you will see the screen below. image

You need to install this hotfix and IIS Web Deployment tool first, before you install AppFabric. Depending on your environment (operating system and architecture) you can choose :

  • Windows Server 2008 x86 – WindowsServerAppFabricSetup_x86_6.0.exe <— My choice for my VM
  • Windows Vista x86 – WindowsServerAppFabricSetup_x86_6.0.exe
  • Windows Server 2008 x64 – WindowsServerAppFabricSetup_x64_6.0.exe
  • Windows Vista x64 – WindowsServerAppFabricSetup_x64_6.0.exe
  • Windows 7 x86 – WindowsServerAppFabricSetup_x86_6.1.exe
  • Windows Server 2008 R2 x64 – WindowsServerAppFabricSetup_x64_6.1.exe
  • Windows 7 x64 – WindowsServerAppFabricSetup_x64_6.1.exe

And as soon as you got your AppFabric installed and configured you can follow the steps in the whitepaper, which are pretty straight forward as a walkthrough. In the end you can run the console app.

image

And check the results in SQL Management Studio.

image

I can conclude that AppFabric and BizTalk Server 2010 Beta with Beta Adapter SDK and Beta Adapter Pack work well together. Some other related resources you can check on BizTalk Server and AppFabric, see Thiago’s post and a post I did in the past Working with Windows Server AppFabric. This is definitely a technology to learn looking at future and confirmation that BizTalk is here to stay.

Technorati: biztalk server 2010 appfabric

BizTalk Server is here to stay.

Recently I saw a question on forum where some asked the question if Microsoft stops the production of BizTalk. If you look at BizTalk roadmap it ends at the version after the one that is coming up in Q3 or perhaps 4 this year. That roadmap can make you think that it ends after vNext, but my thinking is that with current evolution in Technology (which is at a fast pace) it is hard to assess how BizTalk will look like (feature wise) in 2014. In a current and future IT landscapes with Windows products in a dominant position there will always be a need for integration. Within the integration ecosystem there are various Microsoft and other products (i.e. ERP systems like SAP, which I see a lot in the Netherlands), and BizTalk still fulfills integration of that, which are not handled by any other product. For example, EDI, enterprise integration (be it application integration or inter enterprise integration), and ESB capabilities are still not handled by some other product well in a dominant Windows landscape. So BizTalk is here to stay for a long while and is not at the end of its lifecycle. It is being improved every two years and keeps pace with other technologies like .NET, Operating Systems and SQL Server. In the past there have been rumors, when Workflow came into play and project Dublin (now AppFabric) about BizTalk being retired. My thinking with current evolution of BizTalk is that it will become a first class citizen with Microsoft offerings. AppFabric and BizTalk will work together nicely as describe in the WhitePaper BizTalk + AppFabric, Better Together, which I am going to try out next in my BizTalk 2010 Beta VM.

Technorati: biztalk

Hosting workflow services in Windows Azure

Since the latest release of the Windows Azure Development Kit (June), Azure provides support for .NET 4 applications, which is a real important step from the point of adoption, I believe.

The first thing we wanted to try was to host a XAMLX Workflow Service in a web role on Azure.

Example workflow service

I created a standard Workflow Service that accepted two parameters, on  one operation (Multiply) and returns the result of the multiplication to the client.  This service was called Calc.xamlx.

These are the steps I followed to make my service available.  I added the exceptions, because that’s typically what users will search for J

Enable visualization of errors

Standard behavior of web roles, is to hide the exception for the users, browsing to a web page.  Therefore, it is advised to add the following in the system.web section of the web.config:

<customErrors mode="Off"/>

 

Configure handler for Workflow Services

The typical error one would get, when just adding the Workflow Service to your web role and trying to browse it, is the following:

The requested url ‘/calc.xamlx’ hosts a XAML document with root element type ‘System.ServiceModel.Activities.WorkflowService’; but no http handler is configured for this root element type. Please check the configuration file and make sure that the ‘system.xaml.hosting/httpHandlers’ section exists and a http handler is configured for root element type ‘System.ServiceModel.Activities.WorkflowService’.

We need to specify the correct HTTP handler that needs to be used for XAMLX files.  Therefore, we link the workflow services and activities to the correct Workflow Service ServiceModel handler.

To solve this, the following needs to be added to the web.config.

<configuration>
       <configSections>
             <sectionGroup name="system.xaml.hosting" type="System.Xaml.Hosting.Configuration.XamlHostingSectionGroup, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
                   <section name="httpHandlers" type="System.Xaml.Hosting.Configuration.XamlHostingSection, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
             </sectionGroup>
       </configSections>
       <!– Removed other sections for clarity –>
       <system.xaml.hosting>
             <httpHandlers>
                    <add xamlRootElementType="System.ServiceModel.Activities.WorkflowService, System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" httpHandlerType="System.ServiceModel.Activities.Activation.ServiceModelActivitiesActivationHandlerAsync, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                    <add xamlRootElementType="System.Activities.Activity, System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" httpHandlerType="System.ServiceModel.Activities.Activation.ServiceModelActivitiesActivationHandlerAsync, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
             </httpHandlers>
       </system.xaml.hosting>
</configuration>


Enabling metadata exposure of the workflow service

To enable consumers of our workflow service to generate their proxy classes, we want to expose the WSDL metadata of the service, by providing the following configuration section in the web.config.

Notice the simplicity of configuration, compared to WCF3.5.  Making use of the default behaviors, allows us to only specify what we want to override.

<system.serviceModel>
       <serviceHostingEnvironment multipleSiteBindingsEnabled="true" >
             <serviceActivations>
                    <add relativeAddress="~/Calc.xamlx" service="Calc.xamlx"  factory="System.ServiceModel.Activities.Activation.WorkflowServiceHostFactory"/>
  
          </serviceActivations>
       </serviceHostingEnvironment>
       <behaviors>
             <serviceBehaviors>
                    <behavior>
                           <serviceMetadata httpGetEnabled="true"/>
                    </behavior>
             </serviceBehaviors>
       </behaviors>
</system.serviceModel>

Testing and publishing

After successfully testing locally in the Azure Development Fabric, I uploaded and deployed the package, using the new Tools in Visual Studio to my Azure test account.

Sam Vanhoutte, CODit

Presenting at Calgary .Net User Group – June 22, 2010

Topic: BizTalk integration with SharePoint and the Cloud

Speaker: Kent Weare

Date: 22-June-2010

Location: Nexen Conference Center

801-7th Ave. S.W., Calgary, AB. (Plus 15 level)

Map

Registration: 5:00 pm – 5:30 pm

Presentation: 5:30 pm

http://dotnetcalgary.com/

Abstract

Part 1 – Discover how you can leverage BizTalk to integrate with SharePoint and InfoPath



In this session, Kent will demonstrate some of the ways that you can integrate with SharePoint using the BizTalk WSS Adapter and Web Services. Kent will also discuss some real world scenarios where this technology has been used to provide value to the business.

Part 2 – Discover how you can leverage BizTalk to integrate with the AppFabric Service Bus



Learn about Microsoft’s cloud based Service Bus and how you can leverage BizTalk to communicate with external applications and services. Kent will demonstrate BizTalk’s ability to expose on premise services to the cloud and consume AppFabric Service Bus end points. Kent will also discuss some scenarios where it may be appropriate to leverage these integration patterns in the real world.

Preview of MSDN Library Changes

Preview of MSDN Library Changes

The MSDN team has been working some potential changes to the online MSDN Library designed to help streamline the navigation experience and make it easier to find the .NET Framework information you need.

To solicit feedback on the proposed changes while they are still in development, they’ve posted a preview version of some proposed changes to a new MSDN Library Preview site which you can check out.  They’ve also created a survey that leads you through the ideas and asks for your opinions on some of the changes.  We’d very much like to have as many people as possible people take the survey and give us feedback.

[In addition to blogging, I am also now using Twitter for quick updates and to share links. You can follow me at: twitter.com/scottgu]

Quick Preview of Some of the Changes

Below are some examples of a few of the changes being proposed:

Streamlined .NET Namespaces Navigation

The current MSDN Class Library lists all .NET namespaces in a flat-namespace (sorted alphabetically):

image

Two downsides of the above approach are:

  • Some of the least-used namespaces are listed first (like Microsoft.Aspnet.Snapin and Microsoft.Build.BuildEngine)
  • All sub-namespaces are listed, which makes the list a little overwhelming, and page-load times to be slow

The new MSDN Library Preview Site now lists “System” namespaces first (since those are the most used), and the home-page lists just top-level namespace groups – which makes it easier to find things, and enables the page to load faster:

image 

Class overview and members pages merged into a single topic about each class

Previously you had to navigate to several different pages to find member information about types:

image

Links to these are still available in the MSDN Library Preview Site TOC – but the members are also now listed on the overview page, which makes it easy to quickly find everything in one place:

image

Commonly used things are nearer the top of the page

One of the other usability improvements with the new MSDN Library Preview Site is that common elements like “Code Examples” and “Inheritance Hierarchy” (for classes) are now listed near the top of the help page – making them easy to quickly find:

image

Give Us Feedback with a Survey

Above are just a few of the changes made with the new MSDN preview site – there are many other changes also rolled into it.  The MSDN team is doing usability studies on the new layout and navigation right now, and would very much like feedback on it.

If you have 15 minutes and want to help vote on which of these ideas makes it into the production MSDN site, please visit this survey before June 30, play with the changes a bit, and let the MSDN team know what you think.

Important Note: the MSDN preview site is not a fully functional version of MSDN – it’s really only there to preview the new ideas themselves, so please don’t expect it to be integrated with the rest of MSDN, with search, etc.  Once the MSDN team gets feedback on some of the changes being proposed they will roll them into the live site for everyone to use.

Hope this helps,

Scott

Learn at Your Own Pace with QuickLearn Online Anytime BizTalk Training!

Take control of your learning experience – get the BizTalk training you need when and where you want it.

Online Anytime Self-Paced Training offers QuickLearn’s high-quality BizTalk training, hands-on lab experience, and instructor support, without the cost of travel or set hours.

Self-paced training for BizTalk Server 2009/2010 includes…

  • Instructor-led video presentations
  • Technical demonstrations
  • Remote hands-on labs
  • Technical support

QuickLearn’s Online Anytime Self-Paced BizTalk Training Provides:

  • Cost Savings – no travel costs and lower tuition fees
  • Flexibility – set your own hours and study from home or work
  • Control – choose your lessons and study in any order

Learn more about QuickLearn Online Anytime Self-Paced BizTalk Training