Kurt Claeys

DEVITECT.NET

  Home  |   Contact  |   Syndication    |   Login
  127 Posts | 43 Stories | 163 Comments | 13 Trackbacks

News

I'm a .NET architect / developer from Belgium and also trainer in .NET topics.

Kurt CLAEYS

 



view my trainer profile on TrainerExchange.com
 

Join Me at Tech·Ed EMEA Connect for Developers!

View Kurt CLAEYS's profile on LinkedIn


Being ...





 


Working ...


and



Reading ...



Riding ...

Tag Cloud


Article Categories

Archives

Post Categories

Links

Tuesday, November 24, 2009 #

Last saturday (yep..., even in the weekends the .NET community is active) I presented a talk on Entity Framework 4.0 for CodeCamp.NL. This was organized by the Dutch .NET communities www.sdn.nl, www.vbcentral.nl and www.dotned.nl.

You can find my presentation and code examples (VS2010 beta2) on http://www.codecamp.nl/Default.aspx?tabid=356

 


Friday, November 13, 2009 #

I published my TechEd demo for download at www.devitect.net/techeddemo/techeddemo.zip

 

 


Thursday, July 23, 2009 #

My presentation on the Windows Azure Platform is online on MSDN Chopsticks. See http://www.microsoft.com/belux/MSDN/nl/chopsticks/default.aspx?id=1366

In this presentation you get an overview of the Windows Azure Platform, the ideas behind it and the business value of using this platform. The vision of Microsoft on cloud services and the implementation towards developers will become clear. We will discuss the architecture of Azure and the paradigm shift from building traditional on-premises applications to global enterprise cloud based applications. We dive into the solution architecture and the separation of the user interface (as webrole) and the services (as workerrole).

Or you can watch this here : 


Friday, July 10, 2009 #

NewCloudApp is a challenge (some kind of developers contest) for Azure based applications. See www.newcloudapp.com

My application (for Ordina.be) called SHPH as submission for this is running on shph2.cloudapp.net.

SHPH is an application in the cloud running on the Microsoft Azure Services Platform. Using this application allows sending pictures taken during holidays from a PC in your hotel to PC’s at home via the cloud. The idea is to share your holiday experience directly with family and friends. People at home subscribe to the tag you use when uploading pictures across the globe. Once uploaded, the cloud pushes the picture immediately to the subscriber’s home pc.

Feel free to have a look at it and provide me some feedback (as reply to this post). I would be happy if you would vote for this application on http://www.newcloudapp.com/vote.aspx. You can vote every day from now until june 20.

We will be discussing this code on one of the meetings of the Belgian Azure User Group (www.azug.be)


Saturday, June 20, 2009 #

I'm starting a new usergroup with focus on the Azure Services Platform and .NET Services.

AZUG.BE is a Belgian user group with focus on development and architecture of the Microsoft Azure Services Platform. Azure is a cloud hosted development platform for internet oriented applications aimed at high scalability and based on .NET technology.

Our goal is to share knowledge and experiences with the .NET community in development and architecture in the Azure Services Platform and the .NET Services technology. As new programming skills and a new architectural approach are needed I’m inviting you to become member of this user group to prepare you for building this new style of applications.

We’ll have regular public meetings (free of charge) providing demos, training, presentations and discussions on the technology part of Azure. First public meeting is planned in september 09.

Interested in participating as boardmember ? Shoot a mail at board@azug.be.

Interested in the agenda of upcoming events, visit www.azug.be regularly or register for the newsletter at newsletter@azug.be with the word subscribe as subject. Hope to see you.


Friday, June 12, 2009 #

A few days ago I started developing an Azure based cloud application. Not just some playing but a serious effort. For several reasons. Of course I love digging into new technologies just for the geeky part of it. But besides that there's another good reason : Microsoft is organizing a developer contest called "new CloudApp() - The Azure™ Services Platform Developer Challenge". (see : http://www.newcloudapp.com). I have a great idea for a social cloud application and am implementing this with Azure and .NET Services. A lot of work goes into researching as not many good resources are available for the moment. I hope to finish on time, deadline is July 9 (for the international submission).

Right now I cannot tell you details of the application but ... it's about distributing your holiday pictures to home when on vacation. I'll demonstrate this application and show how it's done at my presentation at community day (25 jun, Mechelen). So if you're interested in a preview of this Azure application and want to learn concepts and coding behind it you're welcome.

 


