<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7686673531992223301</id><updated>2011-12-30T17:04:44.190+01:00</updated><category term='C#'/><category term='PDC 2010'/><category term='Windows Azure'/><category term='ADO.NET Data Services'/><category term='T4'/><category term='WCF Data Services'/><category term='Kinect for Windows'/><category term='Hosted Web Core'/><category term='Windows Azure Storage'/><category term='SQLAzure'/><category term='.NET'/><category term='Silverlight'/><title type='text'>Nico's .NET blog</title><subtitle type='html'>Blogging on Windows Azure, .NET, C# and Silverlight</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-3902687415158907051</id><published>2011-12-30T17:04:00.001+01:00</published><updated>2011-12-30T17:04:44.196+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Allow Silverlight to access clipboard after having clicked “NO” before</title><content type='html'>&lt;p&gt;Silverlight applications can put information into the computer’s clipboard. But only when the user grants the application access to it.&lt;/p&gt; &lt;p&gt;So while using Silverlight apps online you might have come across this dialog:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-MbnPXuZ-1Wc/Tv3hESmU1RI/AAAAAAAAAJA/aDYK67S5QQs/s1600-h/image%25255B7%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-5Lqo41soyvM/Tv3hEy0npUI/AAAAAAAAAJI/JLN1XtN9tTA/image_thumb%25255B3%25255D.png?imgmax=800" width="379" height="161"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I accidentally clicked “no” once and had lots of trouble to reverse this step because I haven’t been prompted this question again.&lt;/p&gt; &lt;p&gt;Even google was no help in this case. Neither was re-installing Silverlight.&lt;/p&gt; &lt;p&gt;Finally a heroic search in the registry gave a solution. There is a place in the registry where Silverlight places the information about clipboard access.&lt;br&gt;HKEY_CURRENT_USER\Software\AppDataLow\Software\Microsoft\Silverlight\Permissions&lt;/p&gt; &lt;p&gt;Inside that Key is a subfolder for each Silverlight application that has prompted this question. If you delete the proper folder, you will be prompted again the next time.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-HWk4Z5vJJ3o/Tv3hFr4GReI/AAAAAAAAAJQ/i5Sjn5R9asg/s1600-h/image%25255B12%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-5T4QZPU-ac8/Tv3hGi6FSKI/AAAAAAAAAJY/6trmB5IlVik/image_thumb%25255B6%25255D.png?imgmax=800" width="360" height="436"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-3902687415158907051?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/3902687415158907051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/12/allow-silverlight-to-access-clipboard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3902687415158907051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3902687415158907051'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/12/allow-silverlight-to-access-clipboard.html' title='Allow Silverlight to access clipboard after having clicked “NO” before'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-5Lqo41soyvM/Tv3hEy0npUI/AAAAAAAAAJI/JLN1XtN9tTA/s72-c/image_thumb%25255B3%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-2350005730945618697</id><published>2011-11-14T16:11:00.001+01:00</published><updated>2011-11-14T16:11:34.034+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Setting environment variables on Windows Azure: easy way</title><content type='html'>&lt;p&gt;A few hours after writing the last post, I discovered that one can specify environment variables in the .csdef file:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 400px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Runtime&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Environment&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffff00; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Variable&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"a"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"b"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Environment&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Runtime&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Don't know yet, if this does the same as my code in the last post. I might investigate on that... &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-2350005730945618697?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/2350005730945618697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/11/setting-environment-variables-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2350005730945618697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2350005730945618697'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/11/setting-environment-variables-on.html' title='Setting environment variables on Windows Azure: easy way'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-1370374783757471276</id><published>2011-11-14T15:17:00.001+01:00</published><updated>2011-11-14T15:17:08.918+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Setting environment variables in Windows Azure</title><content type='html'>&lt;p&gt;At the latest when you want to run java applications on Windows Azure you need to set several environment variables. Since there are startup tasks you may perform before your Role is being started, this obviously is the place where to set these variables. But there are some difficulties:&lt;/p&gt; &lt;h3&gt;Setting environment variables Intentional-Style&lt;/h3&gt; &lt;p&gt;Setting environment variables using the well known &lt;font face="Consolas"&gt;set&lt;/font&gt; command line tool works on Windows Azure like on premise:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 559px; padding-right: 5px; height: 52px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;set MYPATH=C:\Directory\&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h5&gt;BUT:&lt;/h5&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;This only works for &lt;em&gt;one command shell session&lt;/em&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;This only works for the current user&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;The variables set should be available all time and for all users. So they need to be set as system variables. And system variables may only be set by an administrator.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Setting environment variables correctly&lt;/h3&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Make sure your startup script is run with elevated permissions.&lt;br&gt;Check your .csdef file to look similar to this:&lt;br&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 542px; padding-right: 5px; height: 169px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Startup&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Task&lt;/span&gt; &lt;span style="color: #ff0000"&gt;commandLine&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Startup.cmd"&lt;/span&gt; &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffff00; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;        &lt;span style="color: #ff0000"&gt;executionContext&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"elevated"&lt;/span&gt; &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;        &lt;span style="color: #ff0000"&gt;taskType&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"simple"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Startup&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Use the &lt;font face="Consolas"&gt;setx&lt;/font&gt; command line tool with the /M parameter to set system variables:&lt;br&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 541px; padding-right: 5px; height: 52px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;setx MYPATH C:\Directory\ /M&lt;/pre&gt;&lt;/pre&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If you need the variables set to use them in your startup script, you need to set them with the &lt;font face="Consolas"&gt;set&lt;/font&gt; command &lt;strong&gt;again&lt;/strong&gt;.&lt;br&gt;- &lt;font face="Consolas"&gt;set &lt;/font&gt;&lt;font face="Arial"&gt;works for the current session (the startup script)&lt;br&gt;- &lt;font face="Consolas"&gt;setx&lt;/font&gt;&lt;/font&gt;&lt;font face="Arial"&gt; works for all session started after setting the variables&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h5&gt;References:&lt;/h5&gt;&lt;br /&gt;&lt;p&gt;How to use the setx command: &lt;a title="http://ss64.com/nt/setx.html" href="http://ss64.com/nt/setx.html"&gt;http://ss64.com/nt/setx.html&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-1370374783757471276?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/1370374783757471276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/11/setting-environment-variables-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/1370374783757471276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/1370374783757471276'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/11/setting-environment-variables-in.html' title='Setting environment variables in Windows Azure'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-6516763036303092527</id><published>2011-10-25T13:59:00.001+02:00</published><updated>2011-10-25T13:59:30.884+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Sending e-mails using IIS SMTP Server on Windows Azure</title><content type='html'>&lt;p&gt;If you want to send emails from a Windows Azure Role, there’s the possibility to use the built-in SMTP Server of IIS 6.0. Here is a guide how to use startup scripts and PowerShell commands to set up a SMTP server in the cloud.&lt;/p&gt; &lt;p&gt;Before you start make sure that you’re running a &lt;strong&gt;Windows 2008 Server R2&lt;/strong&gt; in the cloud by setting the &lt;font color="#ff0000" face="Consolas"&gt;osFamily&lt;/font&gt; Attribute to &lt;font face="Consolas"&gt;&lt;font color="#ff0000"&gt;osFamily&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#000000"&gt;”&lt;/font&gt;&lt;font color="#0000ff"&gt;2&lt;/font&gt;”&lt;/font&gt; in the ServiceConfiguration.cscfg file.&lt;/p&gt; &lt;h4&gt;Setup the SMTP&lt;/h4&gt; &lt;p&gt;&lt;a href="http://code-inside.de/blog/2009/10/30/howto-smtp-server-auf-dem-windows-server-2008-installieren/" target="_blank"&gt;Here&lt;/a&gt; is a guide that shows how to set up the SMTP server manually. Those are the same steps we’re going to do here using scripts. It helped me to understand what’s necessary to do. Just deploy any Azure Project to the Cloud, RDP in, install the SMTP-Server feature and do the steps described in that guide.&lt;/p&gt; &lt;p&gt;But now to the automated setup scripts:&lt;/p&gt; &lt;p&gt;1. Create a new startup task in the ServiceConfiguration.cscfg&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 569px; padding-right: 5px; height: 63px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Startup&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Task&lt;/span&gt; &lt;span style="color: #ff0000"&gt;commandLine&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Startup.cmd"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;executionContext&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"elevated"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;taskType&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"simple"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Startup&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;2. The startup file first needs to install the SMTP-Server feature automatically. To gain this it uses the PowerShell 2.0. After that it calls a VBScript that configures the SMTP-Server.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The Startup.cmd:&lt;br&gt;&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 570px; padding-right: 5px; height: 77px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;powershell -command "Set-ExecutionPolicy Unrestricted"&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;p&gt;powershell .\InstallSmtp.ps1&lt;/p&gt;&lt;p&gt;cscript ConfigSmtp.vbs&lt;/p&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;The InstallSmtp.ps1 PowerShell script:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 569px; padding-right: 5px; height: 52px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;Import-Module Servermanager&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;Add-WindowsFeature SMTP-Server&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;3. Now we need to create the VBScript that configures the SMTP server: We need to add all IP addresses that are allowed to send mails through this SMTP server to the grant list. Assuming only applications running on the same server are allowed to send emails we’re going to add 127.0.0.1 to that list.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The ConfigSmtp.vbs&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 567px; padding-right: 5px; height: 255px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;Option&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Explicit&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; smtpServer, relayIpList&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;// Get the default instance of the SMTP server&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; smtpServer = &lt;span style="color: #0000ff"&gt;GetObject&lt;/span&gt;("&lt;span style="color: #8b0000"&gt;IIS://localhost/smtpsvc/1&lt;/span&gt;")&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;// Get the IPList&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; relayIpList = smtpServer.&lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;("&lt;span style="color: #8b0000"&gt;RelayIpList&lt;/span&gt;")&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;// Add localhost to that list&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;relayIpList.GrantByDefault = false&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;relayIpList.IpGrant = "&lt;span style="color: #8b0000"&gt;127.0.0.1&lt;/span&gt;"&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;// Save changes&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;smtpServer.SetInfo&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;4. Deploy to the cloud&lt;/p&gt;&lt;br /&gt;&lt;h4&gt;Use the SMTP from C# code&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;To use the local SMTP server from within your C# code use the following lines:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 569px; padding-right: 5px; height: 169px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;var client = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; System.Net.Mail.SmtpClient("&lt;span style="color: #8b0000"&gt;localhost&lt;/span&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;client.Send("&lt;span style="color: #8b0000"&gt;from@domain.tld&lt;/span&gt;",&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;            "&lt;span style="color: #8b0000"&gt;to@domain.tld&lt;/span&gt;",&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;            "&lt;span style="color: #8b0000"&gt;This is my subject&lt;/span&gt;",&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;            "&lt;span style="color: #8b0000"&gt;Hello, this is a mail from the cloud!&lt;/span&gt;");&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h4&gt;Don’t get blacklisted&lt;/h4&gt;&lt;br /&gt;&lt;p&gt;Even Steve Marx recommended not to use the SMTP server feature on Windows Azure instances because they soon would be blacklisted. To avoid getting on a blacklist you could use a smart host to deliver your emails with.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;If you want to use a smart host in your deployment, you need to extend the ConfigSmtp.vbs:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 564px; padding-right: 5px; height: 363px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;// set the outbound connector to a smart host&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;smtpServer.SmartHostType = 2&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;smtpServer.SmartHost = "&lt;span style="color: #8b0000"&gt;smtp.mysmarthost.tld&lt;/span&gt;"&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;// use basic authentication&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;smtpServer.RouteAction = 264&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;smtpServer.RouteUserName = "&lt;span style="color: #8b0000"&gt;myName&lt;/span&gt;"&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;smtpServer.RoutePassword = "&lt;span style="color: #8b0000"&gt;myPassword&lt;/span&gt;"&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #008000"&gt;// save changes&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;smtpServer.SetInfo&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;In this case I have been using the SMTP relay services offered by &lt;a href="http://dyn.com"&gt;http://dyn.com&lt;/a&gt; which worked just fine. Depending on what service you’re about to use, the settings might differ.&lt;/p&gt;&lt;br /&gt;&lt;h4&gt;&lt;/h4&gt;&lt;br /&gt;&lt;h4&gt;References&lt;/h4&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;the IIS WMI documentation gives help when trying to find out what properties can be used in the VBScript:&lt;br&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms525265(v=VS.90).aspx" href="http://msdn.microsoft.com/en-us/library/ms525265(v=VS.90).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms525265(v=VS.90).aspx&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Here are some sample scripts for IIS&lt;br&gt;&lt;a title="http://www.thescriptlibrary.com/default.asp?Action=Browse&amp;amp;Level=Category2&amp;amp;ScriptLanguage=VBScript&amp;amp;Category1=IIS&amp;amp;Category2=IIS%206.0" href="http://www.thescriptlibrary.com/default.asp?Action=Browse&amp;amp;Level=Category2&amp;amp;ScriptLanguage=VBScript&amp;amp;Category1=IIS&amp;amp;Category2=IIS%206.0"&gt;http://www.thescriptlibrary.com/default.asp?Action=Browse&amp;amp;Level=Category2&amp;amp;ScriptLanguage=VBScript&amp;amp;Category1=IIS&amp;amp;Category2=IIS%206.0&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;IIS Metabase Property Reference (here with the RouteAction enumeration)&lt;br&gt;&lt;a title="http://technet.microsoft.com/en-us/library/cc757175" href="http://technet.microsoft.com/en-us/library/cc757175"&gt;http://technet.microsoft.com/en-us/library/cc757175&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-6516763036303092527?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/6516763036303092527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/10/sending-e-mails-using-iis-smtp-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6516763036303092527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6516763036303092527'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/10/sending-e-mails-using-iis-smtp-server.html' title='Sending e-mails using IIS SMTP Server on Windows Azure'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-3615493264434157158</id><published>2011-10-24T11:38:00.001+02:00</published><updated>2011-10-24T11:38:28.719+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Installing updates manually on Windows Azure</title><content type='html'>&lt;p&gt;While trying to manually install the PowerShell 2.0 update on a Windows Azure Role I ran into the following error message:&lt;/p&gt; &lt;p&gt;“Installer encountered an error: 0x80070422”&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-n40GRJj_Wac/TqUyEUG4O7I/AAAAAAAAAIw/kadxdPr9zOA/s1600-h/image%25255B4%25255D.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-0auDWC-AqUk/TqUyE5r2qAI/AAAAAAAAAI0/nT1h7WfDVLs/image_thumb%25255B2%25255D.jpg?imgmax=800" width="463" height="202"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;In order to solve this problem:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Open the Server Manager: Start &amp;gt; Right Click on “Computer” &amp;gt; Manage&lt;/li&gt; &lt;li&gt;Navigate to Configuration &amp;gt; Services&lt;/li&gt; &lt;li&gt;Enable the &lt;strong&gt;Background Intelligent Transfer Service&lt;/strong&gt;&amp;nbsp; and start it&lt;/li&gt; &lt;li&gt;Enable the &lt;strong&gt;Windows Update&lt;/strong&gt; Service and start it&lt;/li&gt; &lt;li&gt;Now you can manually install updates.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;I Got this hint from: &lt;a href="http://blogs.cametoofar.com/post/Installer-encountered-an-error-0x80070422.aspx" target="_blank"&gt;Came Too Far&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-3615493264434157158?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/3615493264434157158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/10/installing-updates-manually-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3615493264434157158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3615493264434157158'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/10/installing-updates-manually-on-windows.html' title='Installing updates manually on Windows Azure'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-0auDWC-AqUk/TqUyE5r2qAI/AAAAAAAAAI0/nT1h7WfDVLs/s72-c/image_thumb%25255B2%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-3334847731465952459</id><published>2011-09-25T13:43:00.001+02:00</published><updated>2011-09-25T13:45:19.896+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>How To: Look inside the Service Package file</title><content type='html'>&lt;p&gt;If you ever wanted to see what’s inside a published .cspkg file: here is a small guide how to achieve this…&lt;/p&gt; &lt;p&gt;First there is to say that a .cspkg-file is only a ZIP file with extensions changed. But the contents are encrypted. But there is a way to create unencrypted Service Packages:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Close Visual Studio&lt;/li&gt; &lt;li&gt;Shut down Windows Azure Compute Emulator&lt;/li&gt; &lt;li&gt;Go to Control Panel &amp;gt; System and Maintenance &amp;gt; System&lt;/li&gt; &lt;li&gt;Click on “Advanced Settings” in the pane on the left&lt;/li&gt; &lt;li&gt;Switch to the “Advanced” tab and click on the “Environment Variables” Button.&lt;br&gt;The “Environment Variables” dialog appears.&lt;/li&gt; &lt;li&gt;Check for a System Variable named _CSPACK_FORCE_NOENCRYPT_&lt;br&gt;If there is no such variable, create it.&lt;/li&gt; &lt;li&gt;Set the value of the _CSPACK_FORCE_NOENCRYPT_ variable to “true”&lt;br&gt;&lt;a href="http://lh4.ggpht.com/-QR-BcPId8G0/Tn8T8KW0ldI/AAAAAAAAAIo/WbzRympW6ks/s1600-h/image_thumb_4%25255B2%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="image_thumb_4" border="0" alt="image_thumb_4" src="http://lh6.ggpht.com/-pZYhFul-I8k/Tn8T-FnqdkI/AAAAAAAAAIs/tvUuANx6HDA/image_thumb_4_thumb.png?imgmax=800" width="230" height="244"&gt;&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Start Visual Studio again and publish a Cloud Service Project.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Note: When publishing without encryption, Visual Studio warns you with the following message in the output window&lt;br&gt;&lt;em&gt;CloudServices44 : Forcing creation of unencrypted package...&lt;/em&gt;&lt;/p&gt; &lt;p&gt;To sneak inside the package do the following steps:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Rename your &amp;lt;cloudservice&amp;gt;.cspkg file to &amp;lt;cloudservice&amp;gt;.zip&lt;/li&gt; &lt;li&gt;Unpack that .zip folder&lt;/li&gt; &lt;li&gt;Inside the uncompressed folder there is a file named after your web role &amp;lt;WebRole&amp;gt;&amp;lt;Guid&amp;gt;.cssx&lt;/li&gt; &lt;li&gt;Rename the .cssx file to .zip&lt;/li&gt; &lt;li&gt;Since you performed the steps before, this .zip file is unencrypted now. Unzip it.&lt;/li&gt; &lt;li&gt;Find the content of your package in the “sitesroot” folder.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;Caution&lt;/strong&gt;: Although either encrypted and unencrypted packages can be deployed to the cloud, it’s highly recommended to only use encrypted packages for security issues.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-3334847731465952459?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/3334847731465952459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/09/how-to-look-inside-service-package-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3334847731465952459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3334847731465952459'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/09/how-to-look-inside-service-package-file.html' title='How To: Look inside the Service Package file'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-pZYhFul-I8k/Tn8T-FnqdkI/AAAAAAAAAIs/tvUuANx6HDA/s72-c/image_thumb_4_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-7844087028771521212</id><published>2011-09-25T13:15:00.001+02:00</published><updated>2011-09-25T13:15:17.086+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Issue: change physical path of site named “Web”</title><content type='html'>&lt;p&gt;In earlier posts I showed how to use multiple sites within a single WebRole. This required to use the &lt;font face="Courier New"&gt;physicalDirectory&lt;/font&gt; attribute within the ServiceDefinition file. If you tried to use this attribute you might have run into this issue:&lt;/p&gt; &lt;p&gt;The default site in a WebRole is named “Web”. When you set the &lt;font face="Courier New"&gt;physicalDirectory&lt;/font&gt; attribute to point to any location – no change will happen.&lt;/p&gt; &lt;p&gt;It seems as if a site named “Web” ignores the &lt;font face="Courier New"&gt;physicalDirectory&lt;/font&gt; attribute.&lt;/p&gt; &lt;p&gt;But if you change the name to any other name: the &lt;font face="Courier New"&gt;physicalDirectory&lt;/font&gt; attribute will be used!&lt;/p&gt; &lt;p&gt;For further explanation have a look at the following xml snippets from the .csdef file:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Web"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Binding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;endpointName&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;This will use the default content. &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Web"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;physicalDirectory&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"C:\Code\WebApplication2"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Binding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;endpointName&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;This will still use the default content.&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Web1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;physicalDirectory&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"C:\Code\WebApplication2"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Binding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;endpointName&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;This will use content from WebApplication2.&lt;br /&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-7844087028771521212?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/7844087028771521212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/09/issue-change-physical-path-of-site.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7844087028771521212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7844087028771521212'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/09/issue-change-physical-path-of-site.html' title='Issue: change physical path of site named “Web”'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-7475312428058266009</id><published>2011-08-26T09:16:00.000+02:00</published><updated>2011-08-26T09:29:40.758+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>msshrtmi.dll - Hybrid Applications: Running in the cloud AND on premise</title><content type='html'>&lt;p&gt;Recently I tried to deploy an application that was originally designed for the cloud on an in-house server. The only cloud capability the application used was the Windows Azure Blob Storage. &lt;/p&gt; &lt;p&gt;So in advance I changed the application to differ between &lt;/p&gt; &lt;ul&gt; &lt;li&gt;being run in the cloud and using the Blob Storage and  &lt;li&gt;being run on premise and using the local disk storage&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;by using the following flag as an indicator:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: RoleEnvironment.IsAvailable&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;In both scenarios the deployment contains the Microsoft.WindowsAzure.StorageClient.dll. This works perfectly in the cloud but raised the following error on premise:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;font style="background-color: #cccccc"&gt;&lt;strong&gt;Exception type:&lt;/strong&gt; FileNotFoundException &lt;br&gt;&lt;strong&gt;Exception message:&lt;/strong&gt; File or assembly "msshrtmi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35", or one of its dependencies, was not found.&lt;br&gt;&amp;nbsp;&amp;nbsp; at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeEnvironment()&lt;br&gt;&amp;nbsp;&amp;nbsp; at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment..cctor()&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;font style="background-color: #cccccc"&gt;&lt;/font&gt;&lt;font style=""&gt;There are two possible ways to solve this issue:&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Copy the msshrtmi.dll manually to your on premise deployment.&lt;br&gt;For example in the \bin folder next to the WindowsAzure.StorageClient.dll.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Install the Windows Azure SDK on your in-house server.&lt;/li&gt;&lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-7475312428058266009?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/7475312428058266009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/08/msshrtmidll-hybrid-applications-running.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7475312428058266009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7475312428058266009'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/08/msshrtmidll-hybrid-applications-running.html' title='msshrtmi.dll - Hybrid Applications: Running in the cloud AND on premise'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-78030237098611013</id><published>2011-07-18T11:33:00.001+02:00</published><updated>2011-07-18T11:33:09.201+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Azure Web Role Accelerator</title><content type='html'>&lt;p&gt;Deploying new WebSites to Windows Azure or updating existing ones used to take a lot of time. And the Windows Azure Team worked hard on this issue making it more comfortable for developers.&lt;/p&gt; &lt;p&gt;And the result of this effort is the “Windows Azure Accelerator for Web Roles” announced a few days ago. That is a new Project Template generating an Azure Project containing a WebRole and a website project for management purposes. Here you can define how many instances of your website are to be created in the cloud. After deploying this project template Windows Azure will create the instances you requested. Then you can create websites in the management website and publish other websites in less than 30 seconds to the cloud. Those websites will immediately be available on all instances. The template uses your Windows Azure Storage account for this feature.&lt;/p&gt; &lt;p&gt;Here is a short demo video of the Web Role Accelerator:&lt;/p&gt; &lt;p&gt;&lt;iframe style="width: 512px; height: 288px" src="http://channel9.msdn.com/posts/Getting-Started-with-the-Windows-Azure-Accelerator-for-Web-Roles/player?w=512&amp;amp;h=288" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;p&gt;Download the Web Role Accelerator from codeplex here: &lt;a title="http://waawebroles.codeplex.com/" href="http://waawebroles.codeplex.com/"&gt;http://waawebroles.codeplex.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Backlink to the Windows Azure Team Blog: &lt;a href="http://blogs.msdn.com/b/windowsazure/archive/2011/07/12/now-available-windows-azure-accelerator-for-web-roles.aspx"&gt;NOW AVAILABLE: Windows Azure Accelerator for Web Roles&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-78030237098611013?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/78030237098611013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/07/windows-azure-web-role-accelerator.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/78030237098611013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/78030237098611013'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/07/windows-azure-web-role-accelerator.html' title='Windows Azure Web Role Accelerator'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-675559340385674891</id><published>2011-07-03T01:16:00.000+02:00</published><updated>2011-07-14T01:19:15.661+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>tangible.AzureIO - small sample</title><content type='html'>&lt;p&gt;Because I’m short on time at the moment, I’ll just post a tiny little sample on the AzureIO library. I promise to publish a larger sample soon. Maybe I can think of something really useful, we’ll see…&lt;/p&gt; &lt;p&gt;For the moment it’s just a simple WPF application that allows the user to select a file (#1 in the picture) and upload it to the Windows Azure BlobStorage (#2). As a proof that the file was really uploaded, the application displays the url of the blob where the file can be viewed in the browser.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-1Tak2OHj_w8/Th4nnp1UXWI/AAAAAAAAAIg/MrKTkDVLV9k/s1600-h/sample%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="sample" border="0" alt="sample" src="http://lh4.ggpht.com/-tzysvJRGZwI/Th4noQvUWJI/AAAAAAAAAIk/DOgvqlu7GEo/sample_thumb%25255B1%25255D.png?imgmax=800" width="418" height="299"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;There’s not a lot of code behind this sample. At first it’s to mention that the AzureIO library requires a configuration setting in the app.config file. The connection string to the StorageAccount needs to be set there.&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;appSettings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;add&lt;/span&gt; &lt;span style="color: #ff0000"&gt;key&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"StorageCredentials"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"UseDevelopmentStorage=true"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;appSettings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;This configuration makes the application use the development storage of the Windows Azure SDK. To upload the file to the blob storage those three lines of code suffice:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: var fileName = System.IO.Path.GetFileName(txtFile.Text);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: var content = System.IO.File.ReadAllBytes(txtFile.Text);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: tangible.AzureIO.File.WriteAllBytes(fileName, content);&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Voilà – that’s it. Copy the displayed URL to your browser and get your file from the cloud!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Download the sample code here: &lt;a href="http://nico.zehage.net/Entwicklung/Downloads/AzureIOSample.zip"&gt;AzureIOSample.zip&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-675559340385674891?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/675559340385674891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/07/tangibleazureio-small-sample.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/675559340385674891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/675559340385674891'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/07/tangibleazureio-small-sample.html' title='tangible.AzureIO - small sample'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-tzysvJRGZwI/Th4noQvUWJI/AAAAAAAAAIk/DOgvqlu7GEo/s72-c/sample_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-6284091755524355840</id><published>2011-07-01T00:44:00.000+02:00</published><updated>2011-07-14T00:57:01.634+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>tangible.AzureIO - Accessing BlobStorage like System.IO</title><content type='html'>&lt;p&gt;Writing and reading blobs to and from the Windows Azure BlobStorage isn’t as comfy as one could wish. So why not dealing with Files transferred to the cloud as if they were files we are used to work with?&lt;/p&gt; &lt;p&gt;Nothing looks smoother than this simple call to create a new file and write some bytes in it: &lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: System.IO.File.WriteAllBytes("&lt;span style="color: #8b0000"&gt;MyFile.ext&lt;/span&gt;", &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] { ... });&lt;/pre&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Doing the same in the cloud requires connections to the CloudStorage, creating a BlobClient, dealing with containers and different BlobTypes … A huge overhead to what one really needs in this case. But how about this call doing exactly the same as shown above in the local file system – only in the cloud:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: tangible.AzureIO.File.WriteAllBytes("&lt;span style="color: #8b0000"&gt;File.ext&lt;/span&gt;", &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;byte&lt;/span&gt;[] { ... });&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Easy, isn’t it?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The tangible.AzureIO library contains nearly all functionality offered by System.IO for the cloud. A must have for developers who want to move their applications to the cloud with least changes! Find pendants to System.IO.Path in tangible.AzureIO.Path, System.IO.Directory in tangible.AzureIO.Directory and so on…&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I spent a lot of time on this project and finally may publish a first beta version here. The library for download below is delivered “as is” – without any warranty and claims neither completeness nor faultlessness. All right reserved. You may use it in any of your projects – but it’s still a beta and subject to change.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I appreciate any comments and reviews on this library! So feel free to leave a comment to this blog post or send me an email to nico[at]zehage.net.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Download tangible.AzureIO here: &lt;a href="http://nico.zehage.net/Entwicklung/Downloads/tangible.AzureIO.zip"&gt;tangible.AzureIO.zip&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-6284091755524355840?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/6284091755524355840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/07/tangibleazureio-accessing-blobstorage.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6284091755524355840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6284091755524355840'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/07/tangibleazureio-accessing-blobstorage.html' title='tangible.AzureIO - Accessing BlobStorage like System.IO'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-2064626691170461739</id><published>2011-06-19T12:22:00.001+02:00</published><updated>2011-06-19T12:22:08.522+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='SQLAzure'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>CloudNinja project: Multi tenancy and metering sample</title><content type='html'>&lt;p&gt;Few days ago version 2.0 of the Cloud Ninja project was published on the CodePlex platform. This sample project demonstrates how some of Windows Azure’s capabilities can be used to implement common cloud features.&lt;/p&gt; &lt;p&gt;The features shown in the sample are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Multi tenancy&lt;/strong&gt; where each tenant has his own SQLAzure database&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Metering &lt;/strong&gt;the usage of each tenant’s resources&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Auto scaling&lt;/strong&gt; methods&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Task scheduling&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Federated Identity&lt;/strong&gt; to allow customers to adapt the look of the application&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;To draw interest on this project have a look at the application design of CloudNinja as shown on CodePlex…&lt;/p&gt; &lt;p&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=cloudninja&amp;amp;DownloadId=236770" width="529" height="538"&gt;&lt;/p&gt; &lt;p&gt;On CodePlex sample source code, application design, documentation and a user guide are downloadable. Visit the project site here: &lt;a href="http://cloudninja.codeplex.com"&gt;http://cloudninja.codeplex.com&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-2064626691170461739?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/2064626691170461739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/06/cloudninja-project-multi-tenancy-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2064626691170461739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2064626691170461739'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/06/cloudninja-project-multi-tenancy-and.html' title='CloudNinja project: Multi tenancy and metering sample'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-6019981729755235282</id><published>2011-06-16T21:54:00.000+02:00</published><updated>2011-06-21T21:54:44.765+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kinect for Windows'/><title type='text'>Kinect for Windows SDK beta now available!</title><content type='html'>&lt;p&gt;For all of you who awaited this moment as longing as I did: Since today the beta of the Kinect for Windows SDK is available for download. Enjoy!&lt;/p&gt; &lt;p&gt;&lt;a href="http://research.microsoft.com/kinectsdk"&gt;Download here&lt;/a&gt;…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-6019981729755235282?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/6019981729755235282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/06/kinect-for-windows-sdk-beta-now.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6019981729755235282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6019981729755235282'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/06/kinect-for-windows-sdk-beta-now.html' title='Kinect for Windows SDK beta now available!'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-2405237363438229512</id><published>2011-06-10T15:40:00.000+02:00</published><updated>2011-06-19T15:42:06.912+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Ensuring only one WorkerRole instance performs a task at a time</title><content type='html'>&lt;p&gt;As a developer in a cloud environment one has to deal with several issues. Using multiple instances that can be shut down and transferred to other devices, up- and downscaling make it impossible to identify a single instance and be sure that it’s up and running. The cloud environment only ensures that the necessary amount of instances is available all the time.&lt;/p&gt; &lt;p&gt;Thinking of a scenario where special tasks are to be performed regularly or where those tasks may only be performed by a single machine at a time, it is essential to identify a “master” that will execute the tasks. So how to deal with this?&lt;/p&gt; &lt;p&gt;This example shows how to solve this problem with a file lock approach. Each instance wakes up after a given period of time and checks if it can become the “master” instance that will perform the necessary tasks. If this instance can be the “master” it puts a lock file into the cloud storage, performs the tasks and deletes this lock file again.&lt;br&gt;If an instance finds an existing lock file when checking for becoming the “master”, it does not perform any task.&lt;/p&gt; &lt;p&gt;Here is how you can implement this behavior step by step:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Create a new Windows Azure Project in Visual Studio 2010 and add a single WorkerRole to this project.  &lt;li&gt;Inside the WorkerRole.cs, prepare to connect to the cloud storage by declaring three static members containing information about where to place the lock file and how this file is to be named:&lt;br&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; WorkerRole : RoleEntryPoint&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:     &lt;span style="color: #808080"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:     &lt;span style="color: #808080"&gt;/// Determines the container where the block file will be placed&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:     &lt;span style="color: #808080"&gt;/// in the cloud storage&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:     &lt;span style="color: #808080"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; blockFileContainer = "&lt;span style="color: #8b0000"&gt;tasksample&lt;/span&gt;";&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:     &lt;span style="color: #808080"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:     &lt;span style="color: #808080"&gt;/// Determines the name for the block file&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:     &lt;span style="color: #808080"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; blockFile = "&lt;span style="color: #8b0000"&gt;block.ext&lt;/span&gt;";&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:     &lt;span style="color: #808080"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:     &lt;span style="color: #808080"&gt;/// Represents the full path to the block file&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:     &lt;span style="color: #808080"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; blockFilePath = blockFileContainer + "&lt;span style="color: #8b0000"&gt;/&lt;/span&gt;" + blockFile;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17:     ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18: }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;In the same file create an CloudBlobClient to access the storage.&lt;br&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; WorkerRole : RoleEntryPoint&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:     ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:     &lt;span style="color: #808080"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:     &lt;span style="color: #808080"&gt;/// Client to access the blob storage&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:     &lt;span style="color: #808080"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; CloudBlobClient blobClient = CloudStorageAccount.DevelopmentStorageAccount.CreateCloudBlobClient();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:     &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:     ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10: }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;Now we need to define for each instance in what interval it will check for becoming the “master” and performing the tasks. Since the development fabric is quite fast and all instances will startup nearly at the same time, initializing a randomizer by time won’t work here. In the real cloud it might be different.&lt;br&gt;As a workaround we’re going to initialize a randomizer depending on the ID of the instance it belongs to. The typical ID of an instance in the development fabric is for example “deployment(19).MyProject.WorkerRole.0” where the 0 determines that this instance is the first one in the deployment. So the randomizer for this instance will be initialized with 0 as a seed.&lt;br&gt;Then we choose a random value between 10 and 30 seconds.&lt;br&gt;The code looks as follows:&lt;br&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; WorkerRole : RoleEntryPoint&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:     ... &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:     &lt;span style="color: #808080"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:     &lt;span style="color: #808080"&gt;/// Numeric ID of this instance (might only work in development fabric)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:     &lt;span style="color: #808080"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; instanceID = &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;.Parse(RoleEnvironment.CurrentRoleInstance.Id.Substring(RoleEnvironment.CurrentRoleInstance.Id.LastIndexOf("&lt;span style="color: #8b0000"&gt;.&lt;/span&gt;") + 1));&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:     &lt;span style="color: #808080"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:     &lt;span style="color: #808080"&gt;/// Milliseconds this instance needs to wait until trying to perform task&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:     &lt;span style="color: #808080"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:     &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; millisecondsToWait = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Random(instanceID).Next(10000, 30000);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:     ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15: }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;Visual Studio prepares the WorkerRole.cs file so the the method “OnStart”&amp;nbsp; already is overwritten in the template. In this method we need to make sure that the container where we want to store the lock file exists.&lt;br&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; WorkerRole : RoleEntryPoint&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:     ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; OnStart()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:     {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:         ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:         &lt;span style="color: #008000"&gt;// make sure that the file lock container exists!&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:         blobClient.GetContainerReference(blockFileContainer).CreateIfNotExist();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;.OnStart();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:     }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:     &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:     ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16:  }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;The “Run” method is also already implemented. Here we need to execute our logic: At first the instance goes to sleep for the determined amount of time. After waking up, it will check if it can perform the tasks. If yes it will block other instances, perform the tasks and then delete the lock again.&lt;br&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; WorkerRole : RoleEntryPoint&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: {   &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:     ... &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Run()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:     {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:         &lt;span style="color: #008000"&gt;// This is a sample worker implementation. Replace with your logic.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:         Trace.WriteLine("&lt;span style="color: #8b0000"&gt;ProcessWorker entry point called&lt;/span&gt;", "&lt;span style="color: #8b0000"&gt;Information&lt;/span&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:         &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:         {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:             &lt;span style="color: #008000"&gt;// wait&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:             Trace.WriteLine("&lt;span style="color: #8b0000"&gt;Waiting for &lt;/span&gt;" + millisecondsToWait + "&lt;span style="color: #8b0000"&gt;ms&lt;/span&gt;", "&lt;span style="color: #8b0000"&gt;Information&lt;/span&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:             Thread.Sleep(millisecondsToWait);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:             &lt;span style="color: #008000"&gt;// check if this instance should perform the task&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16:             &lt;span style="color: #008000"&gt;// by trying to get a file lease in the cloud storage&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17:             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (CanPerformTask())&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18:             {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 19:                 &lt;span style="color: #008000"&gt;// block other instances from performing the task&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 20:                 BlockOtherInstances();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 21: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 22:                 &lt;span style="color: #008000"&gt;// perform the task&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 23:                 PerformTask();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 24: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 25:                 &lt;span style="color: #008000"&gt;// release block to allow other instances to perfrom the task&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 26:                 ReleaseBlock();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 27:             }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 28:             &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 29:             {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 30:                 &lt;span style="color: #008000"&gt;// we are not allowed to perform this task&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 31:                 Trace.WriteLine("&lt;span style="color: #8b0000"&gt;May not perform task!&lt;/span&gt;", "&lt;span style="color: #8b0000"&gt;Information&lt;/span&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 32:             }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 33:         }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 34:     }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 35:     ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 36: }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;The function “CanPerformTask” checks if the given lock file exists in the blob storage by trying to fetch its attributes. If the attributes can be retrieved this file exists, otherwise an exception will be thrown.&lt;br&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #808080"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: &lt;span style="color: #808080"&gt;/// This function determines if this instance can perform the task&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: &lt;span style="color: #808080"&gt;/// by checking if any other instance is &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4: &lt;span style="color: #808080"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: &lt;span style="color: #808080"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6: &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; CanPerformTask()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:     Trace.WriteLine("&lt;span style="color: #8b0000"&gt;Checking...&lt;/span&gt;", "&lt;span style="color: #8b0000"&gt;Information&lt;/span&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:     &lt;span style="color: #008000"&gt;// check if the locking file exists&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:     &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:     {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:         &lt;span style="color: #008000"&gt;// try to get the attributes from the lock file&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:         &lt;span style="color: #008000"&gt;// to check if the file exists&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:         blobClient.GetPageBlobReference(blockFilePath).FetchAttributes();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:     }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16:     &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17:     {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18:         &lt;span style="color: #008000"&gt;// the lock file does not exist -&amp;gt; this instance may perform the task&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 19:         &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 20:     }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 21: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 22:     &lt;span style="color: #008000"&gt;// the blob exists -&amp;gt; this instance may not perform the task atm&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 23:     &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 24: }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;In the method “BlockOtherInstances” we create new PageBlob with the size of 0 bytes and store in a metadata attribute which instance created this blob. That way we make sure that only the same instance that created a lock file can delete it again.&lt;br&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #808080"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: &lt;span style="color: #808080"&gt;/// This method blocks other instances from performing the task&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: &lt;span style="color: #808080"&gt;/// by creating the file lock.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4: &lt;span style="color: #808080"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; BlockOtherInstances()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:     Trace.WriteLine("&lt;span style="color: #8b0000"&gt;Blocking other instances&lt;/span&gt;", "&lt;span style="color: #8b0000"&gt;Information&lt;/span&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:     &lt;span style="color: #008000"&gt;// create a new blob at the lock file url with size 0&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:     &lt;span style="color: #008000"&gt;// and note in the properties that this instance created the lock file&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:     var block = blobClient.GetPageBlobReference(blockFilePath);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:     block.Create(0, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; BlobRequestOptions() { BlobListingDetails = BlobListingDetails.All });&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:     block.Metadata["&lt;span style="color: #8b0000"&gt;CreatingInstance&lt;/span&gt;"] = RoleEnvironment.CurrentRoleInstance.Id;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:     block.SetMetadata();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15: }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;When releasing the lock again in the “ReleaseBlock” method, we check if the instance that intends to delete the lock is the same that created this lock. If the instances match, we delete the page blob again.&lt;br&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #808080"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: &lt;span style="color: #808080"&gt;/// This method releases the lock file so that other instances&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: &lt;span style="color: #808080"&gt;/// can perform the task.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4: &lt;span style="color: #808080"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ReleaseBlock()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:     &lt;span style="color: #008000"&gt;// get the block file and its attributes&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:     var block = blobClient.GetPageBlobReference(blockFilePath);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:     block.FetchAttributes();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:     &lt;span style="color: #008000"&gt;// check if this instance created the block&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:     &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (block.Metadata["&lt;span style="color: #8b0000"&gt;CreatingInstance&lt;/span&gt;"] == RoleEnvironment.CurrentRoleInstance.Id)&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:     {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:         Trace.WriteLine("&lt;span style="color: #8b0000"&gt;Deleting block file&lt;/span&gt;", "&lt;span style="color: #8b0000"&gt;Information&lt;/span&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:         &lt;span style="color: #008000"&gt;// this instance created the block &amp;gt; delete it&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16:         block.Delete();&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17:     }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18: }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;li&gt;Last but not least: performing a task in this example means writing a message to the trace and waiting for 5 seconds.&lt;br&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 500px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: /// &amp;lt;summary&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: /// This method represents the task that may only be performed by a &lt;span style="color: #0000ff"&gt;single&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: /// instance at a time.&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4: /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; void PerformTask()&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:     // &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; demonstration purpose &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; a task&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:     // we only write an information &lt;span style="color: #0000ff"&gt;to&lt;/span&gt; the trace.&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:     Trace.WriteLine(&lt;span style="color: #0000ff"&gt;String&lt;/span&gt;.Format("&lt;span style="color: #8b0000"&gt;Performing the task at {0}&lt;/span&gt;", DateTime.Now.ToString()), "&lt;span style="color: #8b0000"&gt;Information&lt;/span&gt;");&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:     Thread.Sleep(5000);&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11: }&lt;/pre&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;Now feel free to set up as many instances as you wish and see how this example works. Here is a screenshot running two instances. The first one has an interval of 24,5 seconds and the second one waits 14,9 seconds before trying to perform the task. Both instances perform the tasks until the first one finds an existing file lock from the other instance, which is already performing the task at 13:27:22. So it goes to sleep again…&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/-R6eSBWUpL2s/Tf38qpJQliI/AAAAAAAAAIY/GvfOgdZSQJ4/s1600-h/blocking%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="blocking" border="0" alt="blocking" src="http://lh4.ggpht.com/-aCnT84sjaF8/Tf38rdtht5I/AAAAAAAAAIc/GPlC6Q2L66s/blocking_thumb%25255B1%25255D.png?imgmax=800" width="362" height="447"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;You can download the source code of this example project here: &lt;a href="http://nico.zehage.net/Entwicklung/Downloads/PerformingSingleTask.zip"&gt;PerformingSingleTask.zip&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-2405237363438229512?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/2405237363438229512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/06/ensuring-only-one-workerrole-instance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2405237363438229512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2405237363438229512'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/06/ensuring-only-one-workerrole-instance.html' title='Ensuring only one WorkerRole instance performs a task at a time'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-aCnT84sjaF8/Tf38rdtht5I/AAAAAAAAAIc/GPlC6Q2L66s/s72-c/blocking_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-1004269674722719998</id><published>2011-06-04T08:20:00.000+02:00</published><updated>2011-06-18T17:21:27.757+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Multiple Sites in a single CloudProject: Using Host Headers</title><content type='html'>&lt;p&gt;The last and – for me – most interesting way to host multiple websites in a single Windows Azure deployment is to use Host Headers. This allows you to map for example &lt;a href="http://www.mydomain.tld"&gt;www.mydomain.tld&lt;/a&gt; and &lt;a href="http://www.anotherdomain.tld"&gt;www.anotherdomain.tld&lt;/a&gt; to the same cloud deployment (&lt;a href="http://myproject.cloudapp.net"&gt;http://myproject.cloudapp.net&lt;/a&gt;) via DNS and host their content in the cloud.&lt;/p&gt; &lt;p&gt;Create a new Cloud Project in Visual Studio and add a ASP.NET WebRole to this project.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-_qUeIG7ng4w/TfzCbsieJiI/AAAAAAAAAII/XjvmzDgzAMY/s1600-h/CreateNewCloudProject%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="CreateNewCloudProject" border="0" alt="CreateNewCloudProject" src="http://lh6.ggpht.com/-e2CEk659LrY/TfzCcc2w6-I/AAAAAAAAAIM/7OGEX3tcuP0/CreateNewCloudProject_thumb%25255B1%25255D.png?imgmax=800" width="350" height="227"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Then, add a new ASP.NET Application to the same solution. Your solution explorer should then look like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-IK_3r9kM0E0/TfzCc4xW3fI/AAAAAAAAAIQ/uAZP68ZWzvY/s1600-h/HostProject.%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="HostProject." border="0" alt="HostProject." src="http://lh3.ggpht.com/-a91Gz3ckxUY/TfzCduEQxhI/AAAAAAAAAIU/ZHKc0Oluy5w/HostProject._thumb%25255B1%25255D.png?imgmax=800" width="228" height="309"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The key is again the ServiceDefinition.csfg file: But this time we need to add another &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Site&lt;/font&gt;&amp;gt;&lt;/font&gt; element to the default &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;WebRole&lt;/font&gt;&amp;gt;&lt;/font&gt;’s &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Sites&lt;/font&gt;&amp;gt;&lt;/font&gt; tag. The new &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Site&lt;/font&gt;&amp;gt;&lt;/font&gt; needs an arbitrary name in its attribute &lt;font color="#ff0000" face="Consolas"&gt;name&lt;/font&gt;.&lt;br&gt;The &lt;font color="#ff0000" face="Consolas"&gt;physicalDirectory&lt;/font&gt; attribute needs to contain the path to where Visual Studio can find the files of this website to publish it to the cloud. This path can either be set as an absolute path or as an relative one. A relative path must be set relative to the ServiceDefinition.csdef file.&lt;/p&gt; &lt;p&gt;This new &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Site&lt;/font&gt;&amp;gt;&lt;/font&gt; needs to be bound to the proper host header and the default &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Site&lt;/font&gt;&amp;gt;&lt;/font&gt; also needs a host header to be set. So copy the &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Binding&lt;/font&gt;&amp;gt;&lt;/font&gt; from the default &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Site&lt;/font&gt;&amp;gt;&lt;/font&gt; and paste it inside the new &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Site&lt;/font&gt;&amp;gt;&lt;/font&gt; element. Make sure that those bindings have different host headers. Otherwise you’ll get a compilation error.&lt;/p&gt; &lt;p&gt;After all the ServiceDefinition-file looks like this:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ServiceDefinition&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"MultiSitesByHostHeader"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"WebRole1"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Sites&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Web"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:           &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Binding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;endpointName&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;hostHeader&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"www.mydomain.tld"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffff00; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"TheOtherApplication"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;physicalDirectory&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"../WebApplication1"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffff00; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffff00; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:           &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Binding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;endpointName&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;hostHeader&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"www.anotherdomain.tld"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffff00; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffff00; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Sites&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17:     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Endpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18:       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;InputEndpoint&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;protocol&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;port&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"80"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 19:     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Endpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 20:     ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 21:   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 22: &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ServiceDefinition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;But before you can run this Cloud Project and test it, you need to map the hostheaders to the cloud project in your DNS. For testing locally in the Azure computing simulator, you need to add the following lines to your HOSTS-file:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;127.0.0.1     www.mydomain.tld&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;127.0.0.1     www.anotherdomain.tld&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Open a notepad with elevated permissions (in administrator mode) and open in C:\Windows\System32\drivers\etc the HOSTS-file. Insert the two lines and save the file again.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now run the cloud project. Don’t panic when the default URL &lt;a href="http://127.0.0.1:81"&gt;http://127.0.0.1:81&lt;/a&gt; returns a 404. Browse to &lt;a href="http://www.mydomain.tld:81/"&gt;http://www.mydomain.tld:81/&lt;/a&gt; and find the first application there. On &lt;a href="http://www.anotherdomain.tld:81/"&gt;http://www.anotherdomain.tld:81/&lt;/a&gt; there is the other one.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Download the sample code here:&amp;nbsp; &lt;a href="http://nico.zehage.net/Entwicklung/Downloads/MultiSitesByHostHeader.zip"&gt;MultiSitesByHostHeader.zip&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-1004269674722719998?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/1004269674722719998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/06/multiple-sites-in-single-cloudproject.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/1004269674722719998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/1004269674722719998'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/06/multiple-sites-in-single-cloudproject.html' title='Multiple Sites in a single CloudProject: Using Host Headers'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-e2CEk659LrY/TfzCcc2w6-I/AAAAAAAAAIM/7OGEX3tcuP0/s72-c/CreateNewCloudProject_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-7102181343409975447</id><published>2011-05-28T16:47:00.000+02:00</published><updated>2011-06-18T16:48:40.027+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Multiple Sites in a single Cloud Project: Using Virtual Directories</title><content type='html'>&lt;p&gt;The third way to host multiple websites in a single Windows Azure deployment is similar to the one using virtual applications. While virtual applications allow to run ASP.NET web applications virtual directories aim at less dynamic content.&lt;/p&gt; &lt;p&gt;So you could use a virtual directory to store resources like icons, pictures or styles that are shared by multiple websites. Instead of copying those resources to each website, they access them via virtual directories.&lt;/p&gt; &lt;p&gt;According to virtual applications, in this example the main website should be accessible at&lt;/p&gt; &lt;p&gt;&lt;a href="http://myproject.cloudapp.net"&gt;&lt;font style="background-color: #cccccc"&gt;http://myproject.cloudapp.net&lt;/font&gt;&lt;/a&gt;&lt;font style="background-color: #cccccc"&gt; and the resources at&lt;br&gt;&lt;/font&gt;&lt;a href="http://myproject.cloudapp.net/virtualdirectory"&gt;&lt;font style="background-color: #cccccc"&gt;http://myproject.cloudapp.net/virtualdirectory&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Create a new Windows Azure Cloud Project and add a ASP.NET WebRole to this project. After that, create a new WebSite (not a web application) in the solution folder or add an existing one to the solution. The solution explorer should look like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-nCtcjyueiYY/Tfy6xMkKpcI/AAAAAAAAAIA/pZYIc09uExU/s1600-h/image%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-vPqvt9Y1lKo/Tfy6xuSKpHI/AAAAAAAAAIE/hy32gMrXNxM/image_thumb%25255B1%25255D.png?imgmax=800" width="234" height="307"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;For this example, I created a new WebSite named “VirtualDirectory” in the solution folder and added a picture “circle.png” in a folder named “Images”.&lt;/p&gt; &lt;p&gt;Now open the ServiceDefinition.csdef file and add to the XML element &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;WebRole&lt;/font&gt;&amp;gt;&lt;/font&gt; inside its default &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Site&lt;/font&gt;&amp;gt;&lt;/font&gt; tag a &lt;font color="#c0504d" face="Consolas"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;VirtualDirectory&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt; element. This element has two attributes &lt;font color="#ff0000" face="Consolas"&gt;name&lt;/font&gt; and &lt;font color="#ff0000" face="Consolas"&gt;physicalDirectory&lt;/font&gt;.&lt;br&gt;The &lt;font color="#ff0000" face="Consolas"&gt;name&lt;/font&gt; attribute contains the string that needs to be appended to the root URL of our website to access the second website within the WebRole. So if we want the resources to be accessible at &lt;a href="http://myproject.cloudapp.net/virtualdirectory"&gt;http://myproject.cloudapp.net/virtualdirectory&lt;/a&gt;, we need to set the name attribute to “virtualdirectory”.&lt;br&gt;The &lt;font color="#ff0000" face="Consolas"&gt;physicalDirectory &lt;/font&gt;attribute needs to contain the path to where Visual Studio can find the files of this website to publish it to the cloud. This path can either be set as an absolute path or as an relative one. A relative path must be set relative to the ServiceDefinition.csdef file.&lt;/p&gt; &lt;p&gt;After adding the &lt;font color="#c0504d" face="Consolas"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;VirtualDirectory&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt; tag the ServiceDefinition-file looks like this:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ServiceDefinition&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"MultiSitesByVirtualDirectory"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"..."&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"WebRole1"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Sites&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Web"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffff00; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;VirtualDirectory&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"virtualdirecotry"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;physicalDirectory&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"../VirtualDirectory"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:           &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Binding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;endpointName&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Sites&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Endpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;InputEndpoint&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;protocol&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;port&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"80"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Endpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:     ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16: &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ServiceDefinition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;You can download the source of this example here: &lt;a href="http://nico.zehage.net/Entwicklung/Downloads/MultiSitesByVirtualDirectory.zip"&gt;MultiSitesByVirtualDirectory.zip&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-7102181343409975447?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/7102181343409975447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/05/multiple-sites-in-single-cloud-project_28.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7102181343409975447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7102181343409975447'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/05/multiple-sites-in-single-cloud-project_28.html' title='Multiple Sites in a single Cloud Project: Using Virtual Directories'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-vPqvt9Y1lKo/Tfy6xuSKpHI/AAAAAAAAAIE/hy32gMrXNxM/s72-c/image_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-2032048130971112155</id><published>2011-05-21T22:14:00.000+02:00</published><updated>2011-06-18T15:16:26.991+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Multiple Sites in a single Cloud Project: Using Virtual Applications</title><content type='html'>&lt;p&gt;Another very simple way to host multiple websites in a single Windows Azure deployment is to integrate a website into an existing WebRole as a virtual application. You might want to chose this way when you need to quickly integrate an existing website to your cloud deployment.&lt;/p&gt; &lt;p&gt;Virtual applications have the same “look and feel” as known from on premise IIS applications. In this example we are going to publish a WebRole at&lt;/p&gt; &lt;p&gt;&lt;a href="http://myproject.cloudapp.net"&gt;&lt;font style="background-color: #cccccc"&gt;http://myproject.cloudapp.net&lt;/font&gt;&lt;/a&gt;&lt;font style="background-color: #cccccc"&gt; and integrate another website at&lt;br&gt;&lt;/font&gt;&lt;a href="http://myproject.cloudapp.net/application"&gt;&lt;font style="background-color: #cccccc"&gt;http://myproject.cloudapp.net/application&lt;/font&gt;&lt;/a&gt;&lt;font style="background-color: #cccccc"&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;At first, create a new Windows Azure Cloud Project in Visual Studio and add a ASP.NET WebRole to this project. Your solution explorer should then look like this:&lt;a href="http://lh5.ggpht.com/-rtSs0gxVjas/TfylI0sZeVI/AAAAAAAAAHw/XuXYADadh1o/s1600-h/VirtualApplicationSolution%25255B2%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="VirtualApplicationSolution" border="0" alt="VirtualApplicationSolution" src="http://lh4.ggpht.com/-F5pyDxAufOo/TfylJeoirQI/AAAAAAAAAH0/fuYRtIl6lRk/VirtualApplicationSolution_thumb.png?imgmax=800" width="225" height="244"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;After that you either chose to add a new Web Project to that solution or add an existing one. In the example I created a new ASP.NET Web application inside the Solution folder. This results in the solution folder looking like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-4vuDGlWvRMw/TfylJznJ3QI/AAAAAAAAAH4/6rMqiYzu3p8/s1600-h/VirtualApplicationSolution2%25255B4%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="VirtualApplicationSolution2" border="0" alt="VirtualApplicationSolution2" src="http://lh4.ggpht.com/-_SmsSbLiJHc/TfylKaaSa_I/AAAAAAAAAH8/dXM7XL6KuQw/VirtualApplicationSolution2_thumb%25255B2%25255D.png?imgmax=800" width="229" height="328"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This time connecting the second website to an endpoint cannot be done in the WebRole’s properties page but needs to be set manually in the ServiceDefinition.csdef file.&lt;/p&gt; &lt;p&gt;By default inside the service definition there is a single &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;WebRole&lt;/font&gt;&amp;gt;&lt;/font&gt; element containing a single &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Site&lt;/font&gt;&amp;gt;&lt;/font&gt; named &lt;font color="#0000ff" face="Consolas"&gt;“Web”&lt;/font&gt;. Within this &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Site&lt;/font&gt;&amp;gt;&lt;/font&gt; tag we can add a &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;VirtualApplication&lt;/font&gt;&amp;gt;&lt;/font&gt; element. This element has two attributes that need to be set: &lt;font color="#ff0000" face="Consolas"&gt;name&lt;/font&gt; and &lt;font color="#ff0000" face="Consolas"&gt;physicalDirectory&lt;/font&gt;.&lt;br&gt;The &lt;font color="#ff0000" face="Consolas"&gt;name&lt;/font&gt; attribute contains the string that needs to be appended to the root URL of our website to access the second website within the WebRole. So if we want our second website to be accessible at &lt;a href="http://myproject.cloudapp.net/application"&gt;http://myproject.cloudapp.net/application&lt;/a&gt;, we need to set the &lt;font color="#ff0000" face="Consolas"&gt;name&lt;/font&gt; attribute to&lt;font color="#0000ff" face="Consolas"&gt; “application”&lt;/font&gt;.&lt;br&gt;The &lt;font color="#ff0000" face="Consolas"&gt;physicalDirectory&lt;/font&gt; attribute needs to contain the path to where Visual Studio can find the files of this website to publish it to the cloud. This path can either be set as an absolute path or as an relative one. A relative path must be set relative to the ServiceDefinition.csdef file.&lt;/p&gt; &lt;p&gt;After adding the &lt;font color="#0000ff" face="Consolas"&gt;&amp;lt;&lt;font color="#c0504d"&gt;VirtualApplication&lt;/font&gt;&amp;gt;&lt;/font&gt; tag the ServiceDefinition-file looks like this.&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ServiceDefinition&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"MultiSitesByVirtualApplication"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"..."&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"WebRole1"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Sites&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Web"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #ffff00; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;VirtualApplication&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"application"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;physicalDirectory&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"../WebApplication1"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:         &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:           &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Binding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;endpointName&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:         &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:       &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Site&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Sites&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Endpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;InputEndpoint&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;protocol&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;port&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"80"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Endpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:     ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16: &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ServiceDefinition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;You can download the source of this example project here: &lt;a href="http://nico.zehage.net/Entwicklung/Downloads/MultiSitesByVirtualApplication.zip"&gt;MultiSitesByVirtualApplication.zip&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-2032048130971112155?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/2032048130971112155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/05/multiple-sites-in-single-cloud-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2032048130971112155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2032048130971112155'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/05/multiple-sites-in-single-cloud-project.html' title='Multiple Sites in a single Cloud Project: Using Virtual Applications'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-F5pyDxAufOo/TfylJeoirQI/AAAAAAAAAH0/fuYRtIl6lRk/s72-c/VirtualApplicationSolution_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-7285066197695421237</id><published>2011-05-14T14:24:00.000+02:00</published><updated>2011-06-18T14:25:45.444+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Multiple Sites in a single Cloud Project: Using Ports</title><content type='html'>&lt;p&gt;One of the most frequently asked questions I get is: “How can I manage to run multiple websites in a single Windows Azure deployment?” And the answer is that there are multiple ways to achieve this goal. So this blog post and the next upcoming three posts will show four ways to host multiple websites.&lt;/p&gt; &lt;p&gt;The easiest way is to create two WebRoles and to make them accessible via different endpoints using different ports. The result in the browser address bar would look like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://myproject.cloudapp.net"&gt;&lt;font style="background-color: #cccccc"&gt;http://myproject.cloudapp.net&lt;/font&gt;&lt;/a&gt;&lt;font style="background-color: #cccccc"&gt; for the first WebRole&lt;br&gt;&lt;/font&gt;&lt;a href="http://myproject.cloudapp.net:8080"&gt;&lt;font style="background-color: #cccccc"&gt;http://myproject.cloudapp.net:8080&lt;/font&gt;&lt;/a&gt;&lt;font style="background-color: #cccccc"&gt; for the second WebRole&lt;/font&gt;&lt;/p&gt; &lt;p&gt;It’s important to know that you can access a WebRole by more than one endpoints but you cannot access multiple WebRoles by the same endpoint!&lt;/p&gt; &lt;p&gt;The step by step walkthrough is simple: When creating a new Windows Azure Cloud Project, add two WebRoles to the new project.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-7S7cMXuyMls/TfyY-q85pDI/AAAAAAAAAHQ/7u3kBYC0Pc8/s1600-h/CreateNewCloudProject4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="CreateNewCloudProject" border="0" alt="CreateNewCloudProject" src="http://lh4.ggpht.com/-wR_mbtmyinM/TfyY_Hwrf0I/AAAAAAAAAHU/Be8h6OknOSs/CreateNewCloudProject_thumb2.png?imgmax=800" width="417" height="276"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Your solution explorer should look like this after creating the cloud solution:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-BSPXtt-mbM0/TfyY_kXel8I/AAAAAAAAAHY/LrE5KDOINR4/s1600-h/image3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-tlGGUeTn71M/TfyZAPHfBRI/AAAAAAAAAHc/mkhfHNawHVo/image_thumb1.png?imgmax=800" width="280" height="226"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;And in this case Visual Studio already did all the work for you. When looking at the WebRoles’ properties pages you can see in the “Endpoints” tab that WebRole1 has an Endpoint mapped to port 80 and WebRole2 has an Endpoint mapped to port 8080.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-bmVeiBIh-1M/TfyZAj43MNI/AAAAAAAAAHg/rbFY6uc3o2U/s1600-h/PortWebRole13.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="PortWebRole1" border="0" alt="PortWebRole1" src="http://lh3.ggpht.com/-SEzIUDbPXtc/TfyZAzLTGrI/AAAAAAAAAHk/6N1xkcpR1M8/PortWebRole1_thumb1.png?imgmax=800" width="345" height="138"&gt;&lt;/a&gt; for WebRole1&lt;a href="http://lh6.ggpht.com/-KqujmMDzpys/TfyZBZB4ihI/AAAAAAAAAHo/w4DdVvWaXyk/s1600-h/PortWebRole23.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="PortWebRole2" border="0" alt="PortWebRole2" src="http://lh4.ggpht.com/-_DYAP1u7T9c/TfyZB3-gWKI/AAAAAAAAAHs/wUrDRWIL19k/PortWebRole2_thumb1.png?imgmax=800" width="348" height="140"&gt;&lt;/a&gt; for WebRole2&lt;/p&gt; &lt;p&gt;Of course, you may change the Public Port settings to whatever port number serves you best.&lt;/p&gt; &lt;p&gt;You might want to have a look at the CloudProject’s ServiceDefinition-file. This file becomes important in the other ways solving the multiple sites issue.&lt;br&gt;Inside the definition file there is a &lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#c0504d"&gt;WebRole&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt; block for each web role you created in the project. This block contains in the &lt;font color="#0000ff" face="Courier New"&gt;&amp;lt;&lt;font color="#c0504d"&gt;Endpoints&lt;/font&gt;&amp;gt;&lt;/font&gt; child the information about how the role can be accessed. You can find your port settings there in the XML attribute &lt;font color="#ff0000" face="Courier New"&gt;port&lt;/font&gt;.&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 650px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ServiceDefinition&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"MultiSitesByPort"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"..."&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2:   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"WebRole1"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3:    ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4:     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Endpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5:       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;InputEndpoint&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;protocol&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;port&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"80"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6:     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Endpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7:     ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"WebRole2"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:    ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Endpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;InputEndpoint&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Endpoint1"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;protocol&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;port&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"8080"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;Endpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:    ...&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16:   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17: &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ServiceDefinition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-7285066197695421237?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/7285066197695421237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/06/multiple-sites-in-single-cloud-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7285066197695421237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7285066197695421237'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/06/multiple-sites-in-single-cloud-project.html' title='Multiple Sites in a single Cloud Project: Using Ports'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-wR_mbtmyinM/TfyY_Hwrf0I/AAAAAAAAAHU/Be8h6OknOSs/s72-c/CreateNewCloudProject_thumb2.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-6613126685628918190</id><published>2011-04-12T16:26:00.001+02:00</published><updated>2011-04-12T16:39:03.762+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>How to efficiently read messages from a CloudQueue</title><content type='html'>&lt;p&gt;While staying at the MVP summit in Redmond I could exchange ideas of code patterns in Windows Azure. One new pattern to me was to save money by reducing calls to a CloudQueue.&lt;/p&gt; &lt;p&gt;On first thought one would try to check for new messages on a queue every few seconds. But if there are many messages in the queue, waiting for several seconds makes you loosing expensive computing time. On the other hand, checking for new messages instantly without waiting results in many unnecessary (and expensive) calls to the Storage.&lt;/p&gt; &lt;p&gt;So there needs to be a way in between those two extremes. And there is one:&lt;br&gt;After having read a message from the queue, you instantly check again for another new message. If there are new messages, no unnecessary calls are made and all computing time is used for processing those messages.&lt;br&gt;If there are no new messages, you wait a little and check again. If there is still nothing in the queue, you wait a little longer and check again. Still nothing? Then wait even a little longer as the last time, because it seems unlikely that a new message will show up immediately. Step by step the waiting time is increased to a given maximum. This results in less calls when there is nothing to do.&lt;/p&gt; &lt;p&gt;And here is a code example:&lt;/p&gt;&lt;pre style="border-bottom: #cecece 1px solid; border-left: #cecece 1px solid; padding-bottom: 5px; background-color: #fbfbfb; min-height: 40px; padding-left: 5px; width: 550px; padding-right: 5px; overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; padding-top: 5px"&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  1: var maxPause = 60000;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  2: var minPause = 1;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  3: var pause = minPause;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  4: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  5: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  6: &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;)  &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  7: {  &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  8:     &lt;span style="color: #008000"&gt;// read from queue&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt;  9:      Console.Write("&lt;span style="color: #8b0000"&gt;Reading from Queue... &lt;/span&gt;"); &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 10:      var msg = queue.GetMessage(); &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 11:      &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 12:      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (msg == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 13:      { &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 14:         &lt;span style="color: #008000"&gt;// no message could be read, so wait &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 15:         Console.WriteLine("&lt;span style="color: #8b0000"&gt;nothing -&amp;gt; wait &lt;/span&gt;" + pause.ToString()); &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 16:         System.Threading.Thread.Sleep(pause); &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 17: &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 18:          &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 19:         &lt;span style="color: #008000"&gt;// update waiting time &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 20:         &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (pause &amp;lt; maxPause) pause *= 2;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 21:      } &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 22:      &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 23:      { &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 24:         Console.WriteLine("&lt;span style="color: #8b0000"&gt;read.&lt;/span&gt;"); &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 25:          &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 26:         &lt;span style="color: #008000"&gt;// reset waiting time &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 27:         pause = minPause; &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 28:   &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 29:         &lt;span style="color: #008000"&gt;// proccess message &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 30:      } &lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 31: }&lt;br /&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px"&gt; 32: &lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;While writing this blog entry, I invented a class &lt;font face="Courier New"&gt;QueueSupervisor&lt;/font&gt;, that supervises a queue in the background and raises an event when a new message appears in the queue. You can download this class here: &lt;a href="http://nico.zehage.net/Entwicklung/Downloads/QueueSupervisor.zip" target="_blank"&gt;QueueSupervisor.zip&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-6613126685628918190?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/6613126685628918190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/04/how-to-efficiently-read-messages-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6613126685628918190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6613126685628918190'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/04/how-to-efficiently-read-messages-from.html' title='How to efficiently read messages from a CloudQueue'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-8162000777783590060</id><published>2011-04-09T09:59:00.000+02:00</published><updated>2011-05-06T10:00:51.840+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Azure SDK 1.4 Released</title><content type='html'>&lt;p&gt;Microsoft just released the newest version over the Windows Azure SDK and the Windows Azure Tools on their download platform. Get it &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7a1089b6-4050-4307-86c4-9dadaa5ed018" target="_blank"&gt;here!&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Looking forward to check out the newest features and maybe show some of the coolest ones here…&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-8162000777783590060?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/8162000777783590060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/04/windows-azure-sdk-14-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/8162000777783590060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/8162000777783590060'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/04/windows-azure-sdk-14-released.html' title='Windows Azure SDK 1.4 Released'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-6450080612441670935</id><published>2011-03-05T21:34:00.001+01:00</published><updated>2011-03-05T21:34:32.483+01:00</updated><title type='text'>Global MVP Summit 2011</title><content type='html'>&lt;p&gt;Yesterday at 6:30 pm I arrived back at Stuttgart airport from my very first visit in the United States and my very first Microsoft MVP summit at Microsoft campus in Redmond, Washington. &lt;/p&gt; &lt;p&gt;It was pure fun and a very exciting experience for me, and I wished to stay even longer there. I met a lot of other German MVPs – a great thing, because I haven’t seen any of them yet – and my MVP lead Katrin Letzel, to whom I only talked to at the telephone so far.&lt;/p&gt; &lt;p&gt;In the expertise group sessions I got to know many other Windows Azure MVPs and people from the Windows Azure product group. It was fascinating to meet people, who I could only see in recordings of past sessions at PDC or MIX. There were also Robert Duffner and Alejandra Jimenez who made it possible for me to attend the MVP summit! &lt;/p&gt; &lt;p&gt;Thank you again and again, that you made it possible for me to attend this year’s summit!&lt;/p&gt; &lt;p&gt;Even one of the Keynotes was held by Steve Ballmer. So i saw him the first time in reality there! Wow!&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/__06xxhd20J0/TXKeSV6FX2I/AAAAAAAAAGc/G_gjy47C_hg/s1600-h/IMG_7171%5B2%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_7171" border="0" alt="IMG_7171" src="http://lh6.ggpht.com/__06xxhd20J0/TXKeS5AkDlI/AAAAAAAAAGg/-X0uVrRoCHE/IMG_7171_thumb.jpg?imgmax=800" width="244" height="134"&gt;&lt;/a&gt; &lt;a href="http://lh3.ggpht.com/__06xxhd20J0/TXKeTW4nTZI/AAAAAAAAAGk/8ODj_gqNhvw/s1600-h/IMG_7195%5B2%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_7195" border="0" alt="IMG_7195" src="http://lh4.ggpht.com/__06xxhd20J0/TXKeTyYCZvI/AAAAAAAAAGo/jICY4H44qtQ/IMG_7195_thumb.jpg?imgmax=800" width="244" height="217"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I got lot’s of information about the future of Windows Azure, the Azure platform and many other Microsoft products. It’s great to know where things are going to and what we have to be prepared for!&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/__06xxhd20J0/TXKeUYY4eSI/AAAAAAAAAGs/HoMzAsSxpzs/s1600-h/IMG_7192%5B2%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_7192" border="0" alt="IMG_7192" src="http://lh5.ggpht.com/__06xxhd20J0/TXKeUr1YrUI/AAAAAAAAAGw/pAt_iUfLdfY/IMG_7192_thumb.jpg?imgmax=800" width="184" height="244"&gt;&lt;/a&gt;&lt;a href="http://lh4.ggpht.com/__06xxhd20J0/TXKeVNgVmyI/AAAAAAAAAG0/abKPHGW77rc/s1600-h/IMG_7159%5B2%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_7159" border="0" alt="IMG_7159" src="http://lh3.ggpht.com/__06xxhd20J0/TXKeV8DR_DI/AAAAAAAAAG4/nyuGGdPP6-s/IMG_7159_thumb.jpg?imgmax=800" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I really enjoyed my visit at Redmond and I am really looking forward to the MVP summit 2012. Hopefully I will be able to travel to Microsoft campus again. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-6450080612441670935?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/6450080612441670935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/03/global-mvp-summit-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6450080612441670935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6450080612441670935'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/03/global-mvp-summit-2011.html' title='Global MVP Summit 2011'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/__06xxhd20J0/TXKeS5AkDlI/AAAAAAAAAGg/-X0uVrRoCHE/s72-c/IMG_7171_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-6728562374617321465</id><published>2011-02-23T13:14:00.000+01:00</published><updated>2011-02-24T13:14:24.442+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Complete Azure Storage Samples</title><content type='html'>&lt;p&gt;David Pallmann created an Azure Storage Sample project on CodePlex. There are two implementations available that show how all the functionality of Azure’s storage can be used. One invoking methods by using a REST client and the other one using the .NET Storage client library.&lt;/p&gt; &lt;p&gt;Check it out here: &lt;a title="http://azurestoragesamples.codeplex.com/" href="http://azurestoragesamples.codeplex.com/"&gt;http://azurestoragesamples.codeplex.com/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-6728562374617321465?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/6728562374617321465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/02/complete-azure-storage-samples.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6728562374617321465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6728562374617321465'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/02/complete-azure-storage-samples.html' title='Complete Azure Storage Samples'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-2115229199971358693</id><published>2011-01-24T19:18:00.001+01:00</published><updated>2011-01-24T19:18:59.994+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>PageBlobs with arbitrary size</title><content type='html'>&lt;p&gt;PageBlobs have many useful advantages. For example: suspend able uploads can be realized with them or one might receive parts of the blob without having to download the whole blob.&lt;br&gt;But PageBlobs have some restrictions like that their contents have to be of a size that is a multiple of 512 bytes. In this sample, I would like to show you how to use PageBlobs for files of any file size.&lt;/p&gt; &lt;p&gt;At first we need a function that converts a file size up to the next multiple of 512 bytes.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;long&lt;/span&gt; GetPageBlobSize(&lt;span class="kwrd"&gt;long&lt;/span&gt; size)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;// determine how many pages are needed&lt;/span&gt;&lt;br /&gt;  var numberOfPages = size / 512;&lt;br /&gt;  &lt;span class="rem"&gt;// if there are any bytes left, we need one more page&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;if&lt;/span&gt; (size % 512 != 0)&lt;br /&gt;    numberOfPages += 1;&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;return&lt;/span&gt; numberOfPages * 512;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;br /&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&lt;font color="#222222" face="Arial"&gt;Then we have to create a method that creates a PageBlob in the cloud, stores the actual file size in the metadata of the PageBlob, fills up the file with zero-bytes to create a file that has a size as a multiple of 512 and uploads the data.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;// client initialization set aside&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; CloudStorageAccount _storageAccount;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; CloudBlobClient _blobClient;&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; UploadFile(Stream filestream, &lt;span class="kwrd"&gt;string&lt;/span&gt; blobUrl)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;// create the blob with proper blob size&lt;/span&gt;&lt;br /&gt;  var blob = _blobClient.GetPageBlobReference(blobUrl);&lt;br /&gt;  var blobPageSize = GetPageBlobSize(filestream.Length);&lt;br /&gt;  blob.Create(blobPageSize);&lt;br /&gt;&lt;br /&gt;  &lt;span class="rem"&gt;// note in the blob what the real file size is&lt;/span&gt;&lt;br /&gt;  var realFileSize = filestream.Length;&lt;br /&gt;  blob.Metadata.Add(“contentlength”, &lt;br /&gt;                    realFileSize.ToString());&lt;br /&gt;  blob.SetMetadata();&lt;br /&gt;&lt;br /&gt;  &lt;span class="rem"&gt;// store how many bytes need to be “filled up”&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;// to complete the last page&lt;/span&gt;&lt;br /&gt;  var bytesToFillUp = blobPageSize – realFileSize;&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;long&lt;/span&gt; offset = 0;&lt;br /&gt;  var buffer = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;[512];&lt;br /&gt;  &lt;span class="kwrd"&gt;while&lt;/span&gt; (fileStream.Read(buffer, 0, buffer.Length) == 512)&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="rem"&gt;// a “full” page has been read&lt;/span&gt;&lt;br /&gt;    var pageContent = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream(buffer);&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;// write this page to the blob&lt;/span&gt;&lt;br /&gt;    blob.WritePages(pageContent, offset);&lt;br /&gt;    pageContent.Close();&lt;br /&gt;    pageContent.Dispose();&lt;br /&gt;    &lt;br /&gt;    offset += buffer.Length;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span class="rem"&gt;// now there is either no page to read (file was 512 aligned)&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;// or the rest of the file has been loaded&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;if&lt;/span&gt; (bytesToFillUp &amp;gt; 0)&lt;br /&gt;  {&lt;br /&gt;    &lt;span class="rem"&gt;// there is still data left&lt;/span&gt;&lt;br /&gt;    var restContent = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream(buffer);&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;// ! there are bytes left from the last “full” page read&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;// ! in the buffer. these should be replaced by zeroes&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;// ! that will be removed on reading the blob&lt;/span&gt;&lt;br /&gt;    restContent.Seek(bytesToFillUp, SeekOrigin.End);&lt;br /&gt;    &lt;span class="kwrd"&gt;while&lt;/span&gt; (restContent.Position != content.Capacity)&lt;br /&gt;      restContent.WriteByte(0);&lt;br /&gt;    &lt;br /&gt;    &lt;span class="rem"&gt;// write the rest to the blob&lt;/span&gt;&lt;br /&gt;    blob.WritePages(restContent, offset);&lt;br /&gt;    restContent.Close();&lt;br /&gt;    restContent.Dispose();&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And finally a method that downloads the file, removes the zero-bytes again and returns the proper content of the file.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; Stream DownloadFile(&lt;span class="kwrd"&gt;string&lt;/span&gt; blobUrl)&lt;br /&gt;{&lt;br /&gt;  &lt;span class="rem"&gt;// get the blob reference and its metadata from the storage&lt;/span&gt;&lt;br /&gt;  var blob = _blobClient.GetPageBlobReference(blobUrl);&lt;br /&gt;  blob.FetchAttributes();&lt;br /&gt;&lt;br /&gt;  &lt;span class="rem"&gt;// get proper file size&lt;/span&gt;&lt;br /&gt;  var realFileSize = &lt;span class="kwrd"&gt;long&lt;/span&gt;.Parse(blob.Metadata[“contentlength”]);&lt;br /&gt;  &lt;br /&gt;  var blobStream = blob.OpenRead();&lt;br /&gt;  var blobPageSize = blobStream.Length;&lt;br /&gt;&lt;br /&gt;  var pages = blobPageSize / 512;&lt;br /&gt;&lt;br /&gt;  &lt;span class="rem"&gt;// create a memory stream to be returned&lt;/span&gt;&lt;br /&gt;  var returnStream = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream((&lt;span class="kwrd"&gt;int&lt;/span&gt;)realFileSize);&lt;br /&gt;&lt;br /&gt;  &lt;span class="rem"&gt;// read all pages but the last one&lt;/span&gt;&lt;br /&gt;  var buffer = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;[512];&lt;br /&gt;  &lt;span class="kwrd"&gt;while&lt;/span&gt; (pages &amp;gt; 1)&lt;br /&gt;  {&lt;br /&gt;    bs.Read(buffer, 0, buffer.Length);&lt;br /&gt;    returnStream.Write(buffer, 0, buffer.Length);&lt;br /&gt;&lt;br /&gt;    pages--;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  &lt;span class="rem"&gt;// now read the last page and write only necessary bytes&lt;/span&gt;&lt;br /&gt;  bs.Read(buffer, 0, buffer.Length);&lt;br /&gt;  returnStream.Write(buffer, 0, (&lt;span class="kwrd"&gt;int&lt;/span&gt;)(512 – bytesToIgnore));&lt;br /&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;return&lt;/span&gt; returnStream;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;font face="Courier New"&gt;&lt;br&gt;&amp;nbsp; &lt;/font&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-2115229199971358693?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/2115229199971358693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2011/01/pageblobs-with-arbitrary-size.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2115229199971358693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2115229199971358693'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2011/01/pageblobs-with-arbitrary-size.html' title='PageBlobs with arbitrary size'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-4561752058155230074</id><published>2010-12-19T14:26:00.001+01:00</published><updated>2010-12-19T14:26:48.148+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>FTP-Server on Windows Azure from scratch</title><content type='html'>&lt;p&gt;Using the new Windows Azure 1.3 SDK and the RDP support, you can create your own FTP server in the cloud within less than 30 minutes! Here is a little guide how to do so:&lt;/p&gt; &lt;p&gt;The three major steps are to open the necessary FTP ports to the virtual server, enable RDP on the virtual server and configure the FTP server role on the virtual server.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Download and install the &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=7a1089b6-4050-4307-86c4-9dadaa5ed018" target="_blank"&gt;Windows Azure 1.3 SDK&lt;/a&gt;  &lt;li&gt;Create a new Windows Azure Project in Visual Studio 2010 and add a Role to that project. In fact it doesn’t matter what kind of role you add to the project. I started by adding a ASP.NET Web Role.  &lt;li&gt;In the Solution Explorer, right click on the WebRole and choose Properties &lt;a href="http://lh4.ggpht.com/__06xxhd20J0/TQ4HsGu9xII/AAAAAAAAAEc/T9i_DV6APEk/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/__06xxhd20J0/TQ4HskTO8NI/AAAAAAAAAEg/Vq0iiNZkRKk/image_thumb%5B2%5D.png?imgmax=800" width="244" height="149"&gt;&lt;/a&gt;  &lt;li&gt;In the Endpoints tab on the Properties page add a second endpoint that uses the public port 21 (which is the default port for FTP)&lt;a href="http://lh6.ggpht.com/__06xxhd20J0/TQ4Ht7F4XiI/AAAAAAAAAEk/-UVTLEJ0J00/s1600-h/image%5B9%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__06xxhd20J0/TQ4HujvohSI/AAAAAAAAAEo/k4e-mDRp9PU/image_thumb%5B3%5D.png?imgmax=800" width="244" height="175"&gt;&lt;/a&gt;  &lt;li&gt;Now right click on the Cloud Project in the Solution Explorer and choose Publish&lt;a href="http://lh4.ggpht.com/__06xxhd20J0/TQ4HvijrCxI/AAAAAAAAAEs/58sgpVlrlA0/s1600-h/image%5B12%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/__06xxhd20J0/TQ4HwG6ZEbI/AAAAAAAAAEw/t2KSQOk6ufA/image_thumb%5B4%5D.png?imgmax=800" width="185" height="244"&gt;&lt;/a&gt;  &lt;li&gt;In the publishing dialog select the option “Deploy your Windows Azure project to Windows Azure” and select the credentials, the deployment environment and the storage account you want to use for the deployment. Then click on “Configure Remote Desktop connections…”&lt;br&gt;&lt;a href="http://lh6.ggpht.com/__06xxhd20J0/TQ4Hw8skbNI/AAAAAAAAAE0/WaLF3doOsak/s1600-h/image%5B18%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__06xxhd20J0/TQ4HxRryBwI/AAAAAAAAAE4/j9av27gq1ws/image_thumb%5B6%5D.png?imgmax=800" width="244" height="217"&gt;&lt;/a&gt;  &lt;li&gt;Check the option “Enable connections for all roles”, select or create a certificate that will be used for the RDP connection and provide a user name and password. This user name and password will grant you administrative rights via remote desktop on the server.&lt;br&gt;&lt;a href="http://lh3.ggpht.com/__06xxhd20J0/TQ4HyPdoNNI/AAAAAAAAAE8/x5hdVW9yG1o/s1600-h/image%5B21%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__06xxhd20J0/TQ4Hy1_golI/AAAAAAAAAFA/GMyq3B6Doqs/image_thumb%5B7%5D.png?imgmax=800" width="244" height="242"&gt;&lt;/a&gt;  &lt;li&gt;Close the dialog and publish your Windows Azure project to the cloud. &lt;li&gt;After the publishing visit the &lt;a href="http://windows.azure.com/" target="_blank"&gt;Windows Azure Management Portal&lt;/a&gt;, select the server instance of your Windows Azure project and click on the Remote Desktop Connect button.&lt;br&gt;&lt;a href="http://lh5.ggpht.com/__06xxhd20J0/TQ4H0zs3s-I/AAAAAAAAAFE/ltJUCFw8shA/s1600-h/image%5B24%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/__06xxhd20J0/TQ4H1apMhFI/AAAAAAAAAFI/qOIc8rvAwns/image_thumb%5B8%5D.png?imgmax=800" width="244" height="105"&gt;&lt;/a&gt; &lt;br&gt;You can either open the .rdp file directly or save it to your computer for later use without having to go to the Management Portal again. &lt;li&gt;Login to the server with the user name and password you provided in step #7.&lt;br&gt;Hint: use “\&amp;lt;yourUserNameHere&amp;gt;” to remove domain information for the login&lt;br&gt;&lt;a href="http://lh6.ggpht.com/__06xxhd20J0/TQ4H18PMxwI/AAAAAAAAAFM/taVWAreBx54/s1600-h/image%5B27%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/__06xxhd20J0/TQ4H2T2s1KI/AAAAAAAAAFQ/F7dow-YH--Y/image_thumb%5B9%5D.png?imgmax=800" width="244" height="165"&gt;&lt;/a&gt;  &lt;li&gt;On the server you first need to remove the binding to port 21 from the IIS default website. Go to: Start &amp;gt; Administrative Tools &amp;gt; Internet Information Services (IIS) Manager, navigate to the only web site in the tree on the left and click on the “Bindings…” link in the Actions pane on the right.&lt;br&gt;&lt;a href="http://lh3.ggpht.com/__06xxhd20J0/TQ4H3h0abvI/AAAAAAAAAFU/rDPJ_MIzeSw/s1600-h/image%5B30%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/__06xxhd20J0/TQ4H4LY15fI/AAAAAAAAAFY/bvCYpf54bbI/image_thumb%5B10%5D.png?imgmax=800" width="244" height="176"&gt;&lt;/a&gt;  &lt;li&gt;Remove the binding to port 21.&lt;br&gt;&lt;a href="http://lh3.ggpht.com/__06xxhd20J0/TQ4H4pqej9I/AAAAAAAAAFc/ut2GWEJ3ekc/s1600-h/image%5B33%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__06xxhd20J0/TQ4H6BcHJZI/AAAAAAAAAFg/12I7t2p9Phk/image_thumb%5B11%5D.png?imgmax=800" width="244" height="135"&gt;&lt;/a&gt;  &lt;li&gt;Close the bindings window and close the IIS Manager &lt;li&gt;Go to: Start &amp;gt; Administrative Tools &amp;gt; Server Manager&lt;br&gt;Navigate to the Web Server (IIS) Role in the tree on the left and click on “Add Role Services” in the right part of the window.&lt;br&gt;&lt;a href="http://lh3.ggpht.com/__06xxhd20J0/TQ4H7CqozsI/AAAAAAAAAFk/j5d9QQ8_1n0/s1600-h/image%5B36%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/__06xxhd20J0/TQ4H7pBvgaI/AAAAAAAAAFo/F3G3mG6OcsM/image_thumb%5B12%5D.png?imgmax=800" width="244" height="117"&gt;&lt;/a&gt;  &lt;li&gt;Select the role service “FTP Publishing Service”. This should select the services “FTP Server” and “FTP Management Console” automatically, too. If not, select all three manually.&lt;br&gt;If necessary, add required role services pointed out by the wizard.&lt;br&gt;&lt;a href="http://lh4.ggpht.com/__06xxhd20J0/TQ4H8S5kvNI/AAAAAAAAAFs/3McSu-LxBOg/s1600-h/image%5B39%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__06xxhd20J0/TQ4H8yugJII/AAAAAAAAAFw/IWddfLAYb34/image_thumb%5B13%5D.png?imgmax=800" width="244" height="185"&gt;&lt;/a&gt;  &lt;li&gt;Click “Next” and then “Install”. &lt;li&gt;Go to: Start &amp;gt; Administrative Tools &amp;gt; Internet Information Services (IIS) 6.0 Manager&lt;br&gt;This tool is used to manage FTP on the server. &lt;li&gt;Expand the tree on the left to the “Default FTP Site”, right click the Default site and  &lt;li&gt;Start the FTP Default Site&lt;br&gt;&lt;a href="http://lh6.ggpht.com/__06xxhd20J0/TQ4H9ad2dWI/AAAAAAAAAF0/mZsRkPK7tTk/s1600-h/image%5B42%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__06xxhd20J0/TQ4H9hilZzI/AAAAAAAAAF4/pEhUdm0QfEk/image_thumb%5B14%5D.png?imgmax=800" width="244" height="173"&gt;&lt;/a&gt; &lt;br&gt;When the IIS6 Manager asks you if it should start the FTP Publishing Service, click “Yes”. &lt;li&gt;To check if your FTP server is working, open a Command Shell (either on the server or on your local machine) and connect to your server. Use the same credentials for the FTP connection as for the RDP login.&lt;br&gt;You can find the address of your FTP server in the title bar of the RDP window.&lt;br&gt;&lt;a href="http://lh5.ggpht.com/__06xxhd20J0/TQ4H-c653oI/AAAAAAAAAF8/LkQKltLHqw4/s1600-h/image%5B45%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/__06xxhd20J0/TQ4H-5gKyHI/AAAAAAAAAGA/PtwKbff7jy4/image_thumb%5B15%5D.png?imgmax=800" width="244" height="61"&gt;&lt;/a&gt; &lt;br&gt;&lt;a href="http://lh3.ggpht.com/__06xxhd20J0/TQ4H_pWG4pI/AAAAAAAAAGE/lqpfBkaxAdI/s1600-h/image%5B48%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__06xxhd20J0/TQ4IAPfe8TI/AAAAAAAAAGI/KsRbA1TqayM/image_thumb%5B16%5D.png?imgmax=800" width="244" height="126"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Issues:&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;For using passive FTP functionality you need to open up more FTP related ports.&lt;/li&gt; &lt;li&gt;When the cloud fabric decides to shut down your server, reboot it or move it to another physical machine, all changes you made via RDP are &lt;strong&gt;lost&lt;/strong&gt;!&lt;br&gt;You might solve this by creating startup scripts or upload a pre-configured server image.&lt;/li&gt; &lt;li&gt;When your server is restarted or moved all locally stored files are deleted, too. So you need to store the FTP uploads somewhere persistently.&lt;/li&gt;&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-4561752058155230074?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/4561752058155230074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/12/ftp-server-on-windows-azure-from.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/4561752058155230074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/4561752058155230074'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/12/ftp-server-on-windows-azure-from.html' title='FTP-Server on Windows Azure from scratch'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/__06xxhd20J0/TQ4HskTO8NI/AAAAAAAAAEg/Vq0iiNZkRKk/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-6031546136379846518</id><published>2010-12-02T16:35:00.001+01:00</published><updated>2010-12-02T16:35:50.082+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Win $500 at Azure app contest</title><content type='html'>&lt;p&gt;Microsoft and Perficient run a Windows Azure app contest. If you submit any application that uses some part of Windows Azure by 11:00 PM ET on December 25, 2010, you can win up to $500.&lt;br&gt;More information on the contest can be found &lt;a href="http://www.perficient.com/codemash/" target="_blank"&gt;here&lt;/a&gt;. So start coding today ;)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-6031546136379846518?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/6031546136379846518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/12/win-500-at-azure-app-contest.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6031546136379846518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6031546136379846518'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/12/win-500-at-azure-app-contest.html' title='Win $500 at Azure app contest'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-7628162352714891546</id><published>2010-11-30T22:33:00.000+01:00</published><updated>2010-11-30T22:34:52.559+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Advent Calendar for Windows Azure</title><content type='html'>&lt;p&gt;While searching for a Advent Calendar for my girlfriend who resides in Austria for her studies, the idea of a cloud advent calendar came into my mind. Ten hours later &lt;a href="http://adventcalendar.cloudapp.net"&gt;http://adventcalendar.cloudapp.net&lt;/a&gt; was born: A scalable calendar using Windows Azure Blob Storage and Silverlight technologies.&lt;/p&gt; &lt;p&gt;This advent calendar is not only for my girlfriend but everyone can create his own one there. I admit usability and design suffered a little bit from the pressure of time (Dec 1st is tomorrow!") but it really works! Give it a try: Go to &lt;a href="http://adventcalendar.cloudapp.net"&gt;http://adventcalendar.cloudapp.net&lt;/a&gt;, click the “New Calendar” button and build your own windows azure cloud advent calendar.&lt;/p&gt; &lt;p&gt;Here is a screenshot:&lt;a href="http://lh3.ggpht.com/__06xxhd20J0/TPVt8g6PYiI/AAAAAAAAAEU/YVfU34mr-ic/s1600-h/calendar%5B7%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="calendar" border="0" alt="calendar" align="left" src="http://lh4.ggpht.com/__06xxhd20J0/TPVt-wU3oYI/AAAAAAAAAEY/zfbiB-xoNQE/calendar_thumb%5B5%5D.png?imgmax=800" width="556" height="284"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Use the Management-Link to add images, music and text to the calendar and its items.&lt;br&gt;Give the Calendar-Link to those who should get the calendar.&lt;/p&gt; &lt;p&gt;I’ll post the code here, soon.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-7628162352714891546?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/7628162352714891546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/11/advent-calendar-for-windows-azure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7628162352714891546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7628162352714891546'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/11/advent-calendar-for-windows-azure.html' title='Advent Calendar for Windows Azure'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/__06xxhd20J0/TPVt-wU3oYI/AAAAAAAAAEY/zfbiB-xoNQE/s72-c/calendar_thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-7070598072684799475</id><published>2010-11-01T14:36:00.000+01:00</published><updated>2010-11-02T19:37:32.277+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Storage'/><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>PDC 2010: Windows Azure Storage Deep Dive</title><content type='html'>&lt;p&gt;The first session that caught my attention is a talk from Jai Haridas on Windows Azure Storage. He gives a great overview of the current state and functionality of Blob Storage, Table Storage, Queue Storage and Cloud Drives. This session has a focus on the scalability of Windows Azure Storage using partitioning and load balancing. A MUST for everyone who creates “real” applications for the cloud.&lt;/p&gt; &lt;p&gt;A nice give-away is the part on &lt;strong&gt;best practices&lt;/strong&gt; with Windows Azure Storage. Jai shows how to&lt;/p&gt; &lt;ul&gt; &lt;li&gt;support scalability by &lt;strong&gt;avoiding the common “append-only” pattern&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;optimize queries&lt;/strong&gt; to the Table Storage&lt;/li&gt; &lt;li&gt;use &lt;strong&gt;continuation tokens&lt;br&gt;&lt;/strong&gt;(e.g. request more than 1000 rows from Table Storage)&lt;/li&gt; &lt;li&gt;deal with &lt;strong&gt;poisoned queue messages&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Check out his full speech at &lt;a title="http://bit.ly/bfu1iw" href="http://bit.ly/bfu1iw"&gt;http://bit.ly/bfu1iw&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-7070598072684799475?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/7070598072684799475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/11/pdc-2010-windows-azure-storage-deep.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7070598072684799475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7070598072684799475'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/11/pdc-2010-windows-azure-storage-deep.html' title='PDC 2010: Windows Azure Storage Deep Dive'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-8948261703078821662</id><published>2010-10-30T19:56:00.000+02:00</published><updated>2010-11-02T18:57:03.077+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Catching Up on Microsoft PDC 2010</title><content type='html'>&lt;p&gt;The annual Microsoft “newsflash” took place over the last two days. It’s a long way from Stuttgart, Germany to Redmond, USA and far too expensive for a student like me. So the next few days I’m going to catch up on the new things presented there and watch the recorded sessions on &lt;a href="http://microsoftpdc.com"&gt;http://microsoftpdc.com&lt;/a&gt;.&lt;br&gt;Of course, I’ll let you know about all interesting stuff about Windows Azure &amp;amp; Co that can be found there!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-8948261703078821662?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/8948261703078821662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/10/catching-up-on-microsoft-pdc-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/8948261703078821662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/8948261703078821662'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/10/catching-up-on-microsoft-pdc-2010.html' title='Catching Up on Microsoft PDC 2010'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-3274018561743416177</id><published>2010-10-02T21:11:00.000+02:00</published><updated>2010-10-05T21:12:16.673+02:00</updated><title type='text'>Microsoft MVP Award</title><content type='html'>&lt;p&gt;Yesterday, I was awarded with the Microsoft MVP Award for my contribution to technical communities on Windows Azure. My gratitude to the ones responsible for the MVP awards in Germany who chose me as a MVP. I am trying to use all advantages of my status as a MVP to stay up to date on Windows Azure topics and enlarge my activities in Microsoft’s communities.&lt;/p&gt; &lt;p&gt;Nico (now MVP)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-3274018561743416177?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/3274018561743416177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/10/microsoft-mvp-award.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3274018561743416177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3274018561743416177'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/10/microsoft-mvp-award.html' title='Microsoft MVP Award'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-3336821866792057597</id><published>2010-09-18T14:40:00.000+02:00</published><updated>2010-09-25T14:39:01.144+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hosted Web Core'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Customized Web Roles: Hosted Web Core in Windows Azure</title><content type='html'>&lt;p&gt;Web roles in Windows Azure strictly limit to a developer what he may and what he may not do. And you may only run one web role per cloud project. On his blog, Steve Marx presents a possibility to use a worker role to behave like a web role by using a Hosted Web Core process. This is similar to what Windows Azure does, when you start up a web role but gives you more power to your web application. Be careful: you also have to take responsibility for the stuff you do!&lt;/p&gt; &lt;p&gt;Read the &lt;a href="http://blog.smarx.com/posts/build-your-own-web-role-running-hosted-web-core-in-windows-azure" target="_blank"&gt;full article here on Steve Marx’ blog&lt;/a&gt; and &lt;a href="http://code.msdn.microsoft.com/hwcworker" target="_blank"&gt;download the code&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-3336821866792057597?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/3336821866792057597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/09/customized-web-roles-hosted-web-core-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3336821866792057597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3336821866792057597'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/09/customized-web-roles-hosted-web-core-in.html' title='Customized Web Roles: Hosted Web Core in Windows Azure'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-158128324521445332</id><published>2010-08-02T17:18:00.001+02:00</published><updated>2010-08-02T17:18:49.145+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>How to check if a BlobContainer or a Blob exists</title><content type='html'>&lt;p&gt;Earlier versions of the Windows Azure SDK provided two methods &lt;font face="Courier New"&gt;DoesContainerExist()&lt;/font&gt;&lt;font face="Arial"&gt; and &lt;/font&gt;&lt;font face="Courier New"&gt;DoesBlobExist()&lt;/font&gt;&lt;font face="Arial"&gt; to determine whether a given BlobContainer or Blob already exists. In the current release of the SDK those methods have been omitted, because they seduced developers to write inefficient code.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Using &lt;font face="Courier New"&gt;DoesContainerExist()&lt;/font&gt; and &lt;font face="Courier New"&gt;DoesBlobExist()&lt;/font&gt; meant more roundtrips to the storage server as necessary. In order to check the existence of Blobs or Containers it’s recommended now to check if its attributes can be retrieved. If the Blob or Container does not exist, this operation fails and throws an exception. To implement this, use the following code which needs only one roundtrip to the server (though it’s not a great style…):&lt;/p&gt; &lt;p style="background-color: #d8d8d8"&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt; container = blobClient.GetContainerReference(path);&lt;br&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; container.FetchAttributes();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008000"&gt;// the container exists if no exception is thrown&lt;/font&gt;&amp;nbsp; &lt;/font&gt;&lt;font face="Courier New"&gt;&lt;br&gt;}&lt;br&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt; (&lt;font color="#2b91af"&gt;StorageClientException&lt;/font&gt; ex)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008022"&gt;// the container does not exist&lt;/font&gt;&lt;br&gt;}&lt;/font&gt;&lt;/p&gt; &lt;p&gt;The same works for Blobs.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-158128324521445332?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/158128324521445332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/08/how-to-check-if-blobcontainer-or-blob.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/158128324521445332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/158128324521445332'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/08/how-to-check-if-blobcontainer-or-blob.html' title='How to check if a BlobContainer or a Blob exists'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-23621048468958553</id><published>2010-07-27T11:28:00.001+02:00</published><updated>2010-07-27T11:28:41.415+02:00</updated><title type='text'>This blog on technorati.com</title><content type='html'>&lt;p&gt;This code is posted to verify that I am the author of this blog…&lt;/p&gt; &lt;p&gt;66TDYEHUKMTG&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-23621048468958553?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/23621048468958553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/this-blog-on-technoraticom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/23621048468958553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/23621048468958553'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/this-blog-on-technoraticom.html' title='This blog on technorati.com'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-3164343048032535288</id><published>2010-07-23T17:27:00.001+02:00</published><updated>2010-07-23T17:27:58.665+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Cloud Cover Video series on Channel9</title><content type='html'>&lt;p&gt;Today I stumbled over a great video series on Windows Azure: Ryan Dunn and Steve Marx have been leading through the Windows Azure platform in over 18 episodes now! Those episodes can be viewed on channel9.&lt;/p&gt; &lt;p&gt;Let’s see if I can provide a full list of topics they covered after having watched the series myself!&lt;/p&gt; &lt;p&gt;Here is the link to the channel9 show: &lt;a title="http://channel9.msdn.com/shows/Cloud+Cover/" href="http://channel9.msdn.com/shows/Cloud+Cover/"&gt;http://channel9.msdn.com/shows/Cloud+Cover/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-3164343048032535288?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/3164343048032535288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/cloud-cover-video-series-on-channel9.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3164343048032535288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3164343048032535288'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/cloud-cover-video-series-on-channel9.html' title='Cloud Cover Video series on Channel9'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-7101984825644734073</id><published>2010-07-22T15:29:00.000+02:00</published><updated>2010-07-22T15:40:16.143+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Put Your App in the Cloud in only 5 Minutes!</title><content type='html'>&lt;p&gt;Hello again. In early February 2009 I did release the first round of &lt;a href="http://nicoploner.blogspot.com/2010/07/windows-azure-architecture-for-massive.html"&gt;Azure How-do-I-videos&lt;/a&gt;. Since &lt;a href="http://nicoploner.blogspot.com/2009/11/videos-from-windows-azure-launch-in.html"&gt;launch&lt;/a&gt; a lot has changed. In particular the Migration to the Cloud has been a lot smoother. Today you can take a ASP.NET Application upload the database to SQL Azure, change the connection string and you are almost done.&lt;/p&gt; &lt;p&gt;See the 5-Minute Migration Videos and run your own app in the cloud using the free Windows Azure Test-Accounts available in Germany by simply writing an email to &lt;a href="mailto:azurenow@microsoft.com"&gt;azurenow@microsoft.com&lt;/a&gt;&lt;/p&gt; &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:7224d676-1a27-4bd9-abb9-79938389dbf3" class="wlWriterEditableSmartContent"&gt;&lt;div id="81f526b3-74d2-4a25-8ff4-9ab4990536bf" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=nfe3ghHB9EU" target="_new"&gt;&lt;img src="http://lh3.ggpht.com/__06xxhd20J0/TEhIi4eH-vI/AAAAAAAAAB4/btnR9asP1RA/video61b15cc394f6%5B8%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('81f526b3-74d2-4a25-8ff4-9ab4990536bf'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;528\&amp;quot; height=\&amp;quot;441\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/nfe3ghHB9EU&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/nfe3ghHB9EU&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;528\&amp;quot; height=\&amp;quot;441\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt;Also I highly recommend the Trainings provided in German that outline Migration of ASP.NET, Silverlight, Java, PHP Apps and discuss Security, SQL Azure, AppFabric&lt;br&gt;and ADFS in detail.&lt;br&gt;&lt;a href="http://msdn.microsoft.com/de-de/windowsazure/ff770837.aspx"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://lh3.ggpht.com/__06xxhd20J0/TEhIjTN1k4I/AAAAAAAAABk/qjvkVcDTYZE/image%5B5%5D.png?imgmax=800" width="503" height="335"&gt;&lt;/a&gt;Source: &lt;a title="http://msdn.microsoft.com/de-de/windowsazure/ff770837.aspx" href="http://msdn.microsoft.com/de-de/windowsazure/ff770837.aspx"&gt;http://msdn.microsoft.com/de-de/windowsazure/ff770837.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-7101984825644734073?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/7101984825644734073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/put-your-app-in-cloud-in-only-5-minutes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7101984825644734073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7101984825644734073'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/put-your-app-in-cloud-in-only-5-minutes.html' title='Put Your App in the Cloud in only 5 Minutes!'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/__06xxhd20J0/TEhIi4eH-vI/AAAAAAAAAB4/btnR9asP1RA/s72-c/video61b15cc394f6%5B8%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-925215806047920072</id><published>2010-07-22T15:21:00.001+02:00</published><updated>2010-07-22T15:35:55.130+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Azure: Cloud App talks to local SAP System</title><content type='html'>&lt;p&gt;I wanted to highlight a stunning example of how a Cloud Application can talk to a local SAP System using the Windows Azure AppFabric.&lt;/p&gt; &lt;p&gt;Tim Fischer from Microsoft has expanded his &lt;a href="http://gallery.expression.microsoft.com/en-us/CoolBlueTimeTracker" target="_blank"&gt;Cool Blue Time Tracker Sample&lt;/a&gt; for Silverlight (which uses a modified version of my &lt;a href="http://www.microsoft.com/germany/msdn/solve/knowhow/howto/sql/WieKannIchMitADONETDataServicesAenderungsverfolgungRealisierenUndDatenkonflikteLoesen.mspx" target="_blank"&gt;change tracking T4 Template&lt;/a&gt; for SL3) to run in the cloud and talk to a local SAP System.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/__06xxhd20J0/TEhFzqqTP5I/AAAAAAAAABY/e0Q8QpUqMVE/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__06xxhd20J0/TEhF0MwAGnI/AAAAAAAAABc/6QtCtK0PAQ8/image_thumb%5B1%5D.png?imgmax=800" width="360" height="235"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You can see the full demo and get the source code here &lt;br&gt;&lt;a title="http://www.microsoft.com/germany/net/WindowsAzure/EventPlayer.aspx" href="http://www.microsoft.com/germany/net/WindowsAzure/EventPlayer.aspx"&gt;http://www.microsoft.com/germany/net/WindowsAzure/EventPlayer.aspx&lt;/a&gt;&amp;nbsp;&lt;br&gt;(Bottom right corner of Trainingsmap):&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-925215806047920072?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/925215806047920072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/windows-azure-cloud-app-talks-to-local.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/925215806047920072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/925215806047920072'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/windows-azure-cloud-app-talks-to-local.html' title='Windows Azure: Cloud App talks to local SAP System'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/__06xxhd20J0/TEhF0MwAGnI/AAAAAAAAABc/6QtCtK0PAQ8/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-1775974809668164844</id><published>2010-07-22T15:07:00.001+02:00</published><updated>2010-07-22T15:35:13.269+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF Data Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Silverlight &amp; Azure Tips&amp;Tricks: WCF Data Services Relative Path, Default Button, Tooltips</title><content type='html'>&lt;p&gt;While using Silverlight 4, WCF Data Services and Windows Azure I wanted to share some of the tricks I needed to apply:&lt;/p&gt; &lt;p&gt;1) To make WCF Data Services Tick correctly on Windows Azure you need to add a “/” after the path to the WCF Data Service in the Client due to the load-balancer.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/__06xxhd20J0/TEhCqieKisI/AAAAAAAAABQ/NC64rRliMjQ/s1600-h/image%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://lh4.ggpht.com/__06xxhd20J0/TEhCrAP3nRI/AAAAAAAAABU/nCdb1DadNmw/image_thumb%5B4%5D.png?imgmax=800" width="533" height="45"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;2) If you need tooltips in Silverlight try this How do I video:&lt;br&gt;&lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_40503" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_40503"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_40503&lt;/a&gt; [German]&lt;/p&gt; &lt;p&gt;3) If you need a default button in Silverlight try this How do I video:&lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39850" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39850"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39850&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-1775974809668164844?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/1775974809668164844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/two-silverlight-azure-tricks-wcf-data.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/1775974809668164844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/1775974809668164844'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/two-silverlight-azure-tricks-wcf-data.html' title='Silverlight &amp;amp; Azure Tips&amp;amp;Tricks: WCF Data Services Relative Path, Default Button, Tooltips'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/__06xxhd20J0/TEhCrAP3nRI/AAAAAAAAABU/nCdb1DadNmw/s72-c/image_thumb%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-151060758634202043</id><published>2010-07-21T19:00:00.000+02:00</published><updated>2010-07-22T19:03:27.898+02:00</updated><title type='text'>SQL Azure Administration Console “Houston” CTP1</title><content type='html'>&lt;p&gt;Project Code Named “Houston” provides a mySQL like Admin Console for SQL Azure. It is currently deployed in North US Data Center so it is only quick if your DB also sits there.&lt;/p&gt; &lt;p&gt;You can use it using this URL, if your SQL Azure firewall allows access from Windows Azure.&lt;/p&gt; &lt;p&gt;&lt;a href="https://manage.sqlazurelabs.com/"&gt;https://manage.sqlazurelabs.com/&lt;/a&gt;. (Login with your SQL Azure Login)&lt;/p&gt; &lt;p&gt;&lt;a href="http://rwyg9a.bay.livefilestore.com/y1pVl0IJfmc4GH5vvu5_QDpi8OlqShhRgVfGo-SLsAfB9WecjoH8kkbobkXG5MU3Guv5BVXf8YY-OmPYcWacBAKCrLmQ_KmIM9z/TableData1024px.png?psid=1"&gt;&lt;img title="image" border="0" alt="image" src="http://lh6.ggpht.com/_GdO7DQgAn3w/TEc43pygbrI/AAAAAAAAC2E/f3nVWzfo-4o/image_thumb%5B7%5D.png?imgmax=800" width="560" height="420"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You can change the database tables using the design view&lt;/p&gt; &lt;p&gt;&lt;a href="http://rwyg9a.bay.livefilestore.com/y1pVl0IJfmc4GH5vvu5_QDpi8OlqShhRgVfGo-SLsAfB9WecjoH8kkbobkXG5MU3Guv5BVXf8YY-OmPYcWacBAKCrLmQ_KmIM9z/TableData1024px.png?psid=1"&gt;&lt;img title="image" border="0" alt="image" src="http://lh4.ggpht.com/_GdO7DQgAn3w/TEc46dWz1iI/AAAAAAAAC2M/mzyl7Wz7QEE/image_thumb%5B10%5D.png?imgmax=800" width="560" height="420"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;And you can also change the content of the database&lt;a href="http://rwyg9a.bay.livefilestore.com/y1p5p99IKeWjw6sMsPcXAutzKkZ2VD3YzAFpDZHyKf0ZwF4c7XT41CGJhT_LVbLBnjZnlPZmCaYSTpQ6XzrozLXrxYNuy0zxqpv/TableDesign1024px.png?psid=1"&gt;&lt;img title="image" border="0" alt="image" src="http://lh4.ggpht.com/_GdO7DQgAn3w/TEc49I14VQI/AAAAAAAAC2U/r9bqDfBBCfU/image_thumb%5B13%5D.png?imgmax=800" width="560" height="420"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-151060758634202043?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/151060758634202043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/sql-azure-administration-console.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/151060758634202043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/151060758634202043'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/sql-azure-administration-console.html' title='SQL Azure Administration Console “Houston” CTP1'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_GdO7DQgAn3w/TEc43pygbrI/AAAAAAAAC2E/f3nVWzfo-4o/s72-c/image_thumb%5B7%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-1141898432992297480</id><published>2010-07-20T17:31:00.000+02:00</published><updated>2010-07-26T17:32:47.368+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>How to use ToolTips in Silverlight applications</title><content type='html'>&lt;p&gt;Another Silverlight CodeClip deals with ToolTips. It demonstrates how to use them in a simple, advanced and professional way.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;In the simplest case, ToolTips display some informative text to the user hovering over a control: &lt;br&gt;&lt;a href="http://lh6.ggpht.com/__06xxhd20J0/TEnBrL2MCeI/AAAAAAAAAD0/krdfG7w1Atg/s1600-h/image%5B2%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/__06xxhd20J0/TEnBrnb8abI/AAAAAAAAAD4/X-gZ4SPHw3k/image_thumb.png?imgmax=800" width="212" height="73"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt; &lt;li&gt;But ToolTips can be more powerful:&lt;br&gt;&lt;a href="http://lh3.ggpht.com/__06xxhd20J0/TEnBrxQmP4I/AAAAAAAAAD8/xZdoG5LUb_o/s1600-h/image%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/__06xxhd20J0/TEnBseisl3I/AAAAAAAAAEA/c3XhOdsucD0/image_thumb%5B3%5D.png?imgmax=800" width="375" height="112"&gt;&lt;/a&gt; &lt;br&gt; &lt;li&gt;Or even contain dynamic data:&lt;br&gt;&lt;a href="http://lh6.ggpht.com/__06xxhd20J0/TEnBskQOXYI/AAAAAAAAAEE/MI45DSzeNek/s1600-h/image%5B11%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__06xxhd20J0/TEnBtN_HrDI/AAAAAAAAAEI/9Iglz614xsY/image_thumb%5B5%5D.png?imgmax=800" width="304" height="82"&gt;&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Watch the CodeClip here [German]: &lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_40503" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_40503"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_40503&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Get the How-To-Guide [German]: &lt;a title="http://www.microsoft.com/germany/msdn/solve/knowhow/howto/webentwicklung/WieKannIchToolTipsInSilverlightVerwenden.mspx" href="http://www.microsoft.com/germany/msdn/solve/knowhow/howto/webentwicklung/WieKannIchToolTipsInSilverlightVerwenden.mspx"&gt;http://www.microsoft.com/germany/msdn/solve/knowhow/howto/webentwicklung/WieKannIchToolTipsInSilverlightVerwenden.mspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-1141898432992297480?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/1141898432992297480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/how-to-use-tooltips-in-silverlight.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/1141898432992297480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/1141898432992297480'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/how-to-use-tooltips-in-silverlight.html' title='How to use ToolTips in Silverlight applications'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/__06xxhd20J0/TEnBrnb8abI/AAAAAAAAAD4/X-gZ4SPHw3k/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-2075960920582981558</id><published>2010-07-20T17:13:00.000+02:00</published><updated>2010-07-23T17:12:54.052+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Azure SDK (June 2010)</title><content type='html'>&lt;p&gt;If you want to host .NET 4 based services in Windows Azure, you need to download the newest release of the Windows Azure Software Development Kit. This Update also enables Support for IntelliTrace, which allows you to debug Windows Azure services.&lt;/p&gt; &lt;p&gt;Go to the download page here:&lt;br&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=21910585-8693-4185-826e-e658535940aa" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=21910585-8693-4185-826e-e658535940aa"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=21910585-8693-4185-826e-e658535940aa&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-2075960920582981558?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/2075960920582981558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/windows-azure-sdk-june-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2075960920582981558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2075960920582981558'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/windows-azure-sdk-june-2010.html' title='Windows Azure SDK (June 2010)'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-3279289546871668036</id><published>2010-07-14T18:06:00.000+02:00</published><updated>2010-07-22T18:11:03.168+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Architecture of a Windows Azure Business App</title><content type='html'>&lt;p&gt;When you really put a Business Application into the Cloud you will get several requirements from your customers. I will show you in this post how to address these requirements:&lt;/p&gt; &lt;p&gt;a) Single-Sign-On: Can be achieved using ADFS and WIF&lt;/p&gt; &lt;p&gt;b) ERP-System Integration can be accomblished using Windows Azure AppFabric &lt;br&gt;Services Bus to connect both.&lt;/p&gt; &lt;p&gt;c) Storing relational data can be done in SQL Azure&lt;/p&gt; &lt;p&gt;d) Security of ASP.NET can be implemented via Single-Sign-On and IPFilters (see codeplex for a sample)&lt;/p&gt; &lt;p&gt;e) Session Management: You need to make sure that session data is persisted to SQL Azure by using the SQL Session Provider for ASP.NET&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/__06xxhd20J0/TEhtk7kPSZI/AAAAAAAAACE/vtAfrkauNzQ/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://lh4.ggpht.com/__06xxhd20J0/TEhtlnk1iNI/AAAAAAAAACI/E95fMewkYEU/image_thumb%5B1%5D.png?imgmax=800" width="451" height="405"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-3279289546871668036?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/3279289546871668036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/architecture-of-windows-azure-business.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3279289546871668036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3279289546871668036'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/architecture-of-windows-azure-business.html' title='Architecture of a Windows Azure Business App'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/__06xxhd20J0/TEhtlnk1iNI/AAAAAAAAACI/E95fMewkYEU/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-2938110560464000102</id><published>2010-07-12T19:44:00.000+02:00</published><updated>2010-07-22T19:44:06.408+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Free Windows Azure test accounts</title><content type='html'>&lt;p&gt;If you’re tired of running your Windows Azure applications in your development fabric only and would like to see how it’s doing in “the real world”, request one of Microsoft’s free Windows Azure test accounts.&lt;/p&gt; &lt;p&gt;Those accounts only run for 14 days but provide full functionality!&lt;br&gt;Just write an email to &lt;a href="mailto:azurenow@microsoft.com"&gt;azurenow@microsoft.com&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-2938110560464000102?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/2938110560464000102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/free-windows-azure-test-accounts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2938110560464000102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2938110560464000102'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/free-windows-azure-test-accounts.html' title='Free Windows Azure test accounts'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-3234494661611841486</id><published>2010-07-10T18:19:00.000+02:00</published><updated>2010-07-22T18:21:59.900+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Webcast on Running Java &amp; PHP on Windows Azure</title><content type='html'>&lt;p&gt;Holger Sirtl has posted a Video that shows how to run Java and PHP on Windows Azure.&lt;/p&gt; &lt;p&gt;In addition I want to note that there are great tools for Eclipse that PHP and Java developers can use to directly develop from inside Eclipse.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Video [German]&lt;br&gt;&lt;/strong&gt;&lt;a title="http://blogs.msdn.com/b/hsirtl/archive/2010/06/18/webcast-zur-interoperabilit-228-t-mit-windows-azure.aspx" href="http://blogs.msdn.com/b/hsirtl/archive/2010/06/18/webcast-zur-interoperabilit-228-t-mit-windows-azure.aspx"&gt;http://blogs.msdn.com/b/hsirtl/archive/2010/06/18/webcast-zur-interoperabilit-228-t-mit-windows-azure.aspx&lt;/a&gt;&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-81-46-metablogapi/6787.PHP07_5F00_2.png"&gt;&lt;img title="PHP07" border="0" alt="PHP07" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-81-46-metablogapi/1104.PHP07_5F00_thumb.png" width="286" height="254"&gt;&lt;/a&gt;&lt;/td&gt; &lt;td valign="top" width="200"&gt;&lt;a href="http://lh3.ggpht.com/__06xxhd20J0/TEhvqodYs8I/AAAAAAAAACM/xBPaiGzHpP0/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://lh3.ggpht.com/__06xxhd20J0/TEhvrRzxALI/AAAAAAAAACQ/CNOOSTCU9bM/image_thumb%5B1%5D.png?imgmax=800" width="242" height="270"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-3234494661611841486?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/3234494661611841486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/webcast-on-running-java-php-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3234494661611841486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3234494661611841486'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/webcast-on-running-java-php-on-windows.html' title='Webcast on Running Java &amp;amp; PHP on Windows Azure'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/__06xxhd20J0/TEhvrRzxALI/AAAAAAAAACQ/CNOOSTCU9bM/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-2495641043893686498</id><published>2010-07-10T17:09:00.000+02:00</published><updated>2010-07-23T17:08:17.311+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Azure Platform Training Kit</title><content type='html'>&lt;p&gt;For all developers who are new to the Windows Azure platform or those who want to get even more insight to Windows azure – there is a new training kit available on Microsoft’s download center. &lt;/p&gt; &lt;p&gt;The June update consists of presentations, hands-on labs and even videos and demos designed to help developers understand Windows Azure and to learn using the Windows Azure platform. The current release includes updated resources for Visual Studio 2010.&lt;/p&gt; &lt;p&gt;Here is one of the basic videos of the training kit that answers the fundamental question “What is Windows Azure?”:&lt;/p&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="512" height="384"&gt; &lt;param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer10_01_18.xap" /&gt; &lt;param name="initParams" value="deferredLoad=true,duration=0,m=http://mschnlnine.vo.llnwd.net/d1/ch9/6/7/0/4/7/4/WhatIsWindowsAzure_2MB_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/6/7/0/4/7/4/WhatIsWindowsAzure_large_ch9.png, postid=474076" /&gt; &lt;param name="background" value="#00FFFFFF" /&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt; &lt;/a&gt; &lt;/object&gt; &lt;p&gt;For a deep dive into Windows Azure get the Training kit:&lt;br&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=413e88f8-5966-4a83-b309-53b7b77edf78" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=413e88f8-5966-4a83-b309-53b7b77edf78"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=413e88f8-5966-4a83-b309-53b7b77edf78&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-2495641043893686498?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/2495641043893686498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/windows-azure-platform-training-kit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2495641043893686498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2495641043893686498'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/windows-azure-platform-training-kit.html' title='Windows Azure Platform Training Kit'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-8428391230806665978</id><published>2010-07-09T18:15:00.000+02:00</published><updated>2010-07-22T18:15:38.988+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>PHP on Windows Azure</title><content type='html'>&lt;p&gt;Holger Sirtl has posed great German blog post on running Windows Azure on PHP&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-81-46-metablogapi/6787.PHP07_5F00_2.png"&gt;&lt;img title="PHP07" border="0" alt="PHP07" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-81-46-metablogapi/1104.PHP07_5F00_thumb.png" width="244" height="216"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Here is his post:&lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.msdn.com/b/hsirtl/archive/2010/06/07/interoperabilit-228-t-mit-windows-azure-ausf-252-hrung-von-php-anwendungen-auf-windows-azure.aspx" href="http://blogs.msdn.com/b/hsirtl/archive/2010/06/07/interoperabilit-228-t-mit-windows-azure-ausf-252-hrung-von-php-anwendungen-auf-windows-azure.aspx"&gt;http://blogs.msdn.com/b/hsirtl/archive/2010/06/07/interoperabilit-228-t-mit-windows-azure-ausf-252-hrung-von-php-anwendungen-auf-windows-azure.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-8428391230806665978?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/8428391230806665978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/php-on-windows-azure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/8428391230806665978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/8428391230806665978'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/php-on-windows-azure.html' title='PHP on Windows Azure'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-48734478572966534</id><published>2010-07-08T17:20:00.000+02:00</published><updated>2010-07-23T17:19:47.368+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Free(!) Windows Azure Book</title><content type='html'>&lt;p&gt;Windows Azure team blog announced a free Book about Windows Azure written by developers for developers. “Windows Azure Platform: Articles from the Trenches Volume 1” can be downloaded as PDF for free. &lt;/p&gt; &lt;p&gt;Visit &lt;a title="http://bit.ly/downloadazurebookvol1" href="http://bit.ly/downloadazurebookvol1"&gt;http://bit.ly/downloadazurebookvol1&lt;/a&gt; and download it!&lt;/p&gt; &lt;p&gt;The book is also available on slideshare.net:&lt;br&gt;&lt;/p&gt; &lt;div style="width: 477px" id="__ss_4584610"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="Windows Azure Platform: Articles from the Trenches, Volume One" href="http://www.slideshare.net/ericnelson/windows-azure-platform-articles-from-the-trenches-volume-one"&gt;Windows Azure Platform: Articles from the Trenches, Volume One&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse4584610" width="477" height="510"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/doc_player.swf?doc=windowsazureplatformarticlesfromthetrenches-100623054253-phpapp01&amp;amp;stripped_title=windows-azure-platform-articles-from-the-trenches-volume-one" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed name="__sse4584610" src="http://static.slidesharecdn.com/swf/doc_player.swf?doc=windowsazureplatformarticlesfromthetrenches-100623054253-phpapp01&amp;amp;stripped_title=windows-azure-platform-articles-from-the-trenches-volume-one" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="477" height="510"&gt;&lt;/embed&gt;&lt;/object&gt; &lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ericnelson"&gt;Eric Nelson&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;And for those who like to read books the traditional way: buy a hardcopy from &lt;a href="http://www.lulu.com/product/paperback/windows-azure-platform-articles-from-the-trenches-volume-one/11476930" target="_blank"&gt;lulu.com&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-48734478572966534?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/48734478572966534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/free-windows-azure-book.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/48734478572966534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/48734478572966534'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/free-windows-azure-book.html' title='Free(!) Windows Azure Book'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-7397321885511225656</id><published>2010-07-08T16:35:00.000+02:00</published><updated>2010-07-22T16:35:59.632+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>What does Azure provide and how fast are servers?</title><content type='html'>&lt;p&gt;I get typically three questions, I want to provide answers on:&lt;/p&gt; &lt;p&gt;a) Why Azure – how does it make my life easier? &lt;br&gt;Here is the answer &lt;a title="http://msdn.microsoft.com/de-de/ff728566(en-us).aspx" href="http://msdn.microsoft.com/de-de/ff728566(en-us).aspx"&gt;http://msdn.microsoft.com/de-de/ff728566(en-us).aspx&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;b) What is the expected performance?&lt;br&gt;Here are a set of benchmarks that help you estimate the performance of the infrastructure provided by azure&lt;br&gt;&lt;a title="http://azurescope.cloudapp.net/BenchmarkTestCases.aspx" href="http://azurescope.cloudapp.net/BenchmarkTestCases.aspx"&gt;http://azurescope.cloudapp.net/BenchmarkTestCases.aspx&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;c) What is the data transfer to and from my computer and Azure?&lt;/p&gt; &lt;p&gt;Microsoft Research has released a throughput analyser that shows you the upload/download performance&lt;br&gt;&lt;a title="http://research.microsoft.com/en-us/downloads/5c8189b9-53aa-4d6a-a086-013d927e15a7/default.aspx" href="http://research.microsoft.com/en-us/downloads/5c8189b9-53aa-4d6a-a086-013d927e15a7/default.aspx"&gt;http://research.microsoft.com/en-us/downloads/5c8189b9-53aa-4d6a-a086-013d927e15a7/default.aspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-7397321885511225656?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/7397321885511225656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/what-does-azure-provide-and-how-fast.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7397321885511225656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7397321885511225656'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/what-does-azure-provide-and-how-fast.html' title='What does Azure provide and how fast are servers?'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-6589116922127713895</id><published>2010-06-03T16:16:00.000+02:00</published><updated>2010-07-22T16:30:30.901+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>The best Windows Azure Apps</title><content type='html'>&lt;p&gt;Windows Azure has now 10.000 customers and you might think ok but do I really need to build an application myself or isn’t there some app available I just download the application package for an run it in the cloud? Yes, there is!&lt;/p&gt; &lt;p&gt;Microsoft Germany puts together a list of applications and tools a new Azure Gallery:&lt;br&gt;&lt;a title="http://www.microsoft.com/germany/net/WindowsAzure/Gallery.aspx" href="http://www.microsoft.com/germany/net/WindowsAzure/Gallery.aspx"&gt;http://www.microsoft.com/germany/net/WindowsAzure/Gallery.aspx&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I have reviewed the apps and tools listed there and even added a few &lt;br&gt;of my own favorite ones:&lt;/p&gt; &lt;p&gt;a) Use Windows Azure Storage as an encrypted network drive with Gladient Cloud Tools&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://gladinet.blogspot.com/2010/01/map-drive-and-backup-to-windows-azure.html"&gt;http://gladinet.blogspot.com/2010/01/map-drive-and-backup-to-windows-azure.html&lt;/a&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://gladinet.blogspot.com/2010/03/secure-backup-to-windows-azure-blob.html"&gt;http://gladinet.blogspot.com/2010/03/secure-backup-to-windows-azure-blob.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;b) Run Wordpress on Azure &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://wordpress.visitmix.com/" href="http://wordpress.visitmix.com/"&gt;http://wordpress.visitmix.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;c) Get a Cash-Register for your business or home-business&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://rentapos.com/" href="http://rentapos.com/"&gt;http://rentapos.com/&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;d) Use Windows Azure based MonitorGrid Solution to monitor your home server&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;a title="http://monitorgrid.com/" href="http://monitorgrid.com/"&gt;http://monitorgrid.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;e) Use a Collaboration Software in the Cloud&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://www.dreamfactory.com/" href="http://www.dreamfactory.com/"&gt;http://www.dreamfactory.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;f) Search E-Books on Windows Azure&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a title="http://docjax.cloudapp.net/home/index.shtml" href="http://docjax.cloudapp.net/home/index.shtml"&gt;http://docjax.cloudapp.net/home/index.shtml&lt;/a&gt;&lt;/p&gt; &lt;p&gt;g) Mapping Solution for Windows Azure&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;a title="http://visualfusion.cloudapp.net/" href="http://visualfusion.cloudapp.net/"&gt;http://visualfusion.cloudapp.net/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;h) Find Friends via Bluehoo Mobile App&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;a title="http://bluehoo.cloudapp.net/" href="http://bluehoo.cloudapp.net/"&gt;http://bluehoo.cloudapp.net/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;According to Microsoft also Umbraco now runs on Azure. I am waiting to get the download.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-6589116922127713895?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/6589116922127713895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/06/best-windows-azure-apps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6589116922127713895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6589116922127713895'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/06/best-windows-azure-apps.html' title='The best Windows Azure Apps'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-2120310592930558831</id><published>2010-06-02T18:01:00.000+02:00</published><updated>2010-07-23T18:00:59.023+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Using Default-Buttons in Silverlight</title><content type='html'>&lt;p&gt;My today’s msdn-solve CodeClip is about porting a standard behavior of applications to Silverlight 4. When filling out a form (either in the web or in a .NET application or elsewhere) users tend to hit the &amp;lt;Return&amp;gt; key and hopefully the application deals with the data entries as intended. But how to implement this in a Silverlight environment?&lt;/p&gt; &lt;p&gt;The key is to use triggers from the Microsoft Expression SDK and automation peers. Triggers can be added to any elements in the XAML markup and listen to a given event. In the CodeClip a trigger is added to the “KeyDown” event of a TextBox. When the event occurs some code is triggered that checks if the pressed key is the &amp;lt;Return&amp;gt; key. If so, an automation peer simulates a click on a given button.&lt;br&gt;Voilà: default button behavior – at your service!&lt;/p&gt; &lt;p&gt;CodeClip [German]: &lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39850" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39850"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39850&lt;/a&gt;&lt;/p&gt; &lt;p&gt;How-To-Guide [German]: &lt;a title="http://www.microsoft.com/germany/msdn/solve/knowhow/howto/webentwicklung/WieKannIchInSilverlightInDialogenEinenDefaultButtonFestlegen.mspx" href="http://www.microsoft.com/germany/msdn/solve/knowhow/howto/webentwicklung/WieKannIchInSilverlightInDialogenEinenDefaultButtonFestlegen.mspx"&gt;http://www.microsoft.com/germany/msdn/solve/knowhow/howto/webentwicklung/WieKannIchInSilverlightInDialogenEinenDefaultButtonFestlegen.mspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-2120310592930558831?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/2120310592930558831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/06/using-default-buttons-in-silverlight.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2120310592930558831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2120310592930558831'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/06/using-default-buttons-in-silverlight.html' title='Using Default-Buttons in Silverlight'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-5808727725355215484</id><published>2010-05-25T14:52:00.000+02:00</published><updated>2010-07-22T14:57:53.416+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF Data Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Mastering the Master-Detail View with WCF Data Services in Silverlight 4</title><content type='html'>&lt;p&gt;In this show how do I Video I discuss several uses of WCF Data Services to realize Master-Detail Views over OData Providers and how to master the client change tracking,&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/__06xxhd20J0/TEg_VkqQkCI/AAAAAAAAAA0/NQjh_9ya4og/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://lh6.ggpht.com/__06xxhd20J0/TEg_Wxx-N1I/AAAAAAAAAA8/R-MxkJdPEhs/image_thumb%5B1%5D.png?imgmax=800" width="516" height="313"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;How to realize Master-Detail Views with Silverlight 4 on top of WCF Data Service&lt;br&gt;&lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39769" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39769"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39769&lt;/a&gt; [German Video]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-5808727725355215484?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/5808727725355215484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/05/mastering-master-detail-view-with-wcf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/5808727725355215484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/5808727725355215484'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/05/mastering-master-detail-view-with-wcf.html' title='Mastering the Master-Detail View with WCF Data Services in Silverlight 4'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/__06xxhd20J0/TEg_Wxx-N1I/AAAAAAAAAA8/R-MxkJdPEhs/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-5758740696351784014</id><published>2010-05-12T14:58:00.000+02:00</published><updated>2010-07-22T14:59:12.834+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF Data Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Consuming WCF Data Services in .NET 4</title><content type='html'>&lt;p&gt;Based on popular request here is also a how do I video showing how to access WCF Data Services from within a .NET 4 Application.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/__06xxhd20J0/TEhAhoBvIsI/AAAAAAAAABA/tiRBQznHx6g/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://lh5.ggpht.com/__06xxhd20J0/TEhAit02j0I/AAAAAAAAABE/-G0E6CG2S_E/image_thumb%5B1%5D.png?imgmax=800" width="513" height="185"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Video: Consume WCF Data Services in .NET 4&lt;br&gt;&lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39672" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39672"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39672&lt;/a&gt; [German]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-5758740696351784014?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/5758740696351784014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/consuming-wcf-data-services-in-net-4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/5758740696351784014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/5758740696351784014'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/consuming-wcf-data-services-in-net-4.html' title='Consuming WCF Data Services in .NET 4'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/__06xxhd20J0/TEhAit02j0I/AAAAAAAAABE/-G0E6CG2S_E/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-6755100100027812340</id><published>2010-05-05T14:47:00.000+02:00</published><updated>2010-07-22T14:47:13.650+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF Data Services'/><category scheme='http://www.blogger.com/atom/ns#' term='T4'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO.NET Data Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Using WCF Data Services in Silverlight 4</title><content type='html'>&lt;p&gt;ADO.NET Data Services has been renamed to WCF Data Services in Silverlight 4 and .NET 4. The protocol that is talked between Client and Server has also been renamed and is now known as OData Protocoll. You can get a variety of clients and providers that speak “OData” from &lt;a href="http://Odata.org"&gt;http://Odata.org&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;OData and WCF Data Services is my favorite technology for data transfer for 3-Tier Architectures because it allows me to retrieve, change and update data on the client without requiring me to write additional server side code that handles queries and the like. In addition Silverlight 4 now supports change tracking on the client which makes my T4 Templates I wrote for Silverlight 3 kind of non-any longer needed. &lt;/p&gt; &lt;p&gt;Here is a how do I video that shows you how to expose an existing Database via OData and access it from Silverlight &lt;/p&gt; &lt;p&gt;Video: Expose Database via WCF Data Services&lt;br&gt;&lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39621" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39621"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39621&lt;/a&gt; [German]&lt;/p&gt; &lt;p&gt;Video: Consume WCF Data Service in Silverlight 4&lt;br&gt;&lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39672" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39672"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_39672&lt;/a&gt; [German]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-6755100100027812340?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/6755100100027812340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/using-wcf-data-services-in-silverlight.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6755100100027812340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/6755100100027812340'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/using-wcf-data-services-in-silverlight.html' title='Using WCF Data Services in Silverlight 4'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-5313016862405551127</id><published>2010-01-10T16:10:00.000+01:00</published><updated>2010-07-23T17:10:10.016+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Azure SDK (Feb. 2010)</title><content type='html'>&lt;p&gt;Stay up to date with the new Windows Azure SDK ready for download at Microsoft download center:&lt;br&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=dba6a576-468d-4ef6-877e-b14e3c865d3a" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=dba6a576-468d-4ef6-877e-b14e3c865d3a"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=dba6a576-468d-4ef6-877e-b14e3c865d3a&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-5313016862405551127?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/5313016862405551127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/01/windows-azure-sdk-feb-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/5313016862405551127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/5313016862405551127'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/01/windows-azure-sdk-feb-2010.html' title='Windows Azure SDK (Feb. 2010)'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-8225896258048208194</id><published>2009-11-30T12:53:00.000+01:00</published><updated>2010-07-22T14:04:04.985+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Videos from the Windows Azure Launch in Germany</title><content type='html'>&lt;p&gt;The launch event of Windows Azure in Germany end of November was really nice with a&amp;nbsp; lot of partner case-studies and on-site stands. It was good to see that the Cloud becomes a reality. You can checkout the German videos &lt;a href="http://vepexp.microsoft.com/azure" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&lt;img src="http://www.microsoft.com/germany/net/WindowsAzure/launchday/A_AnfahrtDSC05406.JPG" width="259" height="182"&gt;&lt;/td&gt; &lt;td valign="top" width="200"&gt;&lt;img src="http://www.microsoft.com/germany/net/WindowsAzure/launchday/DSC05422.jpg" width="244" height="188"&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="200"&gt;&lt;img src="http://www.microsoft.com/germany/net/WindowsAzure/launchday/DSC05379.jpg" width="271" height="222"&gt;&lt;/td&gt; &lt;td valign="top" width="200"&gt;&lt;img src="http://www.microsoft.com/germany/net/WindowsAzure/launchday/DSC05398.jpg" width="251" height="218"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-8225896258048208194?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/8225896258048208194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2009/11/videos-from-windows-azure-launch-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/8225896258048208194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/8225896258048208194'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2009/11/videos-from-windows-azure-launch-in.html' title='Videos from the Windows Azure Launch in Germany'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-3252978276312335067</id><published>2009-11-27T15:55:00.000+01:00</published><updated>2010-07-23T16:54:22.844+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Official Introduction Document to Windows Azure</title><content type='html'>&lt;p&gt;Microsoft rampup released a six-paged document on Windows Azure describing &lt;/p&gt; &lt;p&gt;a) &lt;strong&gt;Resources&lt;/strong&gt; offered by Windows Azure&lt;/p&gt; &lt;p&gt;b) Windows Azure &lt;strong&gt;architecture&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;c) &lt;strong&gt;Developing Issues&lt;/strong&gt; for the Cloud.&lt;/p&gt; &lt;p&gt;Download the article here: &lt;a title="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=96d08ded-bbb9-450b-b180-b9d1f04c3b7f" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=96d08ded-bbb9-450b-b180-b9d1f04c3b7f"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=96d08ded-bbb9-450b-b180-b9d1f04c3b7f&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-3252978276312335067?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/3252978276312335067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2009/11/official-introduction-document-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3252978276312335067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/3252978276312335067'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2009/11/official-introduction-document-to.html' title='Official Introduction Document to Windows Azure'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-8966102337731482996</id><published>2009-11-15T18:28:00.000+01:00</published><updated>2010-07-22T19:44:18.320+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Get Windows Azure SDK v1.0</title><content type='html'>&lt;p&gt;Microsoft released version 1.0 of the Windows Azure Software Development Kit. Besides the Development Fabric, the Development Storage and other basics for developing applications on the Windows Azure platform it contains &lt;/p&gt; &lt;p&gt;a) a &lt;strong&gt;Diagnostics library&lt;/strong&gt; to enable logging using standard .NET APIs&lt;/p&gt; &lt;p&gt;b)&lt;strong&gt; Certificate Management&lt;/strong&gt; to support SSL certificates in Windows Azure&lt;/p&gt; &lt;p&gt;c)&lt;strong&gt; Persistent local resource storage&lt;/strong&gt; during role recycle&lt;/p&gt; &lt;p&gt;and more great features. Even the samples have been updated and show new features. Both in C# and VB.NET.&lt;/p&gt; &lt;p&gt;Go for it!&lt;br&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=772990da-8926-4db0-958f-95c1da572c84" target="_blank"&gt;Download the SDK here.&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-8966102337731482996?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/8966102337731482996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2009/11/get-windows-azure-sdk-v10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/8966102337731482996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/8966102337731482996'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2009/11/get-windows-azure-sdk-v10.html' title='Get Windows Azure SDK v1.0'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-2426762437532388799</id><published>2009-09-19T16:41:00.000+02:00</published><updated>2010-07-23T16:40:23.018+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Azure Service Management API</title><content type='html'>&lt;p&gt;Yesterday, the Windows Azure team introduced an API that allows developers to manage Azure Services without using the Azure development portal.&lt;/p&gt; &lt;p&gt;Accessing the service management via its REST-services requires usage of X509 client certificates. View the full blog post at the &lt;a href="http://blogs.msdn.com/b/windowsazure/archive/2009/09/17/introducing-the-windows-azure-service-management-api.aspx" target="_blank"&gt;Windows Azure Team Blog&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-2426762437532388799?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/2426762437532388799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2009/09/windows-azure-service-management-api.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2426762437532388799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/2426762437532388799'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2009/09/windows-azure-service-management-api.html' title='Windows Azure Service Management API'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-7007615482967566637</id><published>2009-02-28T13:37:00.000+01:00</published><updated>2010-07-22T15:37:29.023+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Azure Architecture for massive scalable Websites &amp; Porting of a Startpage Portal</title><content type='html'>&lt;p&gt;The Windows Azure Platform provides SQL based and Windows Azure based Storage Services. The Windows Azure based Storage Services are useful in scenarios where you need massive scalability e.g. like for a start-page ala pageflakes or google/IG.&lt;/p&gt; &lt;p&gt;I had the chance to do a series for How Do I Videos that show how to build a massively scalable website based on azure.&lt;/p&gt; &lt;p&gt;The first Video shows how to build an azure app: &lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31344" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31344"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31344&lt;/a&gt; [German]&lt;/p&gt; &lt;p&gt;The second Video shows how to store binary data in Windows Azure Storage&lt;br&gt;&lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31346" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31346"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31346&lt;/a&gt; [German]&lt;/p&gt; &lt;p&gt;The third Video shows how to store Entites in Windows Azure Table Storage using ADO.NET Data Services&lt;br&gt;&lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31350" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31350"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31350&lt;/a&gt; [German]&lt;/p&gt; &lt;p&gt;Then finally I show how to migrate the Startpage Portal &lt;a href="http://www.dropthings.com"&gt;www.dropthings.com&lt;/a&gt; to Windows Azure and Windows Azure Table Storage&lt;br&gt;&lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31352" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31352"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31352&lt;/a&gt; [German]&lt;br&gt;&lt;img src="http://down.chinaz.com/upload/2009/6/19/2009061948635601.jpg" width="468" height="608"&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-7007615482967566637?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/7007615482967566637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2010/07/windows-azure-architecture-for-massive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7007615482967566637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7007615482967566637'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2010/07/windows-azure-architecture-for-massive.html' title='Windows Azure Architecture for massive scalable Websites &amp;amp; Porting of a Startpage Portal'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7686673531992223301.post-7158233503070670461</id><published>2009-01-26T16:38:00.000+01:00</published><updated>2010-07-23T17:47:25.345+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF Data Services'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO.NET Data Services'/><title type='text'>Change Tracking and Conflict Management with ADO.NET Data Services</title><content type='html'>&lt;p&gt;Today the &lt;a href="http://msdn-solve.de" target="_blank"&gt;msdn-solve&lt;/a&gt; portal released a new CodeClip of mine about Change Tracking and Conflict Management with ADO.NET Data Services.&lt;/p&gt; &lt;p&gt;In ADO.NET Data Services a data context needs to be notified about any changes applied to the tracked entities. It’s easy to do so when you have full control over the entity. But when the entities are bound to e.g. a DataGrid, things get more and more complicated. &lt;br&gt;View the CodeClip [German] or read the how-to-guide to learn how to use the PropertyChanged-Event to notify changes on entities.&lt;/p&gt; &lt;p&gt;In multi-user scenarios data is usually manipulated by many users simultaneously. How does your application know if there is new data available when trying to update the data source? Both, the clip and the guide demonstrate how eTags (timestamps) can be used to deal with conflicts using the “Optimistic Concurrency” princible.&lt;/p&gt; &lt;p&gt;CodeClip [German]: &lt;a title="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31212" href="http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31212"&gt;http://www.microsoft.com/germany/msdn/solve/codeclips/library.aspx?id=msdn_de_31212&lt;/a&gt;&lt;/p&gt; &lt;p&gt;How-To-Guide [German]: &lt;a title="http://www.microsoft.com/germany/msdn/solve/knowhow/howto/sql/WieKannIchMitADONETDataServicesAenderungsverfolgungRealisierenUndDatenkonflikteLoesen.mspx" href="http://www.microsoft.com/germany/msdn/solve/knowhow/howto/sql/WieKannIchMitADONETDataServicesAenderungsverfolgungRealisierenUndDatenkonflikteLoesen.mspx"&gt;http://www.microsoft.com/germany/msdn/solve/knowhow/howto/sql/WieKannIchMitADONETDataServicesAenderungsverfolgungRealisierenUndDatenkonflikteLoesen.mspx&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7686673531992223301-7158233503070670461?l=nicoploner.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nicoploner.blogspot.com/feeds/7158233503070670461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nicoploner.blogspot.com/2009/01/change-tracking-and-conflict-management.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7158233503070670461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7686673531992223301/posts/default/7158233503070670461'/><link rel='alternate' type='text/html' href='http://nicoploner.blogspot.com/2009/01/change-tracking-and-conflict-management.html' title='Change Tracking and Conflict Management with ADO.NET Data Services'/><author><name>Nico Ploner</name><uri>http://www.blogger.com/profile/01150553606185663898</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/__06xxhd20J0/TEh81ZgB1FI/AAAAAAAAADU/Vj2Yye0CEH4/S220/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
