ASP.NET Podcast Show #133 - Windows Azure Table Storage - video
Win a ticket to the MDC in Detroit. Enter here.
Show Notes:
-
- CRUD application.
- Message.
- Message Data Service Context.
- This example is taken from Hands On Labs.
Source Code for Default.aspx.cs:
using System;
using System.Collections;
using
System.Configuration;
using System.Data;
using
System.Data.Services.Client;
using System.Linq;
using
System.Web;
using System.Web.Security;
using
System.Web.UI;
using System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
using
Microsoft.Samples.ServiceHosting.StorageClient;
using
Microsoft.ServiceHosting.ServiceRuntime;
namespace
TableCloudService_WebRole
{
public partial
class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string statusMessage = String.Empty;
if (!Page.IsPostBack)
{
DisplayMessages();
}
}
protected void lbDisplayMessages_Click(object sender,
EventArgs e)
{
DisplayMessages();
}
protected void OnDeleteMessage(object sender,
CommandEventArgs e)
{
LinkButton lb = (LinkButton)sender;
GridViewRow gvr = (GridViewRow)lb.Parent.Parent;
if (e.CommandName == "Delete")
{
string PartitionKey =
((HiddenField)gvr.FindControl("hdPartitionKey")).Value;
string RowKey =
((HiddenField)gvr.FindControl("hdRowKey")).Value;
string TimeStamp =
((HiddenField)gvr.FindControl("hdTimeStamp")).Value;
string Body = ((TextBox)gvr.FindControl("txtBody")).Text;
string Name = ((TextBox)gvr.FindControl("txtName")).Text;
MessageDataServiceContext context = GetContext();
//var m = (from mess in context.Messages
// where
//
(mess.PartitionKey == PartitionKey) &&
// (mess.RowKey == RowKey)
// select mess).Single();
var m
= new Message();
m.PartitionKey =
PartitionKey;
m.RowKey = RowKey;
m.Timestamp = Convert.ToDateTime(TimeStamp);
context.AttachTo("Messages", m, "*");
context.DeleteMessage(m);
RoleManager.WriteToLog("Verbose", "Delete Message.");
DisplayMessages();
}
}
protected void OnUpdateMessage(Object sender,
CommandEventArgs e)
{
LinkButton lb = (LinkButton)sender;
GridViewRow gvr = (GridViewRow)lb.Parent.Parent;
if (e.CommandName == "Update")
{
string PartitionKey =
((HiddenField)gvr.FindControl("hdPartitionKey")).Value;
string RowKey =
((HiddenField)gvr.FindControl("hdRowKey")).Value; ;
string TimeStamp =
((HiddenField)gvr.FindControl("hdTimeStamp")).Value; ;
string Body = ((TextBox)gvr.FindControl("txtBody")).Text;
;
string Name =
((TextBox)gvr.FindControl("txtName")).Text; ;
MessageDataServiceContext context = GetContext();
//var m = (from mess in context.Messages
// where
//
(mess.PartitionKey == PartitionKey) &&
// (mess.RowKey == RowKey)
// select mess).First();
var m
= new Message();
m.PartitionKey =
PartitionKey;
m.RowKey = RowKey;
m.Timestamp = Convert.ToDateTime(TimeStamp);
m.Body = Body;
m.Name = Name;
context.AttachTo("Messages", m, "*");
context.UpdateMessage(m);
RoleManager.WriteToLog("Information", "Update
complete.");
DisplayMessages();
}
}
protected void
Timer1_OnTick(Object sender, EventArgs e)
{
DisplayMessages();
}
private
void DisplayMessages()
{
MessageDataServiceContext context = GetContext();
RoleManager.WriteToLog("Verbose", "Display Messages.");
messageList.DataSource = context.Messages.Take(10);
messageList.DataBind();
}
private MessageDataServiceContext GetContext()
{
MessageDataServiceContext context;
StorageAccountInfo accountInfo =
StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint");
TableStorage.CreateTablesFromModel(typeof(MessageDataServiceContext),
accountInfo);
context = new
MessageDataServiceContext(accountInfo);
RoleManager.WriteToLog("Verbose", "Message Data Service
Context created.");
return context;
}
protected void
SubmitButton_Click(object sender, EventArgs e)
{
StorageAccountInfo accountInfo =
StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint");
MessageDataServiceContext context = new
MessageDataServiceContext(accountInfo);
context.AddMessage(this.nameBox.Text,
this.messageBox.Text);
nameBox.Text =
String.Empty;
messageBox.Text =
String.Empty;
DisplayMessages();
}
}
}
Source Code for Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="Default.aspx.cs"
Inherits="TableCloudService_WebRole._Default" %>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml" >
<head
runat="server">
<title>Azure Table Example
Page</title>
<style
type="text/css">
body { font-family:
Verdana; font-size: 9pt; }
h1 { font-size:
12pt; color: #555555; }
li { list-style-type:
none; }
form { background-color: #eeeeff;
width: 80%; margin: 0 auto; padding: 1em; border: solid 1px
#333333; }
#entryform, #messages { margin: 1em
0 }
#entryform li span { float: left; width:
15%; color:#333333; margin-top:0.25em; }
#entryform input[type="text"] { border: solid 1px #999999;
}
#messages { border: solid 1px #999999; }
#messages li { padding: 0.5em; }
.error {
color: #ff0000; }
.even { background-color:
#ccccff; }
.odd { background-color: #ffffff;
font-style: italic; }
.messageBox {
width: 73%; }
</style>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="sm" runat="server" />
<div>
<h1>Windows Azure
Chat</h1>
<ul id="entryform">
<li><span>Your name</span><asp:TextBox
ID="nameBox" runat="server" Text="Anonymous"
/></li>
<li><span>Message</span><asp:TextBox
ID="messageBox" runat="server" CssClass="messageBox" />
<asp:Button ID="submitButton" runat="server"
Text="Submit" OnClick="SubmitButton_Click"
/></li>
<li><span><asp:LinkButton
ID="lbDisplayMessages" runat="server"
OnClick="lbDisplayMessages_Click" Text="Update Messages"
/></span></li>
</ul>
<div>
<asp:Label
ID="status" runat="server" CssClass="error" />
</div>
<asp:GridView
ID="messageList" runat="server"
AutoGenerateColumns="false">
<AlternatingRowStyle CssClass="even" />
<RowStyle CssClass="odd" />
<Columns>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:HiddenField ID="hdPartitionKey" runat="server"
Value='<%#Eval("PartitionKey") %>' />
<asp:HiddenField ID="hdRowKey" runat="server"
Value='<%#Eval("RowKey") %>' />
<asp:HiddenField ID="hdTimeStamp" runat="server"
Value='<%#Eval("TimeStamp") %>' />
<asp:HiddenField ID="hdName" runat="server"
Value='<%#Eval("Name") %>' />
<asp:HiddenField ID="hdBody" runat="server"
Value='<%#Eval("Body") %>' />
<asp:TextBox ID="txtName" runat="server" Text='<%#
Eval("Name") %>' />
said:
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="Message">
<ItemTemplate>
<asp:TextBox ID="txtBody" runat="server" Text='<%#
Eval("Body") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Operations">
<ItemTemplate>
<asp:LinkButton ID="updateMessage"
CommandName="Update"
runat="server" Text="Update" OnCommand="OnUpdateMessage"
/>
<asp:LinkButton
ID="deleteMessage"
OnClientClick="return confirm('Delete Message?');"
CommandName="Delete"
runat="server" Text="Delete" OnCommand="OnDeleteMessage"
/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
Source for Message.cs:
using System;
using System.Collections.Generic;
using
System.Linq;
using System.Web;
using
Microsoft.Samples.ServiceHosting.StorageClient;
namespace
TableCloudService_WebRole
{
public class
Message : TableStorageEntity
{
//private string PartitionKey;
//private string
RowKey;
public string Name { get; set; }
public string Body { get; set; }
public
Message()
{
PartitionKey =
"a";
RowKey = String.Format("{0:10},{1}",
DateTime.MaxValue.Ticks - DateTime.Now.Ticks,
Guid.NewGuid().ToString());
}
}
}
Source for MessageDataServiceContext.cs
using System;using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Samples.ServiceHosting.StorageClient;
namespace TableCloudService_WebRole
{
public class MessageDataServiceContext : TableStorageDataServiceContext
{
public MessageDataServiceContext(StorageAccountInfo accountInfo) : base(accountInfo)
{
}
public IQueryable<Message> Messages
{
get
{
return this.CreateQuery<Message>("Messages");
}
}
public void AddMessage(string name, string body)
{
Message MessageEntity = new Message { Name = name, Body = body };
this.AddObject("Messages", MessageEntity);
this.SaveChanges();
}
public void DeleteMessage(Object MessageEntity)
{
this.DeleteObject(MessageEntity);
this.SaveChanges();
}
public void UpdateMessage(Object MessageEntity)
{
this.UpdateObject(MessageEntity);
this.SaveChanges();
}
}
}