Saturday, May 09, 2009 #

The new site for the Belgian Community Day 09 is open.

Eleven Microsoft User Groups combine their efforts to organize this unique networking and knowledge sharing event. A unique opportunity to learn about Microsoft’s latest developments and technologies like Exchange 2010, Silverlight 3, Visual Studio 2010, SQL Server 2008, Windows 2008R2, Powershell V2, Forefront Identity Manager 2010, XNA 3.1. and OCS R2. Microsoft Community Day will take place on Thursday 25th June 2009 in Utopolis, Mechelen, where we will bring together 300 IT Pro’s and developers. The Microsoft Community Day 2009 is supported by BESUG, BIWUG, IT-Talks, MVUG, Pro-Exchange, SCUG, SQLUG, VBIB, Visug, WinSec, XNA-BUG“ Register now for free for this all day event!

 CD09banner1_thumb
Thursday 25th June 2009 in Utopolis, Mechelen


Tuesday, May 05, 2009 #

(in dutch as the target audience is dutch speaking!)

Ik geef twee seminars over mijn favoriete .NET technologien (WCF en WF) voor SyntraWest

SyntraWest IT CLUB for Developers/Architects Seminars


26 mei 09, Windows Communication Foundation Deep Dive

10 Scenarios om een WCF Service aan te spreken. WCF is een zeer breed toepasbaar platform voor distributed applications en services te implementeren. In deze demo georienteerde sessie worden 10 uiteenlopende scenarios besproken waar bij een clientapplicatie met telkens een andere onderliggende technologie een WCF service zal aanspreken. Het toegankelijk maken van dezelfde service vanuit uiteenlopende clientplatformen is mogelijk door het afzonderen van de implementatie-logica ten opzichte van de technische infrastructuur door middel van bindings. Een aantal verschillende bindings en hun toepassingen komen aan bod. De 10 verschillende clients zijn : een klassieke .NET 2.0 ASMX client, een secure .NET 2.0 client, Silverlight als client, Office 2007 als client, PowerShell als client, Workflows Services als client, een AJAX enabled webapplicatie als client, een gedisconnecteerde MSMQ client, een mobile device, een eenvoudige POX/REST client. Dit is een anderhalf uur durende reis doorheen de vele toepassingsgebieden van het .NET 3.5 platform.

Extra, Future Preview : Een overzicht van het Windows Azure Platform en het toepassen van .NET Services. Deze toekomstige technologien bieden de mogelijkheid om applicaties te hosten in de datacentra van Microsoft, wereldwijd services te integreren en zo een heel hoge schaalbaarheid te bieden.

16 juni 09, Workflow Foundation Deep Dive

Business Processen bouwen met Workflow Services. In .NET 3.5 is er een diepgaande integratie tussen Windows Communication Foundation en Workflow Foundation. Deze integratie (=Workflow Services) maakt het mogelijk om het aanroepen van operaties in WCF services door een declaratief vastgelegde workflow te organizeren en zo een business process te implementeren. Een workflow kan vanuit een WCF client opgestart worden waarna deze workflow zelf met andere WCF applicaties gaat samenwerken om zo het process stap voor stap uit te voeren. Deze processen kunnen langlopend zijn doordat de status ervan bewaard kan worden in een database. Door middel van een reeks nieuwe WCF bindings kunnen de randapplicaties terug communiceren met de instantie van het eerder opgestarte process. In deze sessie komen de concepten van Workflow Services uitvoerig aan bod en zal een praktische demo overtuigen van de kracht en noodzaak van het gebruik ervan. De demo toont een process die door een webapplicatie opgestart zal worden waarna het wacht op een aanroep vanuit een windows applicatie vooralleer een externe service aan te spreken waardoor het process eindigt.

Extra, Future Preview : Een overzicht van de nieuwe elementen van Worfklow Foundation 4.0 en het ‘Dublin’ hosting platform. Met WF 4.0 en ‘Dublin’ zal het bouwen van workflow gebaseerde processen nog heel wat flexibeler en krachtiger worden.

Waar/Wanneer ? 26 mei 09 en 16 juni 09 van 18:00u tot 21:30 te Syntra West Kortrijk, Doorniksesteenweg 220, 8500 Kortrijk.


