Windows Phone 7.5 : Working with Azure Storage Table

If you have Windows Azure Table Storage and you want to access that from your phone then the best one to me to use the proxy or OData. Because then you will be able to control the number of rows as Phone has limited capacity and Azure Table Storage is massive. However, you can directly access the Table Storage from your phone application but in that case you need to hardcode your 512 bit secret key which is the golden pass to your Azure Table Storage account and you will not be doing it for sure. In a separate post I will demonstrate the capability of exposing your Windows Azure Table data as OData. Here I will show how you can add record from Windows Phone to your Windows Azure Table Storage.

Now to do that I need to create Windows Phone Application and add one small component from NuGet.

image

After it opens then run this command

Install-Package Phone.Storage

Once the assemblies are added to the project, let us do few cleanup job. Under the folder called “App_Start” there will be a C# code file called “StorageInitializer.cs”. Delete it as we will be doing it in the same page.

In that file it basically initializes the connection to Windows Azure Storage where we need to pass the account name and secret key with the URLs. Also we need two main namespaces to be added

 using Microsoft.WindowsAzure.Samples.Phone.Storage;
using System.Data.Services.Client;

After that initialize the connection,

 var resolver = new CloudStorageClientResolverAccountAndKey(
    new StorageCredentialsAccountAndKey("storageacc", "XYZKEYYYYYY"),
    new Uri("https://storageacc.blob.core.windows.net"),
    new Uri("https://storageacc.queue.core.windows.net"),
    new Uri("https://storageacc.table.core.windows.net"),
    Deployment.Current.Dispatcher);

CloudStorageContext.Current.Resolver = resolver;

After that the Entity structure will have to be created

 public class Employee : TableServiceEntity
{
    public string EmpName { get; set; }
}

Now assume in a button’s click you are saving the data.

 string tName = "Employee";
private void btnSave_Click(object sender, RoutedEventArgs e)
{                        
    var tableClient = CloudStorageContext.Current.Resolver.CreateCloudTableClient();
    tableClient.CreateTableIfNotExist(tName,
        p =>
        {
            var contextTable = CloudStorageContext.Current.Resolver.CreateTableServiceContext();
        });

    var empData = new Employee()
    {                
        PartitionKey = "Dev",
        RowKey = Guid.NewGuid().ToString(),
        Timestamp = DateTime.Now,
        EmpName = txtVal.Text
    };
    var ctx = tableClient.GetDataServiceContext();
    ctx.AddObject(tName, empData);

    ctx.BeginSaveChanges(asyncData => { var sRes = ctx.EndSaveChanges(asyncData); }, null);
    MessageBox.Show("Saved..");
    
}

That’s it!!! Isn’t it so cool?

Tips:

  • If the assembly downloads but does not get added to your project then probably you are running older version of NuGet. Please update it from Extension Manager.
  • Always pass the PartitionKey value first while creating the instance of the entity.
  • Never hardcode your storage key to Phone App. Have some Web Role created in Azure or in some hosted environment to interact with Azure Storage.
  • Use TableServiceEntity as base class for the Entity to avoid declaring the three mandatory properties and adding the attribute to indicate what is PartitionKey and RowKey.

For more in details discussion please refer to Windows Azure Toolkit for Phone at https://watwp.codeplex.com/ 

Namoskar!!!