<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tyler&#039;s Azure Developer Blog</title>
	<atom:link href="http://blog.tylerdoerksen.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tylerdoerksen.com</link>
	<description>Software Development for .NET and Windows Azure</description>
	<lastBuildDate>Fri, 15 Mar 2013 16:58:04 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>.NET Camp Session Video &#8211; Azure Cloud Services</title>
		<link>http://blog.tylerdoerksen.com/2013/03/15/net-camp-azure-cloud-services/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=net-camp-azure-cloud-services</link>
		<comments>http://blog.tylerdoerksen.com/2013/03/15/net-camp-azure-cloud-services/#comments</comments>
		<pubDate>Fri, 15 Mar 2013 15:00:02 +0000</pubDate>
		<dc:creator>Tyler Doerksen</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://blog.tylerdoerksen.com/?p=2831</guid>
		<description><![CDATA[Windows Azure Cloud Services offers a great way to logically separate your applications and scale the components up and out independently and easily. In this session you will get a complete overview of Cloud Services and a clear understanding of &#8230; <a href="http://blog.tylerdoerksen.com/2013/03/15/net-camp-azure-cloud-services/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Windows Azure Cloud Services offers a great way to logically separate your applications and scale the components up and out independently and easily. In this session you will get a complete overview of Cloud Services and a clear understanding of Web Roles and Worker Roles. Furthermore you&#8217;ll see how Visual Studio 2012 and the Windows Azure SDK makes it easy to develop and test your cloud services locally.</p>
<p>Part of the <a href="http://channel9.msdn.com/Events/Developer-Movement/NetCamp" target="_blank">Developer Movement .NET Camp</a></p>
<p><iframe src="http://channel9.msdn.com/Events/Developer-Movement/NetCamp/NETC2/player?w=512&#038;h=288" width="512px" height="288px" frameborder="0" scrolling="no" marginwidth="0" marginheight="0"></iframe></p>
<p><a href="http://channel9.msdn.com/Events/Developer-Movement/NetCamp/NETC2" target="_blank">Channel9 Page</a></p>
<h2>Contents</h2>
<ul>
<li>Introduction</li>
<li>Azure Ecosystem</li>
<li>Cloud Services Overview</li>
<li>Why a Cloud Service?</li>
<li>What is a Cloud Service? Web and Worker Roles</li>
<li>What can it run? Languages and Frameworks</li>
<li>Web Roles</li>
<li>Worker Roles</li>
<li>Role Lifecycle</li>
<li>Roles and Instances</li>
<li>Fault Domains</li>
<li>Upgrade Domains</li>
<li>Hello World Demo</li>
<li>Packaging and Configuration</li>
<li>Deployment</li>
<li>Application Upgrade Strategies</li>
<li>Service Management Demo</li>
<li>Cloud Development Lifecycle</li>
<li>Team Foundation Service integration</li>
<li>TFS Online and Azure Demo</li>
<li>Diagnostics Demo</li>
<li>Closing</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.tylerdoerksen.com/2013/03/15/net-camp-azure-cloud-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Camp Session Video &#8211; Websites in the Cloud</title>
		<link>http://blog.tylerdoerksen.com/2013/03/13/web-camp-session-video-websites-in-the-cloud/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=web-camp-session-video-websites-in-the-cloud</link>
		<comments>http://blog.tylerdoerksen.com/2013/03/13/web-camp-session-video-websites-in-the-cloud/#comments</comments>
		<pubDate>Wed, 13 Mar 2013 21:56:37 +0000</pubDate>
		<dc:creator>Tyler Doerksen</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://blog.tylerdoerksen.com/?p=2771</guid>
		<description><![CDATA[Windows Azure Web Sites is a simple, yet powerful platform for web applications in the cloud. In this session you will see how you can build and deploy everything from WordPress blogs to high scale web applications using your favorite &#8230; <a href="http://blog.tylerdoerksen.com/2013/03/13/web-camp-session-video-websites-in-the-cloud/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Windows Azure Web Sites is a simple, yet powerful platform for web applications in the cloud. In this session you will see how you can build and deploy everything from WordPress blogs to high scale web applications using your favorite languages, frameworks and tools.</p>
<p>Part of the <a href="http://channel9.msdn.com/Events/Developer-Movement/WebCamp" target="_blank">Developer Movement Web Camp</a></p>
<p><iframe src="http://channel9.msdn.com/Events/Developer-Movement/WebCamp/WEBC3/player?w=512&#038;h=288" width="512px" height="288px" frameborder="0" scrolling="no" marginwidth="0" marginheight="0"></iframe></p>
<p><a href="http://channel9.msdn.com/Events/Developer-Movement/WebCamp/WEBC3" target="_blank">Channel9 Page</a></p>
<h2>Contents</h2>
<ul>
<li>Comparing Azure Virtual Machines, Cloud Services, and Websites</li>
<li>Websites &#8211; start simple, code smart, go live</li>
<li>Hello World Demo</li>
<li>Modern Apps Demo &#8211; deploying from git and using the cross-platform command line interface</li>
<li>Diagnostics and Scale Demo</li>
<li>Shared Instances</li>
<li>Reserved Instances</li>
<li>Website Gallery and WordPress Demo</li>
<li>Supported Frameworks &#8211; ASP, .NET, PHP, and Node.js</li>
<li>Publishing Methods &#8211; FTP, TFS, WebDeploy, and git</li>
<li>Partners</li>
<li>Recap</li>
<li>Closing</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.tylerdoerksen.com/2013/03/13/web-camp-session-video-websites-in-the-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Workflow Tracking Record Types</title>
		<link>http://blog.tylerdoerksen.com/2013/03/04/windows-workflow-tracking-record-types/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=windows-workflow-tracking-record-types</link>
		<comments>http://blog.tylerdoerksen.com/2013/03/04/windows-workflow-tracking-record-types/#comments</comments>
		<pubDate>Mon, 04 Mar 2013 16:06:06 +0000</pubDate>
		<dc:creator>Tyler Doerksen</dc:creator>
				<category><![CDATA[General .NET]]></category>

		<guid isPermaLink="false">http://blog.tylerdoerksen.com/?p=2691</guid>
		<description><![CDATA[This is just a quick post regarding a &#8220;gotcha&#8221; our development team encountered when creating a Windows Workflow custom tracking record. What we were trying to do We created a custom activity which needed to send messages to possibly many &#8230; <a href="http://blog.tylerdoerksen.com/2013/03/04/windows-workflow-tracking-record-types/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This is just a quick post regarding a &#8220;gotcha&#8221; our development team encountered when creating a Windows Workflow custom tracking record.</p>
<h2>What we were trying to do</h2>
<p>We created a custom activity which needed to send messages to possibly many other Workflow services (or Extensions). We thought that registering the services as workflow tracking participants would allow for this.</p>
<p>To send a message to the tracking participant we created a custom tracking record object.</p>
<pre><code>using System.Activities.Tracking;

public class MyTrackingRecord : CustomTrackingRecord
{
    public MyTrackingRecord()
        : base("MyTrackingRecord")
    {
    }

    public string ExtraData { get; set; }
}
</code></pre>
<p>And a tracking participant</p>
<pre><code>using System;
using System.Activities.Tracking;

public class MyTrackingParticipant : TrackingParticipant
{
    protected override void Track(TrackingRecord record, TimeSpan timeout)
    {
        var myRecord = record as MyTrackingRecord;

        if (myRecord != null)
        {
            //do something
        }
    }
}
</code></pre>
<h2>This does not work</h2>
<p>It seems like a simple solution but the <code>record as MyTrackingRecord</code> always returns <code>null</code>. In fact the only type that the record can be sucessfully cast to is a <code>CustomTrackingRecord</code>.</p>
<p>After decompiling the <code>CustomTrackingRecord</code> I noticed that class implements the <code>Clone()</code> method and returns a new record. My guess is that the tracking system clones all the record objects before sending them to each participant. I don&#8217;t know that for sure but it seems reasonable that one participant would not be able to change the object in memory and affect the operation of another participant.</p>
<h2>The Solution</h2>
<p>After adding a <code>Clone()</code> method the problem was resolved.</p>
<pre><code>protected override TrackingRecord Clone()
{
    return new MyTrackingRecord { ExtraData = ExtraData };
}
</code></pre>
<p>There, now I was able to cast to a <code>MyTrackingRecord</code> type and my code executed properly. In the future I would just use the <code>CustomTrackingRecord</code> object which has a <code>Name</code> property to identify the record type and a key-value dictionary for added data. The reason we chose to go with a typed object was to reduce the use of &#8220;magic strings&#8221; that define functionality in the solution.</p>
<p>So by no means is this the only custom tracking solution it was just the path we were heading down.</p>
<p>I hope this helps you out of a jam and as always thanks for reading.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tylerdoerksen.com/2013/03/04/windows-workflow-tracking-record-types/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating a Game for the Windows Store</title>
		<link>http://blog.tylerdoerksen.com/2013/02/16/creating-a-game-for-the-windows-store/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=creating-a-game-for-the-windows-store</link>
		<comments>http://blog.tylerdoerksen.com/2013/02/16/creating-a-game-for-the-windows-store/#comments</comments>
		<pubDate>Sat, 16 Feb 2013 07:04:32 +0000</pubDate>
		<dc:creator>Tyler Doerksen</dc:creator>
				<category><![CDATA[Windows Store]]></category>

		<guid isPermaLink="false">http://blog.tylerdoerksen.com/?p=2621</guid>
		<description><![CDATA[So recently Kyle Funk (a fellow Imaginet-eer) and I started a little side project to build apps for the Windows Store. Kyle wanted to brush up on some client side coding and I wanted to try out the Windows Store &#8230; <a href="http://blog.tylerdoerksen.com/2013/02/16/creating-a-game-for-the-windows-store/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>So recently Kyle Funk (a fellow Imaginet-eer) and I started a little side project to build apps for the Windows Store. Kyle wanted to brush up on some client side coding and I wanted to try out the Windows Store apps compared to my previous Windows Phone experience.</p>
<p>One of the apps that Kyle wrote is called the Animal Sounds Game. Its interface consists of buttons with pictures of animals and when you press the button it plays the sound. Simple I know, but it was a great Windows Store launching point for us.</p>
<p><a href="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/screenshot_02152013_225801.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-width: 0px;" title="screenshot_02152013_225801" alt="screenshot_02152013_225801" src="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/screenshot_02152013_225801_thumb.png" width="569" height="322" border="0" /></a></p>
<p>I asked Kyle to write down some steps to create an app like this and any tips that he would like to share.</p>
<blockquote><p>The following is written by Kyle Funk, a fellow Software Developer at Imaginet</p></blockquote>
<h3></h3>
<h2>Animal Sound Board – Windows Store C# app development and using the MediaElement control Asynchronously</h2>
<p>- To start off, create a new Windows Store Blank App. As common practice, it’s good idea to replace the current MainPage with a new “BasicPage”. Delete the MainPage currently in your project. Once it’s deleted, set up a new BasicPage with the name “MainPage’. You will receive a Dialog Box to alter/add files that you need to accept. The Basic page acts as a good template to start your project. Including Preconfigured binding and a header inside of a grid ready for you to start adding controls. Microsoft also recommends these steps in their Store App tutorials.</p>
<p>The UI for this application is very basic. Just a few buttons with Images in the content of the button. You can create it yourself in Visual Studio or use Expression Blend to assist in the design and photo resources.</p>
<p><a href="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/image.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" alt="image" src="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/image_thumb.png" width="565" height="158" border="0" /></a></p>
<p><em>I decided to use the MediaElement for our audio files. To see supported formats, click here &#8211; </em><a href="http://msdn.microsoft.com/en-us/library/cc189080(v=vs.95).aspx"><em>http://msdn.microsoft.com/en-us/library/cc189080(v=vs.95).aspx</em></a></p>
<p>- Once you find the Images and Audio you want to use, save them in your Assets folder.</p>
<p><a href="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/image1.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" alt="image" src="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/image_thumb1.png" width="244" height="213" border="0" /></a></p>
<p><em>Now let’s configure the URI’s in the fields we set up for each audio file. Make sure to prefix this protocol “ms-appx:///” to the URI. This allows us to access files within our app (Assets folder in this example). Notice the Third Backslash. </em></p>
<p>- Create 2 fields for each Audio you want to play. One will contain the Uri and the other will just be a “MediaElement” dedicated for that sound. You can only have 1 source set to a MediaElement.</p>
<p><a href="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/image2.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" alt="image" src="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/image_thumb2.png" width="565" height="221" border="0" /></a></p>
<p><em>We will set the audio source using the “MediaElement.SetSource” method which takes in RAS (Random access stream) and the MIME (Multipurpose Internet Mail Extensions) Type of the file. I will show you how to set up the Stream and retrieve the MIME type from the file loaded.</em></p>
<p>- Create a method (I named it SetAudio) and add the modifier “async”. We also need to add a parameter of type “Uri” (I named it audioUri). The methods used to set up the stream and access the StorageFile Class for retrieving the audio file can only be run by using the “await” operator.</p>
<p>- Set the return type as Task&lt;MediaElement&gt;. We must add Task&lt;&gt; to the Method declaration because our async method returns a value.</p>
<p>- First let’s load the Audio file using the “StorageFile.GetFileFromApplicationUriasync” and give it the audioUri parameter we passed into the “SetAudio” method. Remember to use the “await” operator in order to access this class.</p>
<p>- Next let’s set up the stream using the file we set up and passing in the AccessMode as Read. “File.OpenAsync(FileAccessMode.Read)”. This also requires the “await” operator.</p>
<p>- Now let’s new up the MediaElement that we will eventually return. In the example below, you’ll notice I have the “AutoPlay” property being set but commented out. This is handy when setting the source of the media element. In some cases, we don’t want the media to play automatically once the source is set. By default its “True”. We will leave it true since the first time the audio is loaded, we want it to play anyways. We won’t load it again after the first time and it will just call “Play” to initiate the sound afterwards.</p>
<p>- By using the “MediaElement.SetSource” method, pass in the Stream and the Content type of the file we loaded. This is simply done by the “ContentType” string property of the File you loaded. EX…LoadedFile.ContentType. See below.</p>
<p>- Now we return the MediaElement. Here is how the final method should look.</p>
<p><a href="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/image3.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" alt="image" src="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/image_thumb3.png" width="565" height="170" border="0" /></a></p>
<p>- At this point, we put some basic code into the click events of the button clicks. We check if the MediaElement Field we set up for this Button is null. If it is, we set the corresponding Field to our SetAudio method using the await operator and passing in the proper Uri field we set up. In case you forgot, remember to add the “async”modifier to the events. Repeat for every sound you want to play.</p>
<p><a href="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/image4.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="image" alt="image" src="http://blog.tylerdoerksen.com/wp-content/uploads/2013/02/image_thumb4.png" width="508" height="214" border="0" /></a></p>
<p><em>Optionally, you could load all the MediaElements on Initialize by setting each field and using the AutoPlay property I mentioned earlier to disable playing them all at once. Then you would just need to call “MediaElement.Play()” in the events.</em></p>
<p>And that is it. Now that you have an app (hopefully a bit different than this one) you can submit it to the windows store. As of today (Feb 15th) this application has been downloaded over 1,000 times! There is a huge market people that want good Windows Store apps, or even just fun ones like this.</p>
<p>If you have any questions about the app please post a comment.</p>
<p>Thanks for reading!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tylerdoerksen.com/2013/02/16/creating-a-game-for-the-windows-store/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Table Storage 2.0 &#8211; Queries</title>
		<link>http://blog.tylerdoerksen.com/2013/01/03/table-storage-v2-queries/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=table-storage-v2-queries</link>
		<comments>http://blog.tylerdoerksen.com/2013/01/03/table-storage-v2-queries/#comments</comments>
		<pubDate>Thu, 03 Jan 2013 21:50:13 +0000</pubDate>
		<dc:creator>Tyler Doerksen</dc:creator>
				<category><![CDATA[Azure]]></category>

		<guid isPermaLink="false">http://blog.tylerdoerksen.com/2013/01/03/table-storage-v2-queries/</guid>
		<description><![CDATA[In the previous blog post I started to talk about the new Azure Storage library (version 2.0). In this entry I want to dig into the query syntax. If you have used the version 1.x storage library you may have &#8230; <a href="http://blog.tylerdoerksen.com/2013/01/03/table-storage-v2-queries/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>In the previous blog post I started to talk about the new Azure Storage library (version 2.0). In this entry I want to dig into the query syntax.</p>
<p>If you have used the version 1.x storage library you may have found the experience similar to Entity Repository in that you used a Context object and lots of LINQ. While this was fairly easy to grasp and understand it was difficult to figure out exactly when the code was making the query to the service. Also, it was a bit annoying that you could not use most of the LINQ functions, anything but &#8220;Where&#8221;, &#8220;First&#8221; and &#8220;Select&#8221; would not work and throw an unsupported exception at runtime.</p>
<p>Now in the new Version 2 you can use a <code>TableQuery</code> object which gives you more control over the query and exactly what you want to happen.</p>
<h2>Filters</h2>
<p>Table storage uses an ODATA interface which supports a few basic url query functions like filter, top, select, and orderby, plus a few more. The storage client library exposes these through the <code>TableQuery</code> class.</p>
<p>In the previous post I demonstrated how to retrieve a single entity using a RowKey/PartitionKey combination. The <code>TableQuery</code> class can be used for more complex data queries like the following.</p>
<p><code>using Microsoft.WindowsAzure.Storage;<br />
using Microsoft.WindowsAzure.Storage.Table;</code></p>
<p><code>TableQuery query = new TableQuery().Where(TableQuery.GenerateFilterCondition("Name", QueryComparisons.Equal, "Tyler"));</code></p>
<p>There are 2 main elements to that statement, <code>GenerateFilterCondition</code> and <code>QueryComparisons</code>. You can use a few variations of these components to get the desired query.</p>
<p><code>GenerateFilterConditionForGuid<br />
GenerateFilterConditionForLong<br />
GenerateFilterConditionForDouble<br />
GenerateFilterConditionForInt<br />
GenerateFilterConditionForDate<br />
GenerateFilterConditionForBool<br />
GenerateFilterConditionForBinary</code><br />
<code><br />
QueryComparisons.Equal<br />
QueryComparisons.NotEqual<br />
QueryComparisons.GreaterThan<br />
QueryComparisons.LessThan<br />
QueryComparisons.GreaterThanOrEqual<br />
QueryComparisons.LessThanOrEqual<br />
</code></p>
<p>If you need to combine multiple filters you the <code>TableQuery.CombineFilters()</code> method.</p>
<p><code>string filterA = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Winnipeg");<br />
string filterB = TableQuery.GenerateFilterCondition("Name", QueryComparisons.Equal, "Tyler");<br />
string combined = TableQuery.CombineFilters(filterA, TableOperators.And, filterB);<br />
TableQuery query = new TableQuery().Where(combined); </code></p>
<p>Here are the operators you can use.</p>
<p><code>TableOperators.And<br />
TableOperators.Or<br />
TableOperators.Not </code></p>
<p>This may seem long-winded but the usage is much more explicit than previous versions.</p>
<h2>Selects</h2>
<p>The other feature I want to quickly go over is the Select function. With this you can retrieve only the data that you need without excessive network access. This may be important for those using this library on WinRT devices.</p>
<p><code>CloudTable customerTable = tableClient.GetTableReference("customer");<br />
TableQuery query = new TableQuery().Select(new string[] { "Name" });<br />
customerTable.ExecuteQuery(query); </code></p>
<p>This will retrieve the names of all the customers in the table.</p>
<h2>Take</h2>
<p>Very simply</p>
<p><code>query.Take(10);<br />
</code></p>
<h2>All Together</h2>
<p><code>TableQuery query = new TableQuery().Where(TableQuery.GenerateFilterCondition("Name", QueryComparisons.Equal, "Tyler")).Select(new string[] { "Email" }).Take(5);<br />
</code></p>
<p>Take this as a quick introduction to the query syntax. There is so much more that I won&#8217;t go into right now. All of the examples are using Dynamic entities but the TableQuery object can also be created with typed entities (<code>TableQuery&lt;Customer&gt;</code>)</p>
<p>I hope this was helpful, as always thanks for reading!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tylerdoerksen.com/2013/01/03/table-storage-v2-queries/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Table Storage 2.0</title>
		<link>http://blog.tylerdoerksen.com/2012/12/16/table-storage-2-0/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=table-storage-2-0</link>
		<comments>http://blog.tylerdoerksen.com/2012/12/16/table-storage-2-0/#comments</comments>
		<pubDate>Sun, 16 Dec 2012 21:24:52 +0000</pubDate>
		<dc:creator>Tyler Doerksen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.tylerdoerksen.com/?p=2381</guid>
		<description><![CDATA[This post has been a long time coming. In late October the Windows Azure Storage Team released a new version of the storage services API libraries. At first these libraries were shipped with the Azure SDK, then later provided by &#8230; <a href="http://blog.tylerdoerksen.com/2012/12/16/table-storage-2-0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This post has been a long time coming. In late October the Windows Azure Storage Team released a new version of the storage services API libraries. At first these libraries were shipped with the Azure SDK, then later provided by NuGet but used the same version number as the Azure SDK. Now even the version numbers are different, where the latest Azure SDK is 1.8 the storage API is on version 2.0.</p>
<p>You can still get the storage SDK <a title="Windows Azure Storage API on NuGet" href="http://nuget.org/packages/WindowsAzure.Storage">on NuGet</a>, or browse/fork the source code <a title="Azure Storage API Source Project" href="https://github.com/WindowsAzure/azure-sdk-for-net">on GitHub</a>.</p>
<h2>Whats new in 2.0</h2>
<p>New Dependencies: The previous version required a reference to the System.Data.Client assembly but now has dependencies on the ODataLib NuGet projects (<code>Microsoft.Data.OData</code>, <code>Microsoft.Data.Edm</code>, <code>System.Spatial</code>)</p>
<p>New Namespace: The namespace has changed from <code>Microsoft.WindowsAzure.StorageClient</code> to <code>Microsoft.WindowsAzure.Storage</code> and the different services are under <code>.Blob .Queue .Table</code> namespaces.</p>
<p>For more information checkout the <a href="http://blogs.msdn.com/b/windowsazurestorage/archive/2012/10/29/introducing-windows-azure-storage-client-library-2-0-for-net-and-windows-runtime.aspx">overview</a>, and <a href="http://blogs.msdn.com/b/windowsazurestorage/archive/2012/10/29/windows-azure-storage-client-library-2-0-breaking-changes-amp-migration-guide.aspx">migration guide</a> articles.</p>
<h2>Table Storage API in 2.0</h2>
<p>Lets get down to it. You can continue to use the API in the standard way with context objects and LINQ but I wanted to show off the new object structure which improves on the clarity of the API.</p>
<p><strong>CloudTable</strong></p>
<p>Rather than instantiating a context class, you can just use the <code>CloudTableClient</code> similar to blobs and queues.<br />
<code><br />
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();<br />
CloudTable customers = tableClient.GetTableReference("customers");<br />
</code><br />
Once you have a <code>CloudTable</code> object you can start creating objects and performing operations.<br />
<code><br />
public class Customer:TableEntity<br />
{<br />
public string FirstName { get; set; }<br />
public string LastName { get; set; }<br />
}</code><br />
<code><br />
Customer newCustomer = new Customer();<br />
newCustomer.RowKey = "tylergd";<br />
newCustomer.PartitionKey = "Manitoba";<br />
newCustomer.FirstName = "Tyler";<br />
newCustomer.LastName = "Doerksen";</code></p>
<p><code>TableOperation insertOp = TableOperation.Insert(newCustomer);<br />
customers.Execute(insertOp);</code></p>
<p><strong>TableOperation and TableBatchOperation</strong></p>
<p>There are a number of static methods to create <code>TableOperation</code> objects like <code>.Insert .Delete .Merge .Replace</code> and a few more variations like <code>.InsertOrMerge</code> all the methods take an ITableEntity interface instance, which the TableEntity base class implements.</p>
<p>To me this is a crucial addition to the API because it allows the user to specifically define the storage operations, giving much more control than the previous data context abstraction.</p>
<p>If you want to perform batched operations you need only use a <code>TableBatchOperation</code> object.</p>
<p><code>TableBatchOperation batch = new TableBatchOperation();<br />
batch.Add(TableOperation.Insert(newCustomer));<br />
customers.ExecuteBatch(batch);</code></p>
<p>Or slightly cleaner&#8230;</p>
<p><code>TableBatchOperation batch = new TableBatchOperation();<br />
batch.Insert(newCustomer);<br />
customers.ExecuteBatch(batch);</code></p>
<p>This operation object structure is also used for read requests, which I will cover in a following post.</p>
<p>This is all the time I have right now. Please look out for the upcoming Table Storage 2.0 posts</p>
<ul>
<li>Read Operations</li>
<li>Dynamic Model Objects</li>
<li>Building Advanced Queries</li>
</ul>
<p>As always thanks for reading!</p>
<p>P.S. &#8211; Right now I am participating in a blog challenge with a few other western Canada software professionals. We have all entered a pool in which you are eliminated if you do not write a post every two weeks. So far everyone is still in and it has produced a number of excellent blog posts! Check out the links below.</p>
<ul>
<li>Aaron Kowall: <a href="http://www.geekswithblogs.net/caffeinatedgeek">http://www.geekswithblogs.net/caffeinatedgeek</a></li>
<li>Dave White: <a href="http://www.agileramblings.com">http://www.agileramblings.com</a></li>
<li>David Alpert: <a href="http://www.spinthemoose.com">http://www.spinthemoose.com</a></li>
<li>Dylan Smith: <a href="http://geekswithblogs.net/Optikal/">http://geekswithblogs.net/Optikal/</a></li>
<li>Steve Rogalsky: <a href="http://winnipegagilist.blogspot.ca">http://winnipegagilist.blogspot.ca</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.tylerdoerksen.com/2012/12/16/table-storage-2-0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tis the season</title>
		<link>http://blog.tylerdoerksen.com/2012/12/03/tis-the-season/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tis-the-season</link>
		<comments>http://blog.tylerdoerksen.com/2012/12/03/tis-the-season/#comments</comments>
		<pubDate>Mon, 03 Dec 2012 17:39:06 +0000</pubDate>
		<dc:creator>Tyler Doerksen</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://blog.tylerdoerksen.com/?p=2311</guid>
		<description><![CDATA[No this post is not about the holidays. It is about speaking events. My blog is a bit sparse these days, mainly because I have been involved in so many events in October-November and that steady stream is not slowing &#8230; <a href="http://blog.tylerdoerksen.com/2012/12/03/tis-the-season/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>No this post is not about the holidays. It is about speaking events.</p>
<p>My blog is a bit sparse these days, mainly because I have been involved in so many events in October-November and that steady stream is not slowing down in December.</p>
<h2>VS 2012 Launch Event @ Winnipeg IMAX &#8211; December 6</h2>
<p><img style="border: 0px;" src="http://blog.tylerdoerksen.com/wp-content/uploads/2012/12/Visual-Studio-2012-Overview.jpg" alt="Visual Studio 2012" width="702" height="360" /></p>
<h1><a title="Register Here" href="http://wpgvsnet2012launch.eventbrite.ca/">Register Here (eventbrite.ca)</a></h1>
<p><strong>Event Details</strong></p>
<ul>
<li><strong>When:</strong> Thursday, Decemer 6th from 8:00 AM &#8211; 4:00 PM</li>
<li><strong>Where:</strong> IMAX Theatre, Portage Place</li>
<li><strong>Cost:</strong> *FREE!*</li>
</ul>
<p><strong>Agenda</strong></p>
<blockquote>
<table>
<tbody>
<tr>
<td>8:00 &#8211; 9:00</td>
<td>Continental Breakfast and Registration</td>
</tr>
<tr>
<td>9:00 &#8211; 9:15</td>
<td>Welcome</td>
</tr>
<tr>
<td>9:15 &#8211; 10:30</td>
<td>End-To-End Application Lifecycle Management with TFS 2012</td>
</tr>
<tr>
<td>10:30 &#8211; 10:45</td>
<td>Break</td>
</tr>
<tr>
<td>10:45 &#8211; 12:00</td>
<td>Improving Developer Productivity with Visual Studio 2012</td>
</tr>
<tr>
<td>12:00 &#8211; 1:00</td>
<td>Lunch Break (Lunch Not Provided)</td>
</tr>
<tr>
<td>1:00 &#8211; 2:15</td>
<td>Web Development in Visual Studio 2012 and .NET 4.5</td>
</tr>
<tr>
<td>2:15 &#8211; 2:30</td>
<td>Break</td>
</tr>
<tr>
<td>2:30 &#8211; 3:45</td>
<td>Microsoft Cloud Development with Azure and Visual Studio 2012</td>
</tr>
<tr>
<td>3:45 &#8211; 4:00</td>
<td>Prizes and Thanks</td>
</tr>
</tbody>
</table>
</blockquote>
<p>Here is the abstract for my talk at 2:30</p>
<p><strong>Microsoft Cloud Development with Azure and Visual Studio 2012</strong><br />
Tyler Doerksen, Imaginet</p>
<p>Microsoft’s public cloud platform is nearing its third year of public availability, supporting web site/service hosting, storage, relational databases, virtual machines, virtual networks and much more. Windows Azure provides both power and flexibility. But to capture this power you need to have the right tools! This session will demonstrate the primary ways you can harness Windows Azure with the .NET platform. We’ll explain cloud service development, packaging, deployment, testing and show how Visual Studio 2012 with the Windows Azure SDK and other Microsoft tools can be used to develop for and manage Windows Azure.Harness the power of the cloud from the comfort of Visual Studio 2012</p>
<p>Also don&#8217;t forget&#8230;</p>
<h1>Vancouver Web Camp &#8211; Online &#8211; December 4</h1>
<p><img style="border: 0px;" src="http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-60-29-metablogapi/5554.image_5F00_37092FFF.png" alt="Vancouver Web Camp" width="700" height="186" /></p>
<h2><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032537060&amp;Culture=en-CA&amp;community=0">Register Online Here</a></h2>
<p>I will be taking questions in the chat online.</p>
<p>Be sure to attend these great events this week! And stay tuned for more coming up in the new year!</p>
<p>Thanks for reading</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tylerdoerksen.com/2012/12/03/tis-the-season/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vancouver Web Camp, Dec 4, In-Person and Online</title>
		<link>http://blog.tylerdoerksen.com/2012/11/28/vancouver-web-camp-dec-4-in-person-and-online/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vancouver-web-camp-dec-4-in-person-and-online</link>
		<comments>http://blog.tylerdoerksen.com/2012/11/28/vancouver-web-camp-dec-4-in-person-and-online/#comments</comments>
		<pubDate>Wed, 28 Nov 2012 20:24:20 +0000</pubDate>
		<dc:creator>Tyler Doerksen</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://blog.tylerdoerksen.com/?p=2261</guid>
		<description><![CDATA[The name of the game is building beautiful, interactive, and fast web sites! On December 4th join Brady Gaster, Jon Galloway, and Xinyang Qiu direct from Redmond as they show you how to build sites using: ASP.NET HTML5 jQuery WebAPI &#8230; <a href="http://blog.tylerdoerksen.com/2012/11/28/vancouver-web-camp-dec-4-in-person-and-online/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img src="http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-60-29-metablogapi/5554.image_5F00_37092FFF.png" alt="Vancouver Web Camp" /></p>
<p>The name of the game is building beautiful, interactive, and fast web sites! On December 4th join Brady Gaster, Jon Galloway, and Xinyang Qiu direct from Redmond as they show you how to build sites using:</p>
<ul>
<li>ASP.NET</li>
<li>HTML5</li>
<li>jQuery</li>
<li>WebAPI</li>
<li>SignalR</li>
<li>and of course Windows Azure</li>
</ul>
<p>If you cannot make it in person to Vancouver you can join me online for the virtual event stream. <a title="Virtual Registration" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032537060&amp;Culture=en-CA&amp;community=0">Register Here&#8230;</a></p>
<p>Check out this list of great topics:</p>
<ul>
<li>What’s new in ASP.NET 4.5</li>
<li>Building and deploying websites with ASP.NET MVC 4</li>
<li>Creating HTML5 Applications with jQuery</li>
<li>Building a service layer with ASP.NET Web API</li>
<li>Leveraging your ASP.NET development skills to build Office Apps</li>
<li>Building and leveraging social services in ASP.NET</li>
<li>Building for the mobile web</li>
<li>Realtime communications with SignalR</li>
<li>Using Cloud Application Services</li>
</ul>
<h2><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032537057&amp;Culture=en-CA&amp;community=0">In-Person Registration</a></h2>
<h2><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032537060&amp;Culture=en-CA&amp;community=0">Online Registration</a></h2>
<p>See you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tylerdoerksen.com/2012/11/28/vancouver-web-camp-dec-4-in-person-and-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrading to Azure SDK 1.8</title>
		<link>http://blog.tylerdoerksen.com/2012/11/15/upgrading-to-azure-sdk-1-8/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=upgrading-to-azure-sdk-1-8</link>
		<comments>http://blog.tylerdoerksen.com/2012/11/15/upgrading-to-azure-sdk-1-8/#comments</comments>
		<pubDate>Fri, 16 Nov 2012 05:07:51 +0000</pubDate>
		<dc:creator>Tyler Doerksen</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Azure SDK]]></category>
		<category><![CDATA[VS2012]]></category>

		<guid isPermaLink="false">http://blog.tylerdoerksen.com/?p=2211</guid>
		<description><![CDATA[Recently I had to work with an older Azure solution which was originally written on Visual Studio 2010 and Windows Azure SDK 1.6. When I opened the solution in VS 2012 it prompted me to upgrade the SDK version which &#8230; <a href="http://blog.tylerdoerksen.com/2012/11/15/upgrading-to-azure-sdk-1-8/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Recently I had to work with an older Azure solution which was originally written on Visual Studio 2010 and Windows Azure SDK 1.6. When I opened the solution in VS 2012 it prompted me to upgrade the SDK version which caused a few problems. In this post I will go over a few of the main ones.</p>
<p>As an example (because I cannot use my real solution) I will be downloading and upgrading the BlobShare sample solution from <a href="http://blobshare.codeplex.com">http://blobshare.codeplex.com</a>. This is a fairly complex solution published about a year ago. To build it requires the WIF (Windows Identity Framework SDK) and Azure SDK installed on your machine.</p>
<h2>Opening the solution for the first time in VS2012</h2>
<p>The first message is from Visual Studio saying that one of the projects requires a “One-way Upgrade”. In this case the project is the Azure BlobShare.ccproj. Once the solution is open you can look at the properties of the Azure project and see that it has been upgraded to October 2012.</p>
<p><a href="http://blog.tylerdoerksen.com/wp-content/uploads/2012/11/image.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blog.tylerdoerksen.com/wp-content/uploads/2012/11/image_thumb.png" width="310" height="40"></a></p>
<p>At first you may be thinking “Great!” but then you try and compile and get a bunch of errors.</p>
<h2></h2>
<h2></h2>
<h2>Missing the ServiceRuntime namespace</h2>
<p>So once you compile you may get a number of reference missing warnings and compilation errors like this.</p>
<blockquote><p>Could not resolve this reference. Could not locate the assembly &#8220;Microsoft.WindowsAzure.ServiceRuntime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL&#8221;. Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.</p>
</blockquote>
<p><font face="Georgia">The res</font>olution to this is to remove and re-add the ServiceRuntime reference. The new reference should show Version 1.8.0.0</p>
<p>There are a few Azure libraries that have been added to NuGet but the Service Runtime assembly is not one of them.</p>
<h2>Azure Storage Client Version 2.0</h2>
<p>Occasionally when Visual Studio upgrades the projects it may add version 2.0 of the Storage Client library to the project. If that happens you will know from a large amount of errors. After version 1.7, 2.0 introduced a number of breaking changes to the framework.</p>
<p>To re-add version 1.7 to your projects, just use the NuGet package manager console.</p>
<p><font face="Courier New">Install-Package WindowsAzure.Storage -Version 1.7.0.0</font></p>
<p>After running that command in the package manager, you should not get any more storage API errors. I do recommend upgrading to the newest version of the storage library. Here is an article about the significant breaking changes in the library. <a href="http://blogs.msdn.com/b/windowsazurestorage/archive/2012/10/29/windows-azure-storage-client-library-2-0-breaking-changes-amp-migration-guide.aspx" target="_blank">Windows Azure Storage Team Blog</a></p>
<p>Once you get all of those straightened out you should have a successful compilation.</p>
<p>If you have any other problems with your solution upgrades, feel free to comment below or drop me a line at <a href="mailto:tylergd@outlook.com">tylergd@outlook.com</a></p>
<p>Thanks for reading.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tylerdoerksen.com/2012/11/15/upgrading-to-azure-sdk-1-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Website Pricing, Shared or Reserved</title>
		<link>http://blog.tylerdoerksen.com/2012/10/11/website-pricing-shared-or-reserved/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=website-pricing-shared-or-reserved</link>
		<comments>http://blog.tylerdoerksen.com/2012/10/11/website-pricing-shared-or-reserved/#comments</comments>
		<pubDate>Thu, 11 Oct 2012 14:18:00 +0000</pubDate>
		<dc:creator>Tyler Doerksen</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Pricing]]></category>
		<category><![CDATA[Websites]]></category>

		<guid isPermaLink="false">http://blog.tylerdoerksen.com/?p=2091</guid>
		<description><![CDATA[Less than a month ago (Sept 17), there was an update to Windows Azure Websites. This update added a third option for hosting websites, the Free option. Previously all Shared hosted sites were free but now you can choose between &#8230; <a href="http://blog.tylerdoerksen.com/2012/10/11/website-pricing-shared-or-reserved/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Less than a month ago (Sept 17), there was an update to Windows Azure Websites. This update added a third option for hosting websites, the Free option.</p>
<p>Previously all Shared hosted sites were free but now you can choose between Free, Shared, or Reserved. Here is a brief summary of the functionality of each.</p>
<p><strong>Free</strong>: You know what they say “Free is the new Shared” well in this case that’s right. Free is like shared in that your site could be hosted on the same VM as other sites but you cannot assign a different domain name to the site. With Free the site will always be &lt;something&gt;.azurewebsites.net</p>
<p><strong><a href="http://blog.tylerdoerksen.com/wp-content/uploads/2012/10/image.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: right; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" align="right" src="http://blog.tylerdoerksen.com/wp-content/uploads/2012/10/image_thumb.png" width="159" height="197"></a>Shared</strong>: The same hosting as free in that the site is not on a dedicated VM, however with this option you pay for the ability to assign your own domain to the site, even without a subdomain or what is called a “naked domain”.</p>
<p><strong>Reserved</strong>: With this option you can assign the domain like shared but all of your sites in that datacenter are hosted on a reserved instance. The key point here is that all your websites are hosted by the same reserved instance. So if you have a high traffic site that requires 2 VMs and another small site, both will gain the 2nd VM if they are in the same datacenter.</p>
<h2></h2>
<h2>Pricing</h2>
<p>Also before this change the only option that would show up on your bill was the reserved instance but now that there is a cost for the Shared instance, you may need to make some decisions on how you are hosting your sites.</p>
<p>Since all of your Reserved instance sites share one cost for the machine, you may want to go to reserved if you have a number of small traffic sites to host. However, at what point would you switch from Shared to Reserved? Take a look at these screenshots from the Azure pricing calculator.</p>
<p><a href="http://blog.tylerdoerksen.com/wp-content/uploads/2012/10/image1.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blog.tylerdoerksen.com/wp-content/uploads/2012/10/image_thumb1.png" width="569" height="143"></a></p>
<p><a href="http://blog.tylerdoerksen.com/wp-content/uploads/2012/10/image2.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://blog.tylerdoerksen.com/wp-content/uploads/2012/10/image_thumb2.png" width="569" height="136"></a></p>
<p>So Reserved you are paying per VM and Shared you are paying per site it would take about 6 sites to reach the cost of a single small VM. I don’t know what the performance gains are for Reserved vs Shared but this gives you an idea as to what the cost of a Shared site would be compared to a Reserved instance.</p>
<p>If you are planning on deploying multiple sites or any services to Azure I suggest playing around with the pricing calculator for a while. <a href="https://www.windowsazure.com/en-us/pricing/calculator/">https://www.windowsazure.com/en-us/pricing/calculator/</a></p>
<p>Thanks for reading!</p>
<p>Tyler Doerksen</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tylerdoerksen.com/2012/10/11/website-pricing-shared-or-reserved/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