Spreker : Kurt CLAEYS (MCT, MVP Connected System Developer, MCTS WCF/WF .NET 3.5). Beide sessies worden gegeven door Kurt CLAEYS, een .NET Solution Architect en competence leader voor ORDINA. Kurt CLAEYS is een ervaren spreker en auteur over WCF/WF technologien en door Microsoft als Most Valuable Professional Connected System Developer gewaardeerd. Blog : www.devitect.net.

Inschrijven : Syntra West Informatics - dhr. Chris Cardinael - 050 40 30 65


Thursday, April 30, 2009 #

The second edition of the Microsoft Belux (Belgium and Luxembourg) Architecture newsletter is out and refers to this article on Azure architecture. See : http://www.microsoft.com/belux/architect/issue_2/azure_hosted_applications.aspx. Interested in Microsoft Architecture ? See the blog Architects Rule by Philippe Destoop, Enterprise Architect for Microsoft Belgium and Luxembourg.

The Azure Services Platform is an infrastructure managed by Microsoft in their datacenters that enterprises and ISV’s can use to build and run new applications. It also offers a set of services running in the cloud that enterprises and ISV’s can use to extend and enhance their applications running in the cloud or their existing applications running on premise. The schema below (coming from David Chappell) illustrates this.

Image 1 _ TheAzureServicesPlatform

The way we create these applications and the solution architecture underneath them is different compared to classic ‘on-premises’ applications. Azure brings a broad set of possibilities but also new challenges. Three of the main new concepts are: a new deployment model for cloud based hosting, a new layer of abstraction towards persisting data and a new infrastructure to authenticate users. In this article we will look into those three main areas.

These new architectural models and API’s create a new environment for solution architects and learning curve for .NET developers. The main benefit behind these changes is the need for a worldwide reach and a flexible scalability. From the start of the development of the Azure Platform scalability was the main focus. In Azure there’s a great support to easily scale-out your applications to the internet. This results in a new solution architecture for applications.

The picture below illustrates an overview of the Azure Services platform:

Image 2 _ TheAzureServicesPlatform

Deployment Model

Applications on Azure are running in virtual machines running Windows 2008 Server hosted in Microsoft datacenters behind a load balancer and are organized into 2 distinct layers called roles. A role is either a web role in which the application is an ASP.NET website which forms the user interface or a worker role which is an infinitive loop that processes messages coming from the web role through a queuing mechanism. The web role is accessible via the public internet but the worker role is not, the worker role only has outgoing access. (See figure 1)

Image 3 _ Figure 1 Web and Worker Role

Although the web role is typically stateless it can share data with the worker role through a storage service. The trigger to process the data coming from the user is executed by sending a message over the queue from web role to worker role. This creates an asynchronous pattern of data processing. The web role can immediately respond to the user interface while the worker role is still processing the data in its loop.

Each role is running on one dedicated virtual machine which means even the smallest application is distributed over 2 virtual machines. This concept is the enabler of the desired scalability which can be easy configured. Azure supports a new configuration file where the number of instances for each role is defined. As a role is coupled to a virtual machine this configuration is the key for scalability. By increasing the number of instances new virtual machines are started automatically which can help the other instances in taking a part of processing the requests. These extra virtual machines are exactly the same as the other virtual machines the application is running on. This is clearly the scale-out way of working. So an administrator can just add more processing power when more performance is needed due to an increasing numbers of users. It will of course be equally easy to decrease the number of instances when less load needs to be handled. This can be done for the UI (web role) and the Processing (worker role) separately.

Compared to classic hosting on dedicated physical machines this is an enormous cost saver as the cost of increasing the number of instances is calculated based on the consumed processor time. Although Microsoft has not officially announced a pricing model this would be the idea.

Working with this 2 layered approach is different compared to the way we create a multilayered architecture for on premises solutions. This could influence the implementations of our beloved MVP or MVC patterns.

Abstraction of datastorage and dynamic structuring of data


Azure brings two technologies to support storage and retrieval of data.

  • SQL Services as one of the components of the Azure Services Platform.
  • Azure Storage as part of the Windows Azure offering

SQL Services is a SQL environment running in the cloud which is accessible from either the Azure applications or on premises applications. SQL Services is typically used for storage in the cloud and as a hub to synchronize data between occasionally disconnected devices. SQL Services supports the known relational database concepts and the client libraries like ADO.NET and ODBC.

Azure Storage considers data as direct accessible pieces of information from within an application build out of the cloud hosted web and worker roles or any web enabled client. HTTP and REST are the technologies to read, insert, update and delete data.

Although the data in Azure Storage is stored in a SQL database there’s no explicit persisting layer visible in the architecture of an Azure application. The data can be accessed without using the ADO.NET library and executing SQL statements through it. In an application there will be a thin layer of entity metadata that maps changes in an objectmodel to HTTP/REST calls to the Storage Services. The information can be tables or blobs. Blobs can store large amounts of data and can be given attributes to have them identified. This means to store an image or document we don’t have to create a table in a relational database to store the data, we don’t need to write the bytes of the datastream to disk explicitly by code, we don’t need to us ADO.NET to read this data. The data is always available by addressing it through a URL even from within other applications if the data has been given public access.

The big shift is that creating the relational structure of the data by creating tables, fields and their relational constraints is not an explicit part of the development process. From the developers point of view the database is not there, but the data is somewhere in the cloud. No access to a database means: no possibility of using stored procedures. This results in no more hidden logic in stored procedures.

In the Azure Storage model the structure of data is not defined in metadata (table and fields) but this structure is owned by the code in the application. The way the Azure Storage platform knows this structure is by reading attributes which contains metadata placed on classes in the compiled and deployed assemblies.

This influences the solution structure of applications. Working with metadata in assemblies makes automated tested more easy. As there is no visible database we can just mock the data in a unit test. The typical discussions in traditional solution architectures about using which O/R framework is not present when developing Azure applications.

User Authentication Infrastructure


The goal of running an application in the cloud is to reach a very large number of users. From an authentication/authorization point of view, this creates a new challenge for both architects and end-users.

Architects need a new way of authentication and authorization of these users. It will indeed be very challenging to maintain a user database with credentials for millions of different users in your typical application-specific user DB. Moreover, the authentication mechanisms could be passwords, certificates, devices and whatever will be used in the future and would mean we’re facing a high cost for the application maintenance for authentication/authorization purposes only.

From the end-users point of view, using more and more applications in the cloud, all with their own specific credentials and authentication mechanisms will also be problematic. The IT industry is aware of those challenges since a couple of years and is coming up with concepts and standards around “Identity Federation” and “Claims based authorization” to overcome those challenges.

The Azure Services platform implements these industry standards with the Live ID service being able to play a role as “Secure Token Service” (STS) and offers an authorization infrastructure (called the .NET Access Control Service) based on claims which form an abstraction between the identity of the user (proved by authentication) and the right he/she has to perform an action in the application. A claim is just a piece of information about a user on which the application can decide to allow or disallow the use of its functionality. Instead of authenticating within your application the user authenticates to an external Security Token Service. This service can be part of the Azure platform (like Windows Live ID) or third party STS using WS-Trust and WS-Federation standards. After a positive authentication the STS creates a token defined using Security Assertion Markup Language (SAML) and sends it to the requesting client. This token contains a claim which is the piece of information about the user as proof needed for your application to allow some actions. The client sends this token to your application or service instead of its credentials and the token is signed by the STS using a certificate your application has first to register at the STS to recognize the origin of the token. The token contains the claims which are the proof that the user is allowed to do what he/she wants. It’s up to your application to decide what to do with the tokens. (see figure 2)

An STS can have many different pieces of information about the user, some are stored behind the service or others can be calculated out of other claims coming from another STS or authentication service. As the application does not want to receive all these claims the client must ask the target application what claims in particular it needs before asking the STS to deliver the needed signed claims.

This new paradigm for authentication and authorization needed for worldwide scalability influences strongly the solution architecture of our application. The need for a membership and/role database evolves to the need for a cloud based security token service which Azure is offering. To make this shift easier we could implement the Geneva Framework which makes an abstraction on top of on premises role based authorization and the claims based authorization in the cloud

The main purpose of .NET Access Control is to perform claim transformation providing your application with useful claims based on claims from other identity providers. In the current release it can also act as an identity provider itself.

Image 4 _ Figure 1 Claims Bases Authorization

