Introduction
What's involved in taking a traditional Windows desktop application and converting it to a cloud-backed smart client application that can be sold in the Windows 8 Store? This article explores the challenges and opportunities in porting an existing desktop application to the cloud.
Background
Several years ago, I created a desktop application for Windows 7 using WPF called Infovark Personal Edition. It's a personal information management tool that allows you to create projects using a wiki-like interface. Infovark can import and sync files from the file system and email, notes, and contacts from Outlook to keep your projects up to date. Think of it as a cross between Xobni and Evernote, built by two guys in a basement.
While Infovark Personal Edition worked well for a single user on a single computer, we got a lot of feedback about moving the application into the cloud, so that users could access their projects from wherever they are.
We'll use this article to explore and document our conversion from a rich WPF client app to a smart client that communicates with Azure.
Goals
This is a proof of concept. My aim is to figure out if the conversion is feasible, using limited resources and time. I'll consider the conversion a success if I can move the back-end data storage layer to Azure and create a website that allows us to do some of the basic operations supported by the Infovark Personal Edition.
As a second phase, if I have time, I'll build a thin Windows 8 client that can perform CRUD operations on that data store using Azure web services.
We won't worry about doing a full-featured conversion of the existing Infovark Personal Edition product now. For example, some of the advanced crawling and syncing behavior of the existing application can't be replicated in a Windows 8 store application due to security restrictions. I merely want to demonstrate that we can move the data and a portion of the business logic into the cloud.
Likewise, I won't spend a lot of time on the user interface. If the prototype works, Infovark, Inc. will build a real version of the product and invest time and resources in design and usability.
Technology
The current application is built with the following technologies:
Our first step is to figure out what pieces we can salvage from the existing application and what parts we'll have to create or rebuild.
Web site and web services
We'll start with the new technology we need to evaluate. We'll build a simple web interface for our application using ASP.NET MVC4. Later on, we'll create some basic CRUD web services to support a Windows 8 client application.
Data access layer
The data access layer for the existing application is home-grown. It doesn't use Entity Framework or Linq-to-SQL. I hope I'll be able to preserve much of this code.
We will need to swap Firebird SQL to SQL Server on Azure. Firebird is a wonderful little ANSI SQL-compliant single-file database engine. Its SQL syntax is mostly compatible with the T-SQL used by Microsoft, so it may just be a matter of changing the connection string.
The data access layer uses Lucene.NET for full text indexing and search. I expect to continue using Lucene.NET, but run it in the cloud.
Business logic
For this prototype, all we're concered with is basic CRUD operations and search. We'll remove most of the "brains" of the existing desktop-based Infovark Personal Edition app.
Client technology
Assuming that we were able to get the guts of the application moved to Azure, for the second part of the conversion process, we'll create a Windows 8 smart client that communicates with Azure hosted web services, hopefully allowing for some rich interaction that feels "native" to the Windows OS.
I'm not sure what to use for the client presentation technology in Windows 8. Should I stick with WPF? Should I use HTML 5? Leave comments if you have suggestions.
Risks
This is a big project on short time frame. I don't know if I'll be able to accomplish all the goals I set forth initially, but I'll give it my best try. (I do have day job, and I'd like to keep it!)
Desktop applications and web applications are quite different from each other, so I'm not sure how easily I'll be able to translate from one to the other. We could find out that it'd make more sense to throw out all the existing code and start again. That's okay; that's what a proof of concept is for.
I've never worked with Azure before, nor have I built a website using ASP.NET MVC. There will be a learning curve to both.
I suppose as the co-founder of a small software startup, I ought to be concerned with doing prototyping in public. But I figure that any help, advice or comments we get from the developer community will only help our product get better.
Rewards
This is a learning exercise, so the major reward will be exposure to new tools and techniques in the Microsoft stack. It may also lay the groundwork for further product development at Infovark, Inc.
There's also that Windows Azure Developer Contest going on... In addition to bragging rights, one of the rewards is a Surface tablet. I'd love to win one of those to explore Windows 8 client development further.
Challenge 1: Getting Started
I've signed up for a 90-day free trial for Windows Azure. The signup process was simple. I'll start posting my thoughts and impressions as I start working with it.
History
- May 2, 2013 -- First draft -- vision and scope for the project.