In the past 2-3 weeks I’ve spent my time researching Microsoft's new cloud operating system, Windows Azure. I just finished 3 days of meetings with my co-workers Arif and Lanh, where I gave them an overview on how to write code to target Windows Azure.
I thought it would be a good idea to publish these videos here and share them with the community – all of the content below is free.
We also covered the new SQL Server in the cloud, SQL Azure, and ways to make calls to SQL Azure using the .netTiers ORM and ADO.NET.
We ended up with 7 videos, over 4 hours of content and over 90 items covered! You can access all of the videos using the links below.
If you’d like to follow along and copy/paste code as you watch the videos, I have posted the source code to all samples seen in the video on Codeplex:
CloudService1 - Windows Azure and SQL Azure samples
You'll also need a the Windows Azure SDK v1.0 (September CTP) installed – you can get it from the Windows Azure Developer Center on the Microsoft Developer Network (MSDN). You can also download the Web Platform Installer 2.0 – which will setup everything you need to start coding on Windows Azure.
Update 11/24/2009: Microsoft released a new version of the Windows Azure SDK – the “November 2009” CTP – and changed many of the APIs we were using in earlier versions of the Azure SDK. Much of the Azure specific APIs covered in the videos below apply to the October 2009 Windows Azure SDK (or earlier versions).
See below for links and descriptions to all videos.
Windows Azure and SQL Azure Videos
by Emmanuel Huna
Windows Azure Overview - Part 1 (31 minutes)
1. Overview of Windows Azure.
2. Using the virtual machine with the Windows Azure SDK.
3. Creating a cloud service project.
4. Adding web roles and worker roles.
5. Azure service definition and service configuration.
6. Input endpoints (HTTP and HTTPS) and multiple role instances.
7. Custom ASP.NET Session provider that uses Azure storage.
8. Azure Storage client library.
9. Azure storage - blobs, queues and messages.
10. Development fabric.
11. Development storage.
12. Writing to the Azure log.
13. Loading parameters when your role starts.
14. Running roles in full trust.
Windows Azure Overview - Part 2 (63 minutes)
Note: we lost sound in the last 25 minutes - you get the Allman brothers instead.
15. Worker Role health status.
16. Custom ASP.NET Session provider that uses Azure storage - configuration in both Azure files and web.config/app.config.
17. Windows Azure portal.
18. Windows Live IDs and Azure CTP.
19. CS (Cloud Service) packages and Azure configuration.
20. Azure Storage Accounts.
21. Azure Staging and Production Environments.
22. Deployment IDs.
23. Staging DNS entries.
24. Upgrade/Run/Suspend/Configure/Delete commands.
25. Initialized/Running/Stopped/Paused role instance states.
26. Billing considerations when instances are deployed.
27. Azure Storage Manager.
28. Custom error pages in ASP.NET.
29. Azure training kit labs.
30. Azure links.
31. Azure Service Management API.
32. Azure SDK Tools documentation and CSPack/CSRun Azure command line tools.
33. Doing a Staging Upgrade.
34. Serving dynamic compressed content in Azure and bug on Microsoft Connect.
Windows Azure Overview - Part 3 (20 minutes)
35. Using the Windows Azure forums and getting feedback from Microsoft employees.
36. Loading parameters when role starts.
37. Using reflection to log the role's version.
38. Page_Init() calls that should always be made.
Windows Azure Overview - Part 4 (55 minutes)
39. Unhandled exceptions and custom errors in Web.Config.
40. Handling Upgrades: making sure the roles properly act when we are upgrading SQL Azure.
41. Loading a Windows Azure Storage Queue endpoint (QueueEndPointURI, AccountName, AccountSharedKey, StorageAccountInfo).
42. Creating a persistent and stateless Azure Storage Queue (QueueStorage and MessageQueue).
43. Adding an event to a queue in a web role.
44. Handling the event from a queue in a worker role.
45. Properly returning RoleStatus.Healthy or RoleStatus.UnHealthy in a worker's role GetHealthStatus() to allow for better monitoring of our role instances.
46. Considerations in removing a message from a queue when an error occurs (examples where message should be deleted and should not be deleted when sending out an email).
47. Logging Levels in the Development Fabric UI (Critical, Error, Warning, Information and Debugging).
48. Windows Azure Storage labs in the Azure training kit (to cover blobs and tables).
49. DNS considerations with Windows Azure URLs (CNAME entries).
50. Self signed SSL certificates for Windows Azure development (see Azure Links, OneNote required).
51. Adding purchased SSL certificates to your Windows Azure project.
SQL Azure Overview - Part 1 (48 minutes)
52. Overview of SQL Azure.
53. Warning on name changes and confusing documentation (e.g. SQL Azure was previously called "SDS", SQL Data Services).
54. SQL Azure CTP limits: 5 databases, 10 GB per Windows Live Account. MyCalyx Windows Live account: email@example.com
55. SQL Azure Connection Strings for ADO.NET, ODBC, and OLE DB. Our ORM of choice, .netTiers, uses the ADO.NET connection string.
56. The "sa" account in SQL Azure.
57. Using SQL Management Studio to manage SQL Azure databases. SQL Azure server names, errors and warnings to currently ignore.
58. TDS - Tabular Data Stream protocol on port 1433.
59. Useful "manual" SQL statements.
60. Cleaning up SQL scripts for SQL Azure - including link to my blog entry.
61. Another blog entry I wrote with PowerShell scripts to clean up SQL scripts for SQL Azure: http://blog.ehuna.org/2009/08/windows_powershell_commands_to.html
62. Creating new databases in SQL Azure - having separate SQL Azure databases for Staging and Production. Continue using on-premise SQL Server for development.
63. Types of SQL Azure databases when v1.0 rolls out: Web Edition (1 GB max, $9.99/month) and Business Edition (10 GB max, $99.99/month).
64. Creating a specific Login and User for every database (do not use the "sa" account).
65. Creating a sample database (TESTDB1) on an on-premise SQL Server 2008 Standard and deploying it to SQL Azure.
66. Important: you need at least one primary key - clustered index - before you can insert any records in a SQL Azure table (good and also works well with the .netTiers model).
67. Options to change in SQL Server Management Studio > TESTDB1 > Tasks > Generate Scripts (due to currently unsupported features in SQL Azure).
68. Handling SQL Azure timeouts in SQL Server Management Studio.
69. A better way: the new "SQL Azure Migration Wizard" released on CodePlex. Installing it, configuring it and using it. Automatic cleaned up scripts for SQL Azure including tables, stored procedures, primary keys, foreign keys, indexes, etc.
70. RedGate SQL Compare and my feeble lobbying attempt to get their developers to release a version that works on SQL Azure.
71. Strategies for deploying a database on SQL Azure (first time) and options for schema changes and upgrades in future versions.
SQL Azure Overview - Part 2 (18 minutes)
72. Overview of CodeSmith (http://www.codesmithtools.com/) and my favorite ORM tool, .netTiers (http://nettiers.com/)
73. Important .netTiers configuration settings - source database, output directory, enterprise library version, executing the SQL, SQL Server 2005 database features, layer names, and SignAssembly.
74. Creating the Business Logic Layer (BLL) and Data Access Layer (DAL) for our previously TESTDB1 sample database.
75. The .netTiers report: which C# classes were created - with one table we got 64 objects + all of the Stored Procedures.
76. Compiling the generated business layer.
77. Copying the binaries (compiled DLLs) to a middle tier folder in source control. Makes it easier for other developers to use our projects.
78. Adding references to the middle tier DLLs to your Windows Azure projects so they are properly deployed to Staging/Production.
79. The .netTiers SQL Client provider and configuration settings in Web.Config (or app.config).
80. Using .netTiers dynamic connections to connect to a SQL Azure database at runtime.
81. Sample ASP.NET page that uses DataRepository to bind records from sample table (TstMessages) in TESTDB1. Also uses Ajax (update panel and trigger).
82. Idea: sub-classing the System.Web.UI.Page to automatically check if parameters are loaded, check on upgrades and create the .netTiers dynamic connection string.
83. Loading the netTiersConnectionString from Windows Azure configuration.
84. Using a short constant for the dynamic connection string name (to simplify the already elongated code).
85. .netTiers community forums and a thread I started on dynamic connection strings. We get a tip on how to modify the .netTiers templates to add built-in support for Windows Azure and SQL Azure.
SQL Azure Overview - Part 3 (15 minutes)
86. Modifying the .netTiers templates to read the SQL connection string from Windows Azure configuration instead of Web.Config (or app.config).
87. How the code looks in the ASP.NET page - it doesn't change, it's the same "DataRepository.MyTableProvider" code we've used in the past.
88. Changes in the DataRepository.cst template - changing the ConnectionString collection.
89. Item for Lanh: making sure all .netTiers templates use "connectionString" from this collection.
90. The process of creating custom features in CodeSmith templates: first make the changes in the code, then make the changes in the templates.
91. Details of what was executed to modify the .netTiers 2.3 templates to support reading the netTiersConnectionString from Windows Azure configuration using the Windows Azure SDK v1.0. We now have a "IsConnectionStringAzure" property in the main NetTiers.cst templates!