Conclusion

The Azure deployment model, data access model and authentication/authorization model are three fundamental paradigm shifts in defining solution architectures that are completely new for architects of on-premise applications. Although in most situations it would be possible to have our current architectures hosted on the Azure platform (i.e. applications architected in a sound 3-tier approach with a stateless front-end and an asynchronous link to the back-end processing), they would not benefit from the scalability when not implementing these approaches. These new concepts are core features of the Azure Service Platform and form the base for a worldwide, interned hosted reach of applications in a massively scalable way.
spacer


Monday, April 27, 2009 #

A few weeks ago I did a a presentation on LINQ and ADO.NET Entity Framework for the VISUG at Microsoft Belgium. Want the code and presentation ?

Downloads : code and presentation


Wednesday, April 15, 2009 #

Today I presented ‘LINQ to SQL compared to LINQ to Entities’, a session for the VISUG at Microsoft Belgium. Attendees asked me how one can see the T-SQL statement that LINQ to SQL or the Entity Framework is generating out of the LINQ Query.

For LINQ to SQL : Use the log property of the context to redirect the generated query to the output window of Visual Studio.

using (MyLINQToSQLClassesDataContext ctx = new MyLINQToSQLClassesDataContext())
{

    ctx.Log = Console.Out;

    var q = from c in ctx.Categories
                 select new { c, c.Products };

    //...

}

For the Entity Framework : There’s no log property on the context. You have to cast the query to an ObjectQuery which has the ToTraceString() method to see the SQL and write this string to the console.

Console.WriteLine(((System.Data.Objects.ObjectQuery)q).ToTraceString());

You can view the output window in Visual Studio with the Output menuitem in the View menu or by pressing CTRL-W,O

*UPDATE* : For LINQ to SQL there’s another way : ctx.GetCommand(q).CommandText. This allows you to see the T-SQL without executing the query.


Friday, April 03, 2009 #

The VISUG (the main .NET Usergroup in Belgium) and Microsoft Belgium are organizing 3 events for .NET developers. These events will cover existing technologies and are free to attend.

I’m presenting the sessions on LINQ and data access in .NET 3.5 on April 15 from 02:00 PM till 04:00 PM. This presentation takes place at the Microsoft Offices in Zaventem.

A language focused overview of the foundations of LINQ in C#3.0 (50 minutes) 
In this session the language enhancements in C#3.0 on which LINQ is based are discussed. You'll learn the syntax and the implementation of Auto Implemented Properties, Local Type Inference, Object and Collection Initializers, Anonymous Types, Extension Methods and Lambda Expressions and see how LINQ is made possible by using combinations of these new extensions in the language.

LINQ to SQL compared to LINQ to Entities. (50 minutes)
Both are Object-Relational Mapping frameworks in .NET 3.5 but have different goals, qualities, behaviors and their own programmatic approaches towards modeling and defining the metadata. How do they compare to each other ? Which one fits best in which scenarios ? In this session you will be guided in making the correct choice between them for your development environment.

You can register on the VISUG site http://www.visug.be/Eventdetails/tabid/95/EventId/6/Default.aspx

Also check out the other session (ASP.NET Caching on april 29 by Gill Cleeren, Integrating Membership, Role Management and Profiles into Web Applications on may 27 by Pieter Gheysens)

Hope to see you there …


Technorati Tags:

Great news … You don’t need an invitation code anymore to provision services on Azure. Just sign in with a Windows Live ID en you’re ready to go.

Update :(thanks Steve!) this is only so fo the .NET Services and SQL Services.

Goto http://portal.ex.azure.microsoft.com/


In default configurations web applications and web services are running under the credentials of a predefined user account. For ASP.NET webapplications this is the ASPNET (or similar) account and for WCF services this is the user that started the servicehost or the user associated as logon account for the windows service hosting the services.

This means access to resources is restricted by this account. This is most often a dedicated account and not related to a real user. In a good secure environment the decision should have been made to give those accounts minimal rights, just enough to allow the hosting. So this account will not have the rights to access resources (files, databases) like normal users do.

Impersonation is the way to allow that the code in services (or in webapplications) can run under the credentials of the user accessing this webservice (or webapplication).

In an architecture where the services with the logic are separated from the webapplication with the UI we can have 3 accounts executing code or needing access to resources.

 

 

 

 

Figure1

 

It makes sense that the user behind the browser is the one that must have the rights to allow the code in the WCF service to access the resources.

A WCF service can easily be configured to do impersonation:

1. Add the OperationBehavior attribute to the method that is called and needs to run under the impersonated user credentials and set Impersonation to allowed. The OperationBehavior attribute must be placed in implementation class, not on the interface !

 

[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
public string DoSomething(string data)
{

 //Access to the resource  

 

} 

 

2. In the WCF configuration write a servicebehavior for the service which sets the impersonateCallerForAllOperations attribute of the serviceAuthorization element to “true” 

 

 

<behaviors> 

      <serviceBehaviors>  

            <behavior name="Service1Behave">  

<serviceAuthorization   impersonateCallerForAllOperations="true"/>  

            </behavior>  

      </serviceBehaviors>  

</behaviors>  

<services>  

      <service name="ServiceImplementation.ServiceImplementation"  

                  behaviorConfiguration="Service1Behave">  

            <endpoint 

                  address="http://localhost:9876/TestService" 

                  binding="wsHttpBinding"  

                  bindingConfiguration="" 

                  contract="ServiceInterface.IServiceInterface" />

      </service>  

</services>

 

On the client side (which is the ASP.NET website) set the AllowedImpersonationLevel to Impersonation on the ChannelFactory<T> or ClientBase<T> before calling the method.

 

 

a. when using ChannelFactory<T>:

 

System.ServiceModel.ChannelFactory<MyChannelClass> channelFactory;  

channelFactory = new System.ServiceModel.ChannelFactory<MyChannelClass>("EP");  

channelFactory.Credentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;  

ServiceInterface.IServiceInterface channel;  

channel = channelFactory.CreateChannel();  

string s;  

s = channel.DoSomething("devitect");  

 

b. when using a ClientBase<T> proxy.

 

MyClient myClient;  

myClient = new MyClient("EP");  

myClient.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;  

string s;

s = myClient.DoSomething("devitect");  

 

This results in running the code in the serviceoperation (the DoSomething method) under the credentials of the user running the process on the client. This is the ASPNET account and still not the user behind the browser.

So we have to make sure that the calling code in the webapplication can now impersonate in its turn the user behind the browser. Again this can be done very easy by specifying the identity tag in the system.web part of the configuration file for the webbapplication.

 

<system.web>  

        

      <identity impersonate="true"/>

           

</system.web>

 

But now we created a potential pitfall. By setting this suddenly all the code in the webapplication is now running under the account of the user behind the browser. Which could not always be desired.

We need a way to impersonate the user just before calling the WCF service and stop impersonating just after we received the answer. 

You can use the WindowsImpersonationContext class for this. This class has to be set to the result of the static method WindowsIdentity.Impersonate() which needs the usertoken of the user you want to impersonate as parameter. This usertoken can be found on a property of the WindowsIdentity class which is set to the identity of the current user in the Httpcontext. This is the identity of the user using the browser. After the call you can undo the impersonation with the Undo method on this WindowsImpersonationContext class and the code will be running under the ASPNET account again. We are just temporarily impersonating the user.

 

Code to do this:

 

WindowsIdentity windowsIdentity = (WindowsIdentity)HttpContext.Current.User.Identity; 

WindowsImpersonationContext windowsImpersonationContext;  

windowsImpersonationContext = WindowsIdentity.Impersonate(windowsIdentity.Token);  

//… call the service  

windowsImpersonationContext.Undo();

 

Technorati Tags:

Tuesday, March 31, 2009 #

Last week I gave this workshop/presentation for the syntrawest ITClub on Data Access with ADO.NET 3.5. You can have get a printout of the slides here.

Content of the presentation :

  • LINQ as query language
  • LINQ to SQL
  • LINQ to Entities (=ADO.NET Entity Framework)
  • ENTITY SQL
  • ADO.NET DataServices
  • ASP.NET Dynamic Data

More workshops are planned :

  • 26/05/09: Windows Communication Foundation (WCF) - A deep dive on Security
  • 16/06/09: Windows Workflow Foundation (WF) - A deep dive on Workflow Services
  • september/october : The Azure Services Platform
  • nov/dec : WCF 4.0, Dublin hosting and Oslo