<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Extemporaneous Mumblings</title>
    <link>http://dunnry.com/blog/</link>
    <description>... a blog by Ryan Dunn</description>
    <language>en-us</language>
    <copyright>Ryan Dunn</copyright>
    <lastBuildDate>Fri, 16 Jul 2010 14:40:13 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>ryan@dunnry.com</managingEditor>
    <webMaster>ryan@dunnry.com</webMaster>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=cf64921b-4fac-45d3-ab16-7cfe225e59ae</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,cf64921b-4fac-45d3-ab16-7cfe225e59ae.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,cf64921b-4fac-45d3-ab16-7cfe225e59ae.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cf64921b-4fac-45d3-ab16-7cfe225e59ae</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For <a href="http://channel9.msdn.com/shows/Cloud+Cover/Cloud-Cover-Episode-19-Silverlight-and-Blob-Storage/" target="_blank">Episode
19</a> of the <a href="http://channel9.msdn.com/shows/Cloud+Cover/" target="_blank">Cloud
Cover</a> show, <a href="http://blog.smarx.com/" target="_blank">Steve</a> and I discussed
the importance of setting the Content-Type on your blobs in Windows Azure blob storage. 
This was was especially important for Silverlight clients.  I mentioned that
there was a way to look up a Content Type from your registry as opposed to hardcoding
a list.  The code is actually pretty simple.  I pulled this from some code
I had lying around that does uploads.  
</p>
        <p>
Here it is:
</p>
        <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">
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">private</span>
            <span style="color: #0000ff">static</span>
            <span style="color: #0000ff">string</span> GetContentType(<span style="color: #0000ff">string</span> file) </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">{
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">string</span> contentType
= "<span style="color: #8b0000">application/octet-stream</span>"; </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">string</span> fileExt
= System.IO.Path.GetExtension(file).ToLowerInvariant(); </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">	RegistryKey fileExtKey = Registry.ClassesRoot.OpenSubKey(fileExt);
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">if</span> (fileExtKey
!= <span style="color: #0000ff">null</span> &amp;&amp; fileExtKey.GetValue("<span style="color: #8b0000">Content
Type</span>") != <span style="color: #0000ff">null</span>) </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">	{
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">		contentType = fileExtKey.GetValue("<span style="color: #8b0000">Content
Type</span>").ToString(); </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">	}
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span> contentType; </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">}
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
        </pre>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=cf64921b-4fac-45d3-ab16-7cfe225e59ae" />
      </body>
      <title>Getting the Content-Type from your Registry</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,cf64921b-4fac-45d3-ab16-7cfe225e59ae.aspx</guid>
      <link>http://dunnry.com/blog/2010/07/16/GettingTheContentTypeFromYourRegistry.aspx</link>
      <pubDate>Fri, 16 Jul 2010 14:40:13 GMT</pubDate>
      <description>&lt;p&gt;
For &lt;a href="http://channel9.msdn.com/shows/Cloud+Cover/Cloud-Cover-Episode-19-Silverlight-and-Blob-Storage/" target="_blank"&gt;Episode
19&lt;/a&gt; of the &lt;a href="http://channel9.msdn.com/shows/Cloud+Cover/" target="_blank"&gt;Cloud
Cover&lt;/a&gt; show, &lt;a href="http://blog.smarx.com/" target="_blank"&gt;Steve&lt;/a&gt; and I discussed
the importance of setting the Content-Type on your blobs in Windows Azure blob storage.&amp;#160;
This was was especially important for Silverlight clients.&amp;#160; I mentioned that
there was a way to look up a Content Type from your registry as opposed to hardcoding
a list.&amp;#160; The code is actually pretty simple.&amp;#160; I pulled this from some code
I had lying around that does uploads.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Here it is:
&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,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&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; GetContentType(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; file) &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; contentType
= &amp;quot;&lt;span style="color: #8b0000"&gt;application/octet-stream&lt;/span&gt;&amp;quot;; &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; fileExt
= System.IO.Path.GetExtension(file).ToLowerInvariant(); &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;	RegistryKey fileExtKey = Registry.ClassesRoot.OpenSubKey(fileExt);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (fileExtKey
!= &lt;span style="color: #0000ff"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; fileExtKey.GetValue(&amp;quot;&lt;span style="color: #8b0000"&gt;Content
Type&lt;/span&gt;&amp;quot;) != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;) &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;	{
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;		contentType = fileExtKey.GetValue(&amp;quot;&lt;span style="color: #8b0000"&gt;Content
Type&lt;/span&gt;&amp;quot;).ToString(); &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;	}
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;	&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; contentType; &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=cf64921b-4fac-45d3-ab16-7cfe225e59ae" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,cf64921b-4fac-45d3-ab16-7cfe225e59ae.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=dddae159-7691-431a-b9d3-eaf10f66f30d</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,dddae159-7691-431a-b9d3-eaf10f66f30d.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,dddae159-7691-431a-b9d3-eaf10f66f30d.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=dddae159-7691-431a-b9d3-eaf10f66f30d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I remember when I was in consulting some years ago now.  At the time, I was a
fairly senior technical resource and I had a pretty wide variety of clients and scenarios
under my belt.  I was... experienced.
</p>
        <p>
Anyhow, as a consultant it is pretty common to be interviewed by your potential client
before arriving.  Clients don't like to have total n00bs on the job if they are
paying consulting rates.  I used to have a number of these sort of interviews
before being accepted to work on a project.
</p>
        <p>
Even though I forget exactly now which client it was that interviewed me, I still
remember the interview.  At the time, .NET 1.1 was the norm and 2.0 was in beta
or so.  I was interviewing for a technical position on corporate account - architect
or senior dev, if I recall correctly.  The customer got me on a conference call
and I breezed through the background portion of the interview.  Next came the
'technical' interview.  I apparently got some young buck, fresh from his MSCD.NET
exam that decided to test me on .NET trivia.  After answering a number of general
.NET questions correctly, he asked me two questions that stick in my mind:
</p>
        <ul>
          <li>
What does 'private internal' mean?</li>
          <li>
If you were to throw a custom exception in .NET, how would you do it?</li>
        </ul>
        <p>
Now, I said at the time that I wasn't sure on the first one and that I thought it
might be both private and internal visibility.  The interviewer delighted in
telling me it was private OR internal (the UNION of the two).  For the next question,
I said I would simply derive from Exception and do what I needed.  The interviewer
again (with 'Aha!' in his voice) told me that (of course) I should derive from ApplicationException.
</p>
        <p>
I was passed over for the role for not being technical enough.
</p>
        <p>
Now, in retrospect, it is laughable.  First, you only need to be told once what
something means in order for it to stick.  Next, it turns out <a href="http://blogs.msdn.com/b/kcwalina/archive/2006/06/23/644822.aspx" target="_blank">I
was right</a> on the second one.  The interviewer was so caught up on catching
me on what I didn't know that he never considered if it mattered.  To this day,
I have never seen a single instance of using "private internal" on anything
- ever.  Furthermore, he ignored the fact that I had a vast amount of experience
in his industry and had demonstrated enough .NET knowledge to determine I wasn't joking
when I said I had coded in it.
</p>
        <p>
It would have been much better to ask meaningful questions that actually test what
matters (in this case systems thinking):
</p>
        <ul>
          <li>
When and why would you use a private and internal visible declaration - a.k.a. 'private
internal'?</li>
          <li>
Why would you throw a custom exception in .NET?  When do you throw exceptions?</li>
        </ul>
        <p>
Those kinds of questions get much deeper into the psyche of the developer and let
you understand what kind of developer you are dealing with.
</p>
        <p>
I contrast this with my Microsoft interview.  I had one of the most intimidating
interviews ever with <a href="http://blogs.msdn.com/b/vbertocci/" target="_blank">Vittorio</a>. 
He asked me (paraphrasing), "How would you design Twitter?  Take some time
and think about it - trivial answers without consideration will not bode well for
you".  It was beautiful in hindsight.  I got to tell him about the
architectural considerations that I thought mattered and in broad strokes what I thought
about.  It must have worked - we are now on the same team and he is a good colleague
and friend.  Had he asked me about advanced threading or WCF bindings, I might
not have 'passed' his exam.  Turns out that those topics don't matter for the
job.  He asked exactly what did matter - could I think about systems as a whole
and I did I have enough understanding of the pieces?
</p>
        <p>
Next time you interview someone, make sure you measure what matters.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=dddae159-7691-431a-b9d3-eaf10f66f30d" />
      </body>
      <title>Measure What Matters</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,dddae159-7691-431a-b9d3-eaf10f66f30d.aspx</guid>
      <link>http://dunnry.com/blog/2010/07/09/MeasureWhatMatters.aspx</link>
      <pubDate>Fri, 09 Jul 2010 06:25:43 GMT</pubDate>
      <description>&lt;p&gt;
I remember when I was in consulting some years ago now.&amp;#160; At the time, I was a
fairly senior technical resource and I had a pretty wide variety of clients and scenarios
under my belt.&amp;#160; I was... experienced.
&lt;/p&gt;
&lt;p&gt;
Anyhow, as a consultant it is pretty common to be interviewed by your potential client
before arriving.&amp;#160; Clients don't like to have total n00bs on the job if they are
paying consulting rates.&amp;#160; I used to have a number of these sort of interviews
before being accepted to work on a project.
&lt;/p&gt;
&lt;p&gt;
Even though I forget exactly now which client it was that interviewed me, I still
remember the interview.&amp;#160; At the time, .NET 1.1 was the norm and 2.0 was in beta
or so.&amp;#160; I was interviewing for a technical position on corporate account - architect
or senior dev, if I recall correctly.&amp;#160; The customer got me on a conference call
and I breezed through the background portion of the interview.&amp;#160; Next came the
'technical' interview.&amp;#160; I apparently got some young buck, fresh from his MSCD.NET
exam that decided to test me on .NET trivia.&amp;#160; After answering a number of general
.NET questions correctly, he asked me two questions that stick in my mind:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
What does 'private internal' mean?&lt;/li&gt;
&lt;li&gt;
If you were to throw a custom exception in .NET, how would you do it?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Now, I said at the time that I wasn't sure on the first one and that I thought it
might be both private and internal visibility.&amp;#160; The interviewer delighted in
telling me it was private OR internal (the UNION of the two).&amp;#160; For the next question,
I said I would simply derive from Exception and do what I needed.&amp;#160; The interviewer
again (with 'Aha!' in his voice) told me that (of course) I should derive from ApplicationException.
&lt;/p&gt;
&lt;p&gt;
I was passed over for the role for not being technical enough.
&lt;/p&gt;
&lt;p&gt;
Now, in retrospect, it is laughable.&amp;#160; First, you only need to be told once what
something means in order for it to stick.&amp;#160; Next, it turns out &lt;a href="http://blogs.msdn.com/b/kcwalina/archive/2006/06/23/644822.aspx" target="_blank"&gt;I
was right&lt;/a&gt; on the second one.&amp;#160; The interviewer was so caught up on catching
me on what I didn't know that he never considered if it mattered.&amp;#160; To this day,
I have never seen a single instance of using &amp;quot;private internal&amp;quot; on anything
- ever.&amp;#160; Furthermore, he ignored the fact that I had a vast amount of experience
in his industry and had demonstrated enough .NET knowledge to determine I wasn't joking
when I said I had coded in it.
&lt;/p&gt;
&lt;p&gt;
It would have been much better to ask meaningful questions that actually test what
matters (in this case systems thinking):
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
When and why would you use a private and internal visible declaration - a.k.a. 'private
internal'?&lt;/li&gt;
&lt;li&gt;
Why would you throw a custom exception in .NET?&amp;#160; When do you throw exceptions?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Those kinds of questions get much deeper into the psyche of the developer and let
you understand what kind of developer you are dealing with.
&lt;/p&gt;
&lt;p&gt;
I contrast this with my Microsoft interview.&amp;#160; I had one of the most intimidating
interviews ever with &lt;a href="http://blogs.msdn.com/b/vbertocci/" target="_blank"&gt;Vittorio&lt;/a&gt;.&amp;#160;
He asked me (paraphrasing), &amp;quot;How would you design Twitter?&amp;#160; Take some time
and think about it - trivial answers without consideration will not bode well for
you&amp;quot;.&amp;#160; It was beautiful in hindsight.&amp;#160; I got to tell him about the
architectural considerations that I thought mattered and in broad strokes what I thought
about.&amp;#160; It must have worked - we are now on the same team and he is a good colleague
and friend.&amp;#160; Had he asked me about advanced threading or WCF bindings, I might
not have 'passed' his exam.&amp;#160; Turns out that those topics don't matter for the
job.&amp;#160; He asked exactly what did matter - could I think about systems as a whole
and I did I have enough understanding of the pieces?
&lt;/p&gt;
&lt;p&gt;
Next time you interview someone, make sure you measure what matters.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=dddae159-7691-431a-b9d3-eaf10f66f30d" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,dddae159-7691-431a-b9d3-eaf10f66f30d.aspx</comments>
      <category>Tips</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=b62d3d48-eed9-407a-9097-35b230e7271e</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,b62d3d48-eed9-407a-9097-35b230e7271e.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,b62d3d48-eed9-407a-9097-35b230e7271e.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b62d3d48-eed9-407a-9097-35b230e7271e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Last week, I had the opportunity to talk with Hal and Jonathan on the <a href="http://powerscripting.wordpress.com/">PowerScripting
podcast</a> about Windows Azure.  It was a fun chat - lots on Windows Azure,
a bit on the <a href="http://code.msdn.microsoft.com/azurecmdlets">WASM cmdlets</a> and <a href="http://code.msdn.microsoft.com/windowsazuremmc">MMC</a>,
and it revealed my <a href="http://en.wikipedia.org/wiki/Spider-Man">favorite comic
book character</a>.
</p>
        <p>
          <a href="http://powerscripting.wordpress.com/2010/06/06/episode-114-ryan-dunn-on-azure-and-powershell/">Listen
to it now.</a>
        </p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=b62d3d48-eed9-407a-9097-35b230e7271e" />
      </body>
      <title>PowerScripting Podcast</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,b62d3d48-eed9-407a-9097-35b230e7271e.aspx</guid>
      <link>http://dunnry.com/blog/2010/06/11/PowerScriptingPodcast.aspx</link>
      <pubDate>Fri, 11 Jun 2010 18:41:44 GMT</pubDate>
      <description>&lt;p&gt;
Last week, I had the opportunity to talk with Hal and Jonathan on the &lt;a href="http://powerscripting.wordpress.com/"&gt;PowerScripting
podcast&lt;/a&gt; about Windows Azure.&amp;#160; It was a fun chat - lots on Windows Azure,
a bit on the &lt;a href="http://code.msdn.microsoft.com/azurecmdlets"&gt;WASM cmdlets&lt;/a&gt; and &lt;a href="http://code.msdn.microsoft.com/windowsazuremmc"&gt;MMC&lt;/a&gt;,
and it revealed my &lt;a href="http://en.wikipedia.org/wiki/Spider-Man"&gt;favorite comic
book character&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://powerscripting.wordpress.com/2010/06/06/episode-114-ryan-dunn-on-azure-and-powershell/"&gt;Listen
to it now.&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=b62d3d48-eed9-407a-9097-35b230e7271e" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,b62d3d48-eed9-407a-9097-35b230e7271e.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>PowerShell</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=e9f56683-03b1-415a-8d3f-a9bd51e57238</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,e9f56683-03b1-415a-8d3f-a9bd51e57238.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,e9f56683-03b1-415a-8d3f-a9bd51e57238.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e9f56683-03b1-415a-8d3f-a9bd51e57238</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This post is a bit overdue:  <a href="http://blog.smarx.com" target="_blank">Steve</a> threatened
to blog it himself, so I figured I should get moving.  In one of our <a href="http://channel9.msdn.com/shows/Cloud+Cover/" target="_blank">Cloud
Cover</a> episodes, we covered how to host <a href="http://channel9.msdn.com/shows/Cloud+Cover/Cloud-Cover-Episode-12-Hosting-WCF-and-Inter-role-Communication/" target="_blank">WCF
services in Windows Azure</a>.  I showed how to host both publically accessible
ones as well as how to host internal WCF services that are only visible within a hosted
service.
</p>
        <p>
In order to host an internal WCF Service, you need to setup an internal endpoint and
use inter-role communication.  The difference between doing this and hosting
an external WCF service on an input endpoint is mainly in the fact that internal endpoints
are not load-balanced, while input endpoints are hooked to the load-balancer.
</p>
        <h3>Hosting an Internal WCF Service
</h3>
        <p>
Here you can see how simple it is to actually get the internal WCF service up and
listening.  Notice that the only thing that is different is that the base address
I pass to my <strong>ServiceHost</strong> contains the internal endpoint I created. 
Since the port and IP address I am running on is not known until runtime, you have
to create the host and pass this information in dynamically.
</p>
        <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">
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">public</span>
            <span style="color: #0000ff">override</span>
            <span style="color: #0000ff">bool</span> OnStart() </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">{
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #008000">//
Set the maximum number of concurrent connections </span>
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    ServicePointManager.DefaultConnectionLimit = 12;
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    DiagnosticMonitor.Start("<span style="color: #8b0000">DiagnosticsConnectionString</span>"); </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #008000">//
For information on handling configuration changes</span>
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #008000">//
see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.</span>
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    RoleEnvironment.Changing += RoleEnvironmentChanging;
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    StartWCFService();
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span>
            <span style="color: #0000ff">base</span>.OnStart(); </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">}
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">private</span>
            <span style="color: #0000ff">void</span> StartWCFService() </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">{
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    var baseAddress = String.Format(
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        "<span style="color: #8b0000">net.tcp://{0}</span>", </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["<span style="color: #8b0000">EchoService</span>"].IPEndpoint </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        );
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    var host = <span style="color: #0000ff">new</span> ServiceHost(<span style="color: #0000ff">typeof</span>(EchoService), <span style="color: #0000ff">new</span> Uri(baseAddress)); </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    host.AddServiceEndpoint(<span style="color: #0000ff">typeof</span>(IEchoService), <span style="color: #0000ff">new</span> NetTcpBinding(SecurityMode.None),
"<span style="color: #8b0000">echo</span>"); </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    host.Open();
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">}</pre>
        </pre>
        <h3>Consuming the Internal WCF Service
</h3>
        <p>
From another role in my hosted service, I want to actually consume this service. 
From my code-behind, this was all the code I needed to actually call the service.
</p>
        <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">
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">protected</span>
            <span style="color: #0000ff">void</span> Button1_Click(<span style="color: #0000ff">object</span> sender,
EventArgs e) </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">{
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    var factory = <span style="color: #0000ff">new</span> ChannelFactory&lt;WorkerHost.IEchoService&gt;(<span style="color: #0000ff">new</span> NetTcpBinding(SecurityMode.None)); </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    var channel = factory.CreateChannel(GetRandomEndpoint());
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    Label1.Text = channel.Echo(TextBox1.Text);
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">}
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">private</span> EndpointAddress
GetRandomEndpoint() </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">{
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    var endpoints = RoleEnvironment.Roles["<span style="color: #8b0000">WorkerHost</span>"].Instances </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        .Select(i =&gt; i.InstanceEndpoints["<span style="color: #8b0000">EchoService</span>"]) </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        .ToArray();
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">    var r = <span style="color: #0000ff">new</span> Random(DateTime.Now.Millisecond); </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
          </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">
            <span style="color: #0000ff">return</span>
            <span style="color: #0000ff">new</span> EndpointAddress( </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">        String.Format(
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            "<span style="color: #8b0000">net.tcp://{0}/echo</span>", </pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            endpoints[r.Next(endpoints.Count() - 1)].IPEndpoint)
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">            );
</pre>
          <pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,'Courier New',courier,monospace; font-size: 12px">}</pre>
        </pre>
        <p>
The only bit of magic here was querying the fabric to determine all the endpoints
in the <strong>WorkerHost</strong> role that implemented the <strong>EchoService</strong> endpoint
and routing a request to one of them randomly.  You don't have to route requests
randomly per se, but I did this because internal endpoints are not load-balanced. 
I wanted to distribute the load evenly over each of my <strong>WorkerHost</strong> instances.
</p>
        <p>
One tip that I found out is that there is no need to cache the <strong>IPEndpoint</strong> information
you find.  It is already cached in the API call.  However, you may want
to cache your <strong>ChannelFactory</strong> according to <a href="http://blogs.msdn.com/b/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and-best-practices.aspx" target="_blank">best
practices</a> (unlike me).
</p>
        <h3>Hosting Public WCF Services
</h3>
        <p>
This is all pretty easy as well.  The only trick to this is that you need to
apply a new behavior that knows how to deal with the load balancer for proper MEX
endpoint generation.  Additionally, you need to include a class attribute on
your service to deal with an address filter mismatch issue.  This is pretty well
documented along with links to download the QFE that contains the behavior patch out
on the <a href="http://code.msdn.microsoft.com/wcfazure" target="_blank">WCF Azure
Samples</a> project on Code Gallery in <a href="http://code.msdn.microsoft.com/wcfazure/Wiki/View.aspx?title=KnownIssues&amp;referringTitle=Home" target="_blank">Known
Issues</a>. <a href="http://blogs.msdn.com/jnak" target="_blank">Jim Nakashima</a> actually <a href="http://blogs.msdn.com/b/jnak/archive/2010/05/27/wcf-on-windows-azure.aspx" target="_blank">posted
about this</a> the other day as well in detail on his blog as well, so I won't dig
into this again here.
</p>
        <p>
Lastly, if you just want the code from the show, <a href="http://cid-4225352e17899c6d.office.live.com/self.aspx/Public/CloudWCF.zip" target="_blank">have
at it</a>!
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=e9f56683-03b1-415a-8d3f-a9bd51e57238" />
      </body>
      <title>Hosting WCF in Windows Azure</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,e9f56683-03b1-415a-8d3f-a9bd51e57238.aspx</guid>
      <link>http://dunnry.com/blog/2010/05/28/HostingWCFInWindowsAzure.aspx</link>
      <pubDate>Fri, 28 May 2010 19:27:03 GMT</pubDate>
      <description>&lt;p&gt;
This post is a bit overdue:&amp;#160; &lt;a href="http://blog.smarx.com" target="_blank"&gt;Steve&lt;/a&gt; threatened
to blog it himself, so I figured I should get moving.&amp;#160; In one of our &lt;a href="http://channel9.msdn.com/shows/Cloud+Cover/" target="_blank"&gt;Cloud
Cover&lt;/a&gt; episodes, we covered how to host &lt;a href="http://channel9.msdn.com/shows/Cloud+Cover/Cloud-Cover-Episode-12-Hosting-WCF-and-Inter-role-Communication/" target="_blank"&gt;WCF
services in Windows Azure&lt;/a&gt;.&amp;#160; I showed how to host both publically accessible
ones as well as how to host internal WCF services that are only visible within a hosted
service.
&lt;/p&gt;
&lt;p&gt;
In order to host an internal WCF Service, you need to setup an internal endpoint and
use inter-role communication.&amp;#160; The difference between doing this and hosting
an external WCF service on an input endpoint is mainly in the fact that internal endpoints
are not load-balanced, while input endpoints are hooked to the load-balancer.
&lt;/p&gt;
&lt;h3&gt;Hosting an Internal WCF Service
&lt;/h3&gt;
&lt;p&gt;
Here you can see how simple it is to actually get the internal WCF service up and
listening.&amp;#160; Notice that the only thing that is different is that the base address
I pass to my &lt;strong&gt;ServiceHost&lt;/strong&gt; contains the internal endpoint I created.&amp;#160;
Since the port and IP address I am running on is not known until runtime, you have
to create the host and pass this information in dynamically.
&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,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&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;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #008000"&gt;//
Set the maximum number of concurrent connections &lt;/span&gt; &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    ServicePointManager.DefaultConnectionLimit = 12;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    DiagnosticMonitor.Start(&amp;quot;&lt;span style="color: #8b0000"&gt;DiagnosticsConnectionString&lt;/span&gt;&amp;quot;); &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #008000"&gt;//
For information on handling configuration changes&lt;/span&gt; &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #008000"&gt;//
see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.&lt;/span&gt; &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    RoleEnvironment.Changing += RoleEnvironmentChanging;
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    StartWCFService();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;.OnStart(); &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; StartWCFService() &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    var baseAddress = String.Format(
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        &amp;quot;&lt;span style="color: #8b0000"&gt;net.tcp://{0}&lt;/span&gt;&amp;quot;, &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[&amp;quot;&lt;span style="color: #8b0000"&gt;EchoService&lt;/span&gt;&amp;quot;].IPEndpoint &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        );
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    var host = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ServiceHost(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(EchoService), &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Uri(baseAddress)); &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    host.AddServiceEndpoint(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(IEchoService), &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NetTcpBinding(SecurityMode.None),
&amp;quot;&lt;span style="color: #8b0000"&gt;echo&lt;/span&gt;&amp;quot;); &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    host.Open();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;
&lt;h3&gt;Consuming the Internal WCF Service
&lt;/h3&gt;
&lt;p&gt;
From another role in my hosted service, I want to actually consume this service.&amp;#160;
From my code-behind, this was all the code I needed to actually call the service.
&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,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Button1_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender,
EventArgs e) &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    var factory = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; ChannelFactory&amp;lt;WorkerHost.IEchoService&amp;gt;(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; NetTcpBinding(SecurityMode.None)); &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    var channel = factory.CreateChannel(GetRandomEndpoint());
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    Label1.Text = channel.Echo(TextBox1.Text);
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; EndpointAddress
GetRandomEndpoint() &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;{
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    var endpoints = RoleEnvironment.Roles[&amp;quot;&lt;span style="color: #8b0000"&gt;WorkerHost&lt;/span&gt;&amp;quot;].Instances &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        .Select(i =&amp;gt; i.InstanceEndpoints[&amp;quot;&lt;span style="color: #8b0000"&gt;EchoService&lt;/span&gt;&amp;quot;]) &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        .ToArray();
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    var r = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Random(DateTime.Now.Millisecond); &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; EndpointAddress( &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;        String.Format(
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            &amp;quot;&lt;span style="color: #8b0000"&gt;net.tcp://{0}/echo&lt;/span&gt;&amp;quot;, &lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            endpoints[r.Next(endpoints.Count() - 1)].IPEndpoint)
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;            );
&lt;/pre&gt;&lt;pre style="background-color: #fbfbfb; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;}&lt;/pre&gt;&lt;/pre&gt;
&lt;p&gt;
The only bit of magic here was querying the fabric to determine all the endpoints
in the &lt;strong&gt;WorkerHost&lt;/strong&gt; role that implemented the &lt;strong&gt;EchoService&lt;/strong&gt; endpoint
and routing a request to one of them randomly.&amp;#160; You don't have to route requests
randomly per se, but I did this because internal endpoints are not load-balanced.&amp;#160;
I wanted to distribute the load evenly over each of my &lt;strong&gt;WorkerHost&lt;/strong&gt; instances.
&lt;/p&gt;
&lt;p&gt;
One tip that I found out is that there is no need to cache the &lt;strong&gt;IPEndpoint&lt;/strong&gt; information
you find.&amp;#160; It is already cached in the API call.&amp;#160; However, you may want
to cache your &lt;strong&gt;ChannelFactory&lt;/strong&gt; according to &lt;a href="http://blogs.msdn.com/b/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and-best-practices.aspx" target="_blank"&gt;best
practices&lt;/a&gt; (unlike me).
&lt;/p&gt;
&lt;h3&gt;Hosting Public WCF Services
&lt;/h3&gt;
&lt;p&gt;
This is all pretty easy as well.&amp;#160; The only trick to this is that you need to
apply a new behavior that knows how to deal with the load balancer for proper MEX
endpoint generation.&amp;#160; Additionally, you need to include a class attribute on
your service to deal with an address filter mismatch issue.&amp;#160; This is pretty well
documented along with links to download the QFE that contains the behavior patch out
on the &lt;a href="http://code.msdn.microsoft.com/wcfazure" target="_blank"&gt;WCF Azure
Samples&lt;/a&gt; project on Code Gallery in &lt;a href="http://code.msdn.microsoft.com/wcfazure/Wiki/View.aspx?title=KnownIssues&amp;amp;referringTitle=Home" target="_blank"&gt;Known
Issues&lt;/a&gt;. &lt;a href="http://blogs.msdn.com/jnak" target="_blank"&gt;Jim Nakashima&lt;/a&gt; actually &lt;a href="http://blogs.msdn.com/b/jnak/archive/2010/05/27/wcf-on-windows-azure.aspx" target="_blank"&gt;posted
about this&lt;/a&gt; the other day as well in detail on his blog as well, so I won't dig
into this again here.
&lt;/p&gt;
&lt;p&gt;
Lastly, if you just want the code from the show, &lt;a href="http://cid-4225352e17899c6d.office.live.com/self.aspx/Public/CloudWCF.zip" target="_blank"&gt;have
at it&lt;/a&gt;!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=e9f56683-03b1-415a-8d3f-a9bd51e57238" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,e9f56683-03b1-415a-8d3f-a9bd51e57238.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=351f9dc7-0c05-4202-8ef2-830491c36339</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,351f9dc7-0c05-4202-8ef2-830491c36339.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,351f9dc7-0c05-4202-8ef2-830491c36339.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=351f9dc7-0c05-4202-8ef2-830491c36339</wfw:commentRss>
      <slash:comments>5</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am happy to announce the public release of the <a href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=windowsazuremmc&amp;ReleaseId=4342">Windows
Azure MMC - May Release</a>.  It is a very significant upgrade to the previous
version on Code Gallery.  So much, in fact, I tend to unofficially call it v2
(it has been called the <strong>May Release</strong> on Code Gallery).  In addition
to all-new and faster storage browsing capabilities, we have added service management
as well as diagnostics support.  We have also rebuilt the tool from the ground
up to support extensibility.  You can replace or supplement our table viewers,
log viewers, and diagnostics tooling with your own creation.
</p>
        <p>
This update has been in the pipeline for a very long time.  It was actually finished
and ready to go in late January.  Given the amount of code however that we had
to invest to produce this tool, we had to go through a lengthy legal review and produce
a new EULA.  As such, you may notice that we are no longer offering the source
code in this release to the MMC snap-in itself.  Included in this release is
the source for the <a href="http://code.msdn.microsoft.com/azurecmdlets">WASM cmdlets</a>,
but not for the MMC or the default plugins.  In the future, we hope to be able
to release the source code in its entirety.
</p>
        <p>
 
</p>
        <h2>Features At A Glance:
</h2>
        <p>
 
</p>
        <table border="0" cellspacing="0" cellpadding="2" width="509">
          <tbody>
            <tr>
              <td valign="top" width="83" align="center">
                <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/hosted_services_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="hosted_services" border="0" alt="hosted_services" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/hosted_services_thumb.png" width="53" height="53" />
                </a>
              </td>
              <td valign="top" width="132">
                <strong>Hosted Services</strong>
              </td>
              <td valign="top" width="292">
Upload / configure / control / upgrade / swap / remove Windows Azure application deployments 
<br /></td>
            </tr>
            <tr>
              <td valign="top" width="87" align="center">
                <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/diagnostics_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="diagnostics" border="0" alt="diagnostics" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/diagnostics_thumb.png" width="39" height="40" />
                </a>
              </td>
              <td valign="top" width="133">
                <strong>Diagnostics</strong>
              </td>
              <td valign="top" width="289">
Configure instrumentation for Windows Azure applications (diagnostics) per source
(perf counters, file based, app logs, infrastructure logs, event logs).  
Transfer the diagnostic data on-demand or scheduled. 
<br /><br />
View / Analyze / Export to Excel and Clear instrumentation results. 
<br /><br /></td>
            </tr>
            <tr>
              <td valign="top" width="90" align="center">
                <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/certificates_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="certificates" border="0" alt="certificates" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/certificates_thumb.png" width="48" height="48" />
                </a>
              </td>
              <td valign="top" width="133">
                <strong>Certificates</strong>
              </td>
              <td valign="top" width="286">
Upload / manage certificates for Windows Azure applications</td>
            </tr>
            <tr>
              <td valign="top" width="92" align="center">
                <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/storage_services_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="storage_services" border="0" alt="storage_services" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/storage_services_thumb.png" width="48" height="48" />
                </a>
              </td>
              <td valign="top" width="132">
                <strong>Storage Services</strong>
              </td>
              <td valign="top" width="285">
Configure Storage Services for Windows Azure applications</td>
            </tr>
            <tr>
              <td valign="top" width="94" align="center">
                <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/blobs_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="blobs" border="0" alt="blobs" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/blobs_thumb.png" width="48" height="48" />
                </a>
              </td>
              <td valign="top" width="132">
                <strong>BLOBs and Containers</strong>
              </td>
              <td valign="top" width="284">
Add / Upload / Download / Remove BLOBs and Containers and connect to multiple storage
accounts 
<br /></td>
            </tr>
            <tr>
              <td valign="top" width="96" align="center">
                <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/queues_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="queues" border="0" alt="queues" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/queues_thumb.png" width="49" height="48" />
                </a>
              </td>
              <td valign="top" width="132">
                <strong>Queues</strong>
              </td>
              <td valign="top" width="282">
Add / Purge / Delete Windows Azure Queues</td>
            </tr>
            <tr>
              <td valign="top" width="97" align="center">
                <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/tables_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="tables" border="0" alt="tables" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/tables_thumb.png" width="48" height="48" />
                </a>
              </td>
              <td valign="top" width="132">
                <strong>Tables</strong>
              </td>
              <td valign="top" width="282">
Query and delete Windows Azure Tables</td>
            </tr>
            <tr>
              <td valign="top" width="98" align="center">
                <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/extensibility_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="extensibility" border="0" alt="extensibility" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/extensibility_thumb.png" width="49" height="48" />
                </a>
              </td>
              <td valign="top" width="131">
                <strong>Extensibility</strong>
              </td>
              <td valign="top" width="281">
Create plugins for rich diagnostics data visualization (e.g. add your own visualizer
for performance counters). Create plugins for table viewers and editors or add completely
new modules!  Plugin Engine uses MEF (extensibility framework) to easily add
functionality. 
<br /><br /></td>
            </tr>
            <tr>
              <td valign="top" width="99" align="center">
                <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/powershell_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="powershell" border="0" alt="powershell" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/powershell_thumb.png" width="67" height="50" />
                </a>
              </td>
              <td valign="top" width="131">
                <strong>PowerShell-based backend</strong>
              </td>
              <td valign="top" width="281">
The backend is based on PowerShell cmdlets. If you don't like our UI, you can still
use the underlying cmdlets and script out anything we do</td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <h2>How To Get Started:
</h2>
        <p>
There are so many features and updates in this release that I have prepared a very
quick <a href="http://dunnry.blob.core.windows.net/videos/WindowsAzureMMC.wmv?sr=b&amp;si=sc&amp;sig=Y%2BOq2niX87LxaM6%2FBbUthD%2FpcUPvyItzGByTPfAq00Q%3D">15-min
screencast</a> on the features and how to get started managing your services and diagnostics
in Windows Azure today!
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=351f9dc7-0c05-4202-8ef2-830491c36339" />
      </body>
      <title>Windows Azure MMC v2 Released</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,351f9dc7-0c05-4202-8ef2-830491c36339.aspx</guid>
      <link>http://dunnry.com/blog/2010/05/11/WindowsAzureMMCV2Released.aspx</link>
      <pubDate>Tue, 11 May 2010 00:04:25 GMT</pubDate>
      <description>&lt;p&gt;
I am happy to announce the public release of the &lt;a href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=windowsazuremmc&amp;amp;ReleaseId=4342"&gt;Windows
Azure MMC - May Release&lt;/a&gt;.&amp;#160; It is a very significant upgrade to the previous
version on Code Gallery.&amp;#160; So much, in fact, I tend to unofficially call it v2
(it has been called the &lt;strong&gt;May Release&lt;/strong&gt; on Code Gallery).&amp;#160; In addition
to all-new and faster storage browsing capabilities, we have added service management
as well as diagnostics support.&amp;#160; We have also rebuilt the tool from the ground
up to support extensibility.&amp;#160; You can replace or supplement our table viewers,
log viewers, and diagnostics tooling with your own creation.
&lt;/p&gt;
&lt;p&gt;
This update has been in the pipeline for a very long time.&amp;#160; It was actually finished
and ready to go in late January.&amp;#160; Given the amount of code however that we had
to invest to produce this tool, we had to go through a lengthy legal review and produce
a new EULA.&amp;#160; As such, you may notice that we are no longer offering the source
code in this release to the MMC snap-in itself.&amp;#160; Included in this release is
the source for the &lt;a href="http://code.msdn.microsoft.com/azurecmdlets"&gt;WASM cmdlets&lt;/a&gt;,
but not for the MMC or the default plugins.&amp;#160; In the future, we hope to be able
to release the source code in its entirety.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;h2&gt;Features At A Glance:
&lt;/h2&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="509"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="83" align="center"&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/hosted_services_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="hosted_services" border="0" alt="hosted_services" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/hosted_services_thumb.png" width="53" height="53" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="132"&gt;
&lt;strong&gt;Hosted Services&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="292"&gt;
Upload / configure / control / upgrade / swap / remove Windows Azure application deployments 
&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="87" align="center"&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/diagnostics_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="diagnostics" border="0" alt="diagnostics" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/diagnostics_thumb.png" width="39" height="40" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="133"&gt;
&lt;strong&gt;Diagnostics&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="289"&gt;
Configure instrumentation for Windows Azure applications (diagnostics) per source
(perf counters, file based, app logs, infrastructure logs, event logs).&amp;#160;&amp;#160;
Transfer the diagnostic data on-demand or scheduled. 
&lt;br /&gt;
&lt;br /&gt;
View / Analyze / Export to Excel and Clear instrumentation results. 
&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="90" align="center"&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/certificates_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="certificates" border="0" alt="certificates" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/certificates_thumb.png" width="48" height="48" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="133"&gt;
&lt;strong&gt;Certificates&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="286"&gt;
Upload / manage certificates for Windows Azure applications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="92" align="center"&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/storage_services_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="storage_services" border="0" alt="storage_services" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/storage_services_thumb.png" width="48" height="48" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="132"&gt;
&lt;strong&gt;Storage Services&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="285"&gt;
Configure Storage Services for Windows Azure applications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="94" align="center"&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/blobs_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="blobs" border="0" alt="blobs" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/blobs_thumb.png" width="48" height="48" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="132"&gt;
&lt;strong&gt;BLOBs and Containers&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="284"&gt;
Add / Upload / Download / Remove BLOBs and Containers and connect to multiple storage
accounts 
&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="96" align="center"&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/queues_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="queues" border="0" alt="queues" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/queues_thumb.png" width="49" height="48" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="132"&gt;
&lt;strong&gt;Queues&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="282"&gt;
Add / Purge / Delete Windows Azure Queues&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="97" align="center"&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/tables_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="tables" border="0" alt="tables" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/tables_thumb.png" width="48" height="48" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="132"&gt;
&lt;strong&gt;Tables&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="282"&gt;
Query and delete Windows Azure Tables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="98" align="center"&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/extensibility_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="extensibility" border="0" alt="extensibility" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/extensibility_thumb.png" width="49" height="48" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="131"&gt;
&lt;strong&gt;Extensibility&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="281"&gt;
Create plugins for rich diagnostics data visualization (e.g. add your own visualizer
for performance counters). Create plugins for table viewers and editors or add completely
new modules!&amp;#160; Plugin Engine uses MEF (extensibility framework) to easily add
functionality. 
&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="99" align="center"&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/powershell_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="powershell" border="0" alt="powershell" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMCv2Released_E950/powershell_thumb.png" width="67" height="50" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="131"&gt;
&lt;strong&gt;PowerShell-based backend&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="281"&gt;
The backend is based on PowerShell cmdlets. If you don't like our UI, you can still
use the underlying cmdlets and script out anything we do&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;h2&gt;How To Get Started:
&lt;/h2&gt;
&lt;p&gt;
There are so many features and updates in this release that I have prepared a very
quick &lt;a href="http://dunnry.blob.core.windows.net/videos/WindowsAzureMMC.wmv?sr=b&amp;amp;si=sc&amp;amp;sig=Y%2BOq2niX87LxaM6%2FBbUthD%2FpcUPvyItzGByTPfAq00Q%3D"&gt;15-min
screencast&lt;/a&gt; on the features and how to get started managing your services and diagnostics
in Windows Azure today!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=351f9dc7-0c05-4202-8ef2-830491c36339" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,351f9dc7-0c05-4202-8ef2-830491c36339.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Tools</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=23bdb6cd-41aa-474d-b5ef-2e2fa586c0b1</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,23bdb6cd-41aa-474d-b5ef-2e2fa586c0b1.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,23bdb6cd-41aa-474d-b5ef-2e2fa586c0b1.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=23bdb6cd-41aa-474d-b5ef-2e2fa586c0b1</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have been largely offline for the last 3 weeks because I have been on parental leave
(<a href="http://dunnry.com/blog/FirstDayOfParentalLeave.aspx" target="_blank">again</a>). 
I was lucky enough to have another baby girl last December right around Christmas. 
Working for Microsoft, this means that within the first year, you can take 4 weeks
off to be at home with your new baby.  It is a terrific benefit.  Hence,
for the last 3 weeks I have been largely caring for my youngest alone while her older
sister is at daycare.  What a unique bonding experience - it is something that
has been wonderful.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LastweekofParentalLeave_B3C1/Priya_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Priya" border="0" alt="Priya" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LastweekofParentalLeave_B3C1/Priya_thumb.jpg" width="504" height="379" />
          </a>  
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LastweekofParentalLeave_B3C1/Sisters_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Sisters" border="0" alt="Sisters" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LastweekofParentalLeave_B3C1/Sisters_thumb.jpg" width="504" height="379" />
          </a>
        </p>
        <p>
Anyhow, I will be back to work next week and I know that I will miss my time here. 
It has gone by far too fast.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=23bdb6cd-41aa-474d-b5ef-2e2fa586c0b1" />
      </body>
      <title>Last Week of Parental Leave</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,23bdb6cd-41aa-474d-b5ef-2e2fa586c0b1.aspx</guid>
      <link>http://dunnry.com/blog/2010/04/21/LastWeekOfParentalLeave.aspx</link>
      <pubDate>Wed, 21 Apr 2010 20:02:23 GMT</pubDate>
      <description>&lt;p&gt;
I have been largely offline for the last 3 weeks because I have been on parental leave
(&lt;a href="http://dunnry.com/blog/FirstDayOfParentalLeave.aspx" target="_blank"&gt;again&lt;/a&gt;).&amp;#160;
I was lucky enough to have another baby girl last December right around Christmas.&amp;#160;
Working for Microsoft, this means that within the first year, you can take 4 weeks
off to be at home with your new baby.&amp;#160; It is a terrific benefit.&amp;#160; Hence,
for the last 3 weeks I have been largely caring for my youngest alone while her older
sister is at daycare.&amp;#160; What a unique bonding experience - it is something that
has been wonderful.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LastweekofParentalLeave_B3C1/Priya_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Priya" border="0" alt="Priya" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LastweekofParentalLeave_B3C1/Priya_thumb.jpg" width="504" height="379" /&gt;&lt;/a&gt;&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LastweekofParentalLeave_B3C1/Sisters_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Sisters" border="0" alt="Sisters" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LastweekofParentalLeave_B3C1/Sisters_thumb.jpg" width="504" height="379" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Anyhow, I will be back to work next week and I know that I will miss my time here.&amp;#160;
It has gone by far too fast.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=23bdb6cd-41aa-474d-b5ef-2e2fa586c0b1" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,23bdb6cd-41aa-474d-b5ef-2e2fa586c0b1.aspx</comments>
      <category>Personal</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=6354edb9-a6ac-40ab-900a-e1e95f9afe0d</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,6354edb9-a6ac-40ab-900a-e1e95f9afe0d.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,6354edb9-a6ac-40ab-900a-e1e95f9afe0d.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6354edb9-a6ac-40ab-900a-e1e95f9afe0d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In Episode 3 of <a href="http://channel9.msdn.com/shows/Cloud+Cover">Cloud Cover</a>,
I mentioned the tip of the week was how to measure your database size in SQL Azure. 
Here is the exact queries you can run to do it:
</p>
        <code>
          <p>
select 
<br />
      sum(reserved_page_count) * 8.0 / 1024 
<br />
from 
<br />
      sys.dm_db_partition_stats 
<br />
GO 
</p>
          <p>
select 
<br />
      sys.objects.name, sum(reserved_page_count) * 8.0 /
1024 
<br />
from 
<br />
      sys.dm_db_partition_stats, sys.objects 
<br />
where 
<br />
      sys.dm_db_partition_stats.object_id = sys.objects.object_id 
</p>
          <p>
group by sys.objects.name
</p>
        </code>
        <p>
The first one will give you the size of your database in MB and the second one will
do the same, but break it out for each object in your database.
</p>
        <p>
Hat tip to David Robinson and Tony Petrossian on the <a href="http://blogs.msdn.com/sqlazure">SQL
Azure team</a> for the query.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=6354edb9-a6ac-40ab-900a-e1e95f9afe0d" />
      </body>
      <title>Calculating the Size of Your SQL Azure Database</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,6354edb9-a6ac-40ab-900a-e1e95f9afe0d.aspx</guid>
      <link>http://dunnry.com/blog/2010/03/05/CalculatingTheSizeOfYourSQLAzureDatabase.aspx</link>
      <pubDate>Fri, 05 Mar 2010 06:05:13 GMT</pubDate>
      <description>&lt;p&gt;
In Episode 3 of &lt;a href="http://channel9.msdn.com/shows/Cloud+Cover"&gt;Cloud Cover&lt;/a&gt;,
I mentioned the tip of the week was how to measure your database size in SQL Azure.&amp;#160;
Here is the exact queries you can run to do it:
&lt;/p&gt;
&lt;code&gt; 
&lt;p&gt;
select 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sum(reserved_page_count) * 8.0 / 1024 
&lt;br /&gt;
from 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sys.dm_db_partition_stats 
&lt;br /&gt;
GO 
&lt;/p&gt;
&lt;p&gt;
select 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sys.objects.name, sum(reserved_page_count) * 8.0 /
1024 
&lt;br /&gt;
from 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sys.dm_db_partition_stats, sys.objects 
&lt;br /&gt;
where 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; sys.dm_db_partition_stats.object_id = sys.objects.object_id 
&lt;/p&gt;
&lt;p&gt;
group by sys.objects.name
&lt;/p&gt;
&lt;/code&gt; 
&lt;p&gt;
The first one will give you the size of your database in MB and the second one will
do the same, but break it out for each object in your database.
&lt;/p&gt;
&lt;p&gt;
Hat tip to David Robinson and Tony Petrossian on the &lt;a href="http://blogs.msdn.com/sqlazure"&gt;SQL
Azure team&lt;/a&gt; for the query.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=6354edb9-a6ac-40ab-900a-e1e95f9afe0d" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,6354edb9-a6ac-40ab-900a-e1e95f9afe0d.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=094d1cbc-596a-4750-b019-4c8d119f7a9a</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,094d1cbc-596a-4750-b019-4c8d119f7a9a.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,094d1cbc-596a-4750-b019-4c8d119f7a9a.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=094d1cbc-596a-4750-b019-4c8d119f7a9a</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WASMCmdletsUpdated_CA71/image_2.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/WASMCmdletsUpdated_CA71/image_thumb.png" width="442" height="71" />
          </a>
        </p>
        <p>
I am happy to announce the updated release of the <a href="http://code.msdn.microsoft.com/azurecmdlets">Windows
Azure Service Management (WASM) Cmdlets</a> for PowerShell today. With these cmdlets
you can effectively automate and manage all your services in Windows Azure. Specifically,
</p>
        <ul>
          <li>
            <b>Deploy new Hosted Services</b>
            <ul>
              <li>
Automatically upload your packages from the file system to blob storage. 
</li>
            </ul>
          </li>
          <li>
            <b>Upgrade your services</b>
            <ul>
              <li>
Choose between automatic or manual rolling upgrades 
</li>
              <li>
Swap between staging and production environments 
</li>
            </ul>
          </li>
          <li>
            <b>Remove your Hosted Services</b>
            <ul>
              <li>
Automatically pull down your services at the end of the day to stop billing. This
is a critical need for test and development environments. 
</li>
            </ul>
          </li>
          <li>
            <b>Manage your Storage accounts</b>
            <ul>
              <li>
Retrieve or regenerate your storage keys 
</li>
            </ul>
          </li>
          <li>
            <b>Manage your Certificates</b>
            <ul>
              <li>
Deploy certificates from your Windows store or the local filesystem 
</li>
            </ul>
          </li>
          <li>
            <b>Configure your Diagnostics</b>
            <ul>
              <li>
Remotely configure the event sources you wish to monitor (Event Logs, Tracing, IIS
Logs, Performance Counters and more) 
</li>
            </ul>
          </li>
          <li>
            <b>Transfer your Diagnostics Information</b>
            <ul>
              <li>
Schedule your transfers or Transfer on Demand. 
</li>
            </ul>
          </li>
        </ul>
        <p>
          <a href="http://code.msdn.microsoft.com/azurecmdlets">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WASMCmdletsUpdated_CA71/clip_image003_aef5844e-d413-41d9-b9b3-9100aa503c86.jpg" width="500" height="310" />
          </a>
        </p>
        <p>
          <b>Why did we build this?</b>
        </p>
        <p>
The WASM cmdlets were built to unblock adoption for many of our customers as well
as serve as a common underpinning to our labs and internal tooling. There was an immediate
demand for an automation API that would fit into the standard toolset for IT Pros.
Given the adoption and penetration of PowerShell, we determined that cmdlets focused
on this core audience would be the most effective way forward. Furthermore, since
PowerShell is a full scripting language with complete access to .NET, this allows
these cmdlets to be used as the basis for very complicated deployment and automation
scripts as part of the application lifecycle.
</p>
        <p>
          <b>How can you use them?</b>
        </p>
        <p>
Every call to the Service Management API requires an X509 certificate and the subscription
ID for the account. To get started, you need to upload a valid certificate to the
portal and have it installed locally to your workstation. If you are unfamiliar with
how to do this, you can follow the procedure outlined on the Windows Azure Channel9
Learning Center <a href="http://channel9.msdn.com/learn/courses/Azure/Deployment/DeployingApplicationsinWindowsAzure/Exercise-2-Using-PowerShell-to-Manage-Windows-Azure-Applications/">here</a>.
</p>
        <p>
Here are a few examples of how to use the cmdlets for a variety of common tasks:
</p>
        <p>
          <b>Common Setup</b>
        </p>
        <p>
Each script referenced below will refer to the following variables:
</p>
        <code>
          <p>
Add-PSSnapin AzureManagementToolsSnapIn
</p>
          <p>
#get your local certificate for authentication
</p>
          <p>
$cert = Get-Item cert:\CurrentUser\My\&lt;YourThumbPrint&gt;
</p>
          <p>
#subID from portal
</p>
          <p>
$sub = 'c9f9b345-7ff5-4eba-9d58-0cea5793050c'
</p>
          <p>
#your service name (without .cloudapp.net)
</p>
          <p>
$service = 'yourservice'
</p>
          <p>
#path to package (can also be http: address in blob storage)
</p>
          <p>
$package = "D:\deploy\MyPackage.cspkg"
</p>
          <p>
#configuration file
</p>
          <p>
$config = "D:\deploy\ServiceConfiguration.cscfg"
</p>
        </code>
        <p>
 
</p>
        <p>
          <strong>Listing My Hosted Services</strong>
        </p>
        <code>
          <p>
Get-HostedServices -SubscriptionId $sub -Certificate $cert
</p>
        </code>
        <p>
 
</p>
        <p>
          <strong>View Production Service Status</strong>
        </p>
        <code>
          <p>
Get-HostedService $service -SubscriptionId $sub -Certificate $cert | 
</p>
          <p>
Get-Deployment 'Production' | 
</p>
          <p>
select RoleInstanceList -ExpandProperty RoleInstanceList | 
</p>
          <p>
ft InstanceName, InstanceStatus -GroupBy RoleName
</p>
        </code>
        <p>
 
</p>
        <p>
          <strong>Creating a new deployment</strong>
        </p>
        <code>
          <p>
#Create a new Deployment
</p>
          <p>
Get-HostedService $service -SubscriptionId $sub -Certificate $cert |
</p>
          <p>
New-Deployment -Slot Production -Package $package -Configuration $config -Label 'v1'
|
</p>
          <p>
Get-OperationStatus -WaitToComplete
</p>
          <p>
#Set the service to 'Running'
</p>
          <p>
Get-HostedService $service -SubscriptionId $sub -Certificate $cert |
</p>
          <p>
Get-Deployment 'Production'|
</p>
          <p>
Set-DeploymentStatus 'Running' |
</p>
          <p>
Get-OperationStatus -WaitToComplete
</p>
        </code>
        <p>
 
</p>
        <p>
          <strong>Removing a deployment</strong>
        </p>
        <code>
          <p>
#Ensure that the service is first in Suspended mode
</p>
          <p>
Get-HostedService $service -SubscriptionId $sub -Certificate $cert |
</p>
          <p>
Get-Deployment 'Production'|
</p>
          <p>
Set-DeploymentStatus 'Suspended' |
</p>
          <p>
Get-OperationStatus -WaitToComplete |
</p>
          <p>
#Remove the deployment
</p>
          <p>
Get-HostedService $service -SubscriptionId $sub -Certificate $cert |
</p>
          <p>
Get-Deployment 'Production'|
</p>
          <p>
Remove-Deployment
</p>
        </code>
        <p>
 
</p>
        <p>
          <strong>Upgrading a single Role</strong>
        </p>
        <code>
          <p>
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub |
</p>
          <p>
Get-Deployment -Slot Production | 
</p>
          <p>
Set-Deployment -mode Auto -roleName 'WebRole1' -package $package -label 'v1.2' |
</p>
          <p>
Get-OperationStatus -WaitToComplete
</p>
          <p>
 
</p>
          <p>
            <strong>Adding a local certificate</strong>
          </p>
          <p>
$deploycert = Get-Item cert:\CurrentUser\My\CBF145B628EA06685419AEDBB1EEE78805B135A2
</p>
          <p>
Get-HostedService $service -SubscriptionId $sub -Certificate $cert |
</p>
          <p>
Add-Certificate -CertificateToDeploy $deploycert |
</p>
          <p>
Get-OperationStatus -WaitToComplete
</p>
        </code>
        <p>
 
</p>
        <p>
          <strong>Configuring Diagnostics - Adding a Performance Counter to All Running Instances</strong>
        </p>
        <code>
          <p>
#get storage account name and key
</p>
          <p>
$storage = "yourstorageaccount"
</p>
          <p>
$key = (Get-StorageKeys -ServiceName $storage -Certificate $cert `
</p>
          <p>
    -SubscriptionId $sub).Primary
</p>
          <p>
 
</p>
          <p>
$deployId = (Get-HostedService $service -SubscriptionId $sub `
</p>
          <p>
    -Certificate $cert | Get-Deployment Production).DeploymentId
</p>
          <p>
 
</p>
          <p>
$counter = '\Processor\(_Total)\% Processor Time'
</p>
          <p>
$rate = [TimeSpan]::FromSeconds(5)
</p>
          <p>
 
</p>
          <p>
Get-DiagnosticAwareRoles -StorageAccountName $storage -StorageAccountKey $key `
</p>
          <p>
-DeploymentId $deployId |
</p>
          <p>
foreach {
</p>
          <p>
    $role = $_
</p>
          <p>
    Get-DiagnosticAwareRoleInstances $role -DeploymentId $deployId
`
</p>
          <p>
    -StorageAccountName $storage -StorageAccountKey $key |
</p>
          <p>
    foreach {
</p>
          <p>
        $instance = $_
</p>
          <p>
        $config = Get-DiagnosticConfiguration -RoleName
$role -InstanceId $_ `
</p>
          <p>
            -StorageAccountName
$storage -StorageAccountKey $key `
</p>
          <p>
            -BufferName PerformanceCounters
-DeploymentId $deployId 
</p>
          <p>
        $perf = New-Object Microsoft.WindowsAzure.Diagnostics.PerformanceCounterConfiguration
`
</p>
          <p>
            -Property @{CounterSpecifier=$counter;
SampleRate=$rate}
</p>
          <p>
        $config.DataSources.Add($perf)
</p>
          <p>
        $config.DataSources | 
</p>
          <p>
         foreach { 
</p>
          <p>
             Set-PerformanceCounter
-PerformanceCounters $_ -RoleName $role `
</p>
          <p>
             -InstanceId
$instance -DeploymentId $deployId -StorageAccountName $storage `
</p>
          <p>
             -StorageAccountKey
$key
</p>
          <p>
         }
</p>
          <p>
    }    
</p>
          <p>
}
</p>
        </code>
        <p>
        </p>
        <p>
          <b>More Examples</b>
        </p>
        <p>
You can find more examples and documentation on these cmdlets by typing <b><i>'Get-Help
&lt;cmdlet&gt; -full'</i></b> from the PowerShell cmd prompt.
</p>
        <p>
If you have any questions for feedback, please send it directly to me through the
blog (look at right hand navigation pane for Contact Ryan link).
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=094d1cbc-596a-4750-b019-4c8d119f7a9a" />
      </body>
      <title>WASM Cmdlets Updated</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,094d1cbc-596a-4750-b019-4c8d119f7a9a.aspx</guid>
      <link>http://dunnry.com/blog/2010/02/17/WASMCmdletsUpdated.aspx</link>
      <pubDate>Wed, 17 Feb 2010 22:30:45 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WASMCmdletsUpdated_CA71/image_2.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://dunnry.com/blog/content/binary/WindowsLiveWriter/WASMCmdletsUpdated_CA71/image_thumb.png" width="442" height="71" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I am happy to announce the updated release of the &lt;a href="http://code.msdn.microsoft.com/azurecmdlets"&gt;Windows
Azure Service Management (WASM) Cmdlets&lt;/a&gt; for PowerShell today. With these cmdlets
you can effectively automate and manage all your services in Windows Azure. Specifically,
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Deploy new Hosted Services&lt;/b&gt; 
&lt;ul&gt;
&lt;li&gt;
Automatically upload your packages from the file system to blob storage. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Upgrade your services&lt;/b&gt; 
&lt;ul&gt;
&lt;li&gt;
Choose between automatic or manual rolling upgrades 
&lt;/li&gt;
&lt;li&gt;
Swap between staging and production environments 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Remove your Hosted Services&lt;/b&gt; 
&lt;ul&gt;
&lt;li&gt;
Automatically pull down your services at the end of the day to stop billing. This
is a critical need for test and development environments. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Manage your Storage accounts&lt;/b&gt; 
&lt;ul&gt;
&lt;li&gt;
Retrieve or regenerate your storage keys 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Manage your Certificates&lt;/b&gt; 
&lt;ul&gt;
&lt;li&gt;
Deploy certificates from your Windows store or the local filesystem 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Configure your Diagnostics&lt;/b&gt; 
&lt;ul&gt;
&lt;li&gt;
Remotely configure the event sources you wish to monitor (Event Logs, Tracing, IIS
Logs, Performance Counters and more) 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Transfer your Diagnostics Information&lt;/b&gt; 
&lt;ul&gt;
&lt;li&gt;
Schedule your transfers or Transfer on Demand. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://code.msdn.microsoft.com/azurecmdlets"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WASMCmdletsUpdated_CA71/clip_image003_aef5844e-d413-41d9-b9b3-9100aa503c86.jpg" width="500" height="310" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Why did we build this?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The WASM cmdlets were built to unblock adoption for many of our customers as well
as serve as a common underpinning to our labs and internal tooling. There was an immediate
demand for an automation API that would fit into the standard toolset for IT Pros.
Given the adoption and penetration of PowerShell, we determined that cmdlets focused
on this core audience would be the most effective way forward. Furthermore, since
PowerShell is a full scripting language with complete access to .NET, this allows
these cmdlets to be used as the basis for very complicated deployment and automation
scripts as part of the application lifecycle.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;How can you use them?&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Every call to the Service Management API requires an X509 certificate and the subscription
ID for the account. To get started, you need to upload a valid certificate to the
portal and have it installed locally to your workstation. If you are unfamiliar with
how to do this, you can follow the procedure outlined on the Windows Azure Channel9
Learning Center &lt;a href="http://channel9.msdn.com/learn/courses/Azure/Deployment/DeployingApplicationsinWindowsAzure/Exercise-2-Using-PowerShell-to-Manage-Windows-Azure-Applications/"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Here are a few examples of how to use the cmdlets for a variety of common tasks:
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Common Setup&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Each script referenced below will refer to the following variables:
&lt;/p&gt;
&lt;code&gt; 
&lt;p&gt;
Add-PSSnapin AzureManagementToolsSnapIn
&lt;/p&gt;
&lt;p&gt;
#get your local certificate for authentication
&lt;/p&gt;
&lt;p&gt;
$cert = Get-Item cert:\CurrentUser\My\&amp;lt;YourThumbPrint&amp;gt;
&lt;/p&gt;
&lt;p&gt;
#subID from portal
&lt;/p&gt;
&lt;p&gt;
$sub = 'c9f9b345-7ff5-4eba-9d58-0cea5793050c'
&lt;/p&gt;
&lt;p&gt;
#your service name (without .cloudapp.net)
&lt;/p&gt;
&lt;p&gt;
$service = 'yourservice'
&lt;/p&gt;
&lt;p&gt;
#path to package (can also be http: address in blob storage)
&lt;/p&gt;
&lt;p&gt;
$package = "D:\deploy\MyPackage.cspkg"
&lt;/p&gt;
&lt;p&gt;
#configuration file
&lt;/p&gt;
&lt;p&gt;
$config = "D:\deploy\ServiceConfiguration.cscfg"
&lt;/p&gt;
&lt;/code&gt; 
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Listing My Hosted Services&lt;/strong&gt;
&lt;/p&gt;
&lt;code&gt; 
&lt;p&gt;
Get-HostedServices -SubscriptionId $sub -Certificate $cert
&lt;/p&gt;
&lt;/code&gt; 
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;View Production Service Status&lt;/strong&gt;
&lt;/p&gt;
&lt;code&gt; 
&lt;p&gt;
Get-HostedService $service -SubscriptionId $sub -Certificate $cert | 
&lt;/p&gt;
&lt;p&gt;
Get-Deployment 'Production' | 
&lt;/p&gt;
&lt;p&gt;
select RoleInstanceList -ExpandProperty RoleInstanceList | 
&lt;/p&gt;
&lt;p&gt;
ft InstanceName, InstanceStatus -GroupBy RoleName
&lt;/p&gt;
&lt;/code&gt; 
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Creating a new deployment&lt;/strong&gt;
&lt;/p&gt;
&lt;code&gt; 
&lt;p&gt;
#Create a new Deployment
&lt;/p&gt;
&lt;p&gt;
Get-HostedService $service -SubscriptionId $sub -Certificate $cert |
&lt;/p&gt;
&lt;p&gt;
New-Deployment -Slot Production -Package $package -Configuration $config -Label 'v1'
|
&lt;/p&gt;
&lt;p&gt;
Get-OperationStatus -WaitToComplete
&lt;/p&gt;
&lt;p&gt;
#Set the service to 'Running'
&lt;/p&gt;
&lt;p&gt;
Get-HostedService $service -SubscriptionId $sub -Certificate $cert |
&lt;/p&gt;
&lt;p&gt;
Get-Deployment 'Production'|
&lt;/p&gt;
&lt;p&gt;
Set-DeploymentStatus 'Running' |
&lt;/p&gt;
&lt;p&gt;
Get-OperationStatus -WaitToComplete
&lt;/p&gt;
&lt;/code&gt; 
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Removing a deployment&lt;/strong&gt;
&lt;/p&gt;
&lt;code&gt; 
&lt;p&gt;
#Ensure that the service is first in Suspended mode
&lt;/p&gt;
&lt;p&gt;
Get-HostedService $service -SubscriptionId $sub -Certificate $cert |
&lt;/p&gt;
&lt;p&gt;
Get-Deployment 'Production'|
&lt;/p&gt;
&lt;p&gt;
Set-DeploymentStatus 'Suspended' |
&lt;/p&gt;
&lt;p&gt;
Get-OperationStatus -WaitToComplete |
&lt;/p&gt;
&lt;p&gt;
#Remove the deployment
&lt;/p&gt;
&lt;p&gt;
Get-HostedService $service -SubscriptionId $sub -Certificate $cert |
&lt;/p&gt;
&lt;p&gt;
Get-Deployment 'Production'|
&lt;/p&gt;
&lt;p&gt;
Remove-Deployment
&lt;/p&gt;
&lt;/code&gt; 
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Upgrading a single Role&lt;/strong&gt;
&lt;/p&gt;
&lt;code&gt; 
&lt;p&gt;
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub |
&lt;/p&gt;
&lt;p&gt;
Get-Deployment -Slot Production | 
&lt;/p&gt;
&lt;p&gt;
Set-Deployment -mode Auto -roleName 'WebRole1' -package $package -label 'v1.2' |
&lt;/p&gt;
&lt;p&gt;
Get-OperationStatus -WaitToComplete
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Adding a local certificate&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
$deploycert = Get-Item cert:\CurrentUser\My\CBF145B628EA06685419AEDBB1EEE78805B135A2
&lt;/p&gt;
&lt;p&gt;
Get-HostedService $service -SubscriptionId $sub -Certificate $cert |
&lt;/p&gt;
&lt;p&gt;
Add-Certificate -CertificateToDeploy $deploycert |
&lt;/p&gt;
&lt;p&gt;
Get-OperationStatus -WaitToComplete
&lt;/p&gt;
&lt;/code&gt; 
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Configuring Diagnostics - Adding a Performance Counter to All Running Instances&lt;/strong&gt;
&lt;/p&gt;
&lt;code&gt; 
&lt;p&gt;
#get storage account name and key
&lt;/p&gt;
&lt;p&gt;
$storage = &amp;quot;yourstorageaccount&amp;quot;
&lt;/p&gt;
&lt;p&gt;
$key = (Get-StorageKeys -ServiceName $storage -Certificate $cert `
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160; -SubscriptionId $sub).Primary
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
$deployId = (Get-HostedService $service -SubscriptionId $sub `
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160; -Certificate $cert | Get-Deployment Production).DeploymentId
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
$counter = '\Processor\(_Total)\% Processor Time'
&lt;/p&gt;
&lt;p&gt;
$rate = [TimeSpan]::FromSeconds(5)
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Get-DiagnosticAwareRoles -StorageAccountName $storage -StorageAccountKey $key `
&lt;/p&gt;
&lt;p&gt;
-DeploymentId $deployId |
&lt;/p&gt;
&lt;p&gt;
foreach {
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160; $role = $_
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160; Get-DiagnosticAwareRoleInstances $role -DeploymentId $deployId
`
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160; -StorageAccountName $storage -StorageAccountKey $key |
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160; foreach {
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $instance = $_
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $config = Get-DiagnosticConfiguration -RoleName
$role -InstanceId $_ `
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -StorageAccountName
$storage -StorageAccountKey $key `
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -BufferName PerformanceCounters
-DeploymentId $deployId 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $perf = New-Object Microsoft.WindowsAzure.Diagnostics.PerformanceCounterConfiguration
`
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -Property @{CounterSpecifier=$counter;
SampleRate=$rate}
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $config.DataSources.Add($perf)
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $config.DataSources | 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; foreach { 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Set-PerformanceCounter
-PerformanceCounters $_ -RoleName $role `
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -InstanceId
$instance -DeploymentId $deployId -StorageAccountName $storage `
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -StorageAccountKey
$key
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
}
&lt;/p&gt;
&lt;/code&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;More Examples&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
You can find more examples and documentation on these cmdlets by typing &lt;b&gt;&lt;i&gt;'Get-Help
&amp;lt;cmdlet&amp;gt; -full'&lt;/i&gt;&lt;/b&gt; from the PowerShell cmd prompt.
&lt;/p&gt;
&lt;p&gt;
If you have any questions for feedback, please send it directly to me through the
blog (look at right hand navigation pane for Contact Ryan link).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=094d1cbc-596a-4750-b019-4c8d119f7a9a" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,094d1cbc-596a-4750-b019-4c8d119f7a9a.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>PowerShell</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=ce3359de-0aa7-4997-b380-6cd98bd3af71</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,ce3359de-0aa7-4997-b380-6cd98bd3af71.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,ce3359de-0aa7-4997-b380-6cd98bd3af71.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ce3359de-0aa7-4997-b380-6cd98bd3af71</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Occasionally, I will check online to see the reviews for our book.  It is now
almost 4 years old and a bit outdated with respect to the changes that came with .NET
3.5.  The website and <a href="http://directoryprogramming.net/">forums</a> however
has been trucking along (thanks Joe!) these years.  We never sold a ton of books
about this particular niche topic, but for the audience size, it wasn't too shabby. 
Joe and I are not about to retire on our royalties, however.
</p>
        <p>
I was a bit surprised to see this online however at Amazon:
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/TheCollectibleEditionofOurBook_C54E/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/TheCollectibleEditionofOurBook_C54E/image_thumb.png" width="504" height="123" />
          </a>
        </p>
        <p>
Now, it is a bit silly for two reasons, a.) our book as a collectible, really? 
Who would actually collect it?  and b.) It says it was signed by both authors. 
Now, there is a slight chance it is authentic as I think Joe and I signed maybe 2
books together ever.  However, the odds of it being authentic are exceedingly
slim.  Who knows. it's funny regardless.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=ce3359de-0aa7-4997-b380-6cd98bd3af71" />
      </body>
      <title>The Collectible Edition of Our Book</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,ce3359de-0aa7-4997-b380-6cd98bd3af71.aspx</guid>
      <link>http://dunnry.com/blog/2010/02/17/TheCollectibleEditionOfOurBook.aspx</link>
      <pubDate>Wed, 17 Feb 2010 22:01:54 GMT</pubDate>
      <description>&lt;p&gt;
Occasionally, I will check online to see the reviews for our book.&amp;#160; It is now
almost 4 years old and a bit outdated with respect to the changes that came with .NET
3.5.&amp;#160; The website and &lt;a href="http://directoryprogramming.net/"&gt;forums&lt;/a&gt; however
has been trucking along (thanks Joe!) these years.&amp;#160; We never sold a ton of books
about this particular niche topic, but for the audience size, it wasn't too shabby.&amp;#160;
Joe and I are not about to retire on our royalties, however.
&lt;/p&gt;
&lt;p&gt;
I was a bit surprised to see this online however at Amazon:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/TheCollectibleEditionofOurBook_C54E/image_2.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://dunnry.com/blog/content/binary/WindowsLiveWriter/TheCollectibleEditionofOurBook_C54E/image_thumb.png" width="504" height="123" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Now, it is a bit silly for two reasons, a.) our book as a collectible, really?&amp;#160;
Who would actually collect it?&amp;#160; and b.) It says it was signed by both authors.&amp;#160;
Now, there is a slight chance it is authentic as I think Joe and I signed maybe 2
books together ever.&amp;#160; However, the odds of it being authentic are exceedingly
slim.&amp;#160; Who knows. it's funny regardless.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=ce3359de-0aa7-4997-b380-6cd98bd3af71" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,ce3359de-0aa7-4997-b380-6cd98bd3af71.aspx</comments>
      <category>Active Directory</category>
      <category>Book</category>
      <category>LDAP</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=0ed4eb7d-01da-4862-a6ae-ab02247f330f</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,0ed4eb7d-01da-4862-a6ae-ab02247f330f.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,0ed4eb7d-01da-4862-a6ae-ab02247f330f.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0ed4eb7d-01da-4862-a6ae-ab02247f330f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
One of my most popular posts to this day is <a href="http://dunnry.com/blog/InstallingADAMOnVista.aspx">the
hack to install ADAM</a> (now called AD LDS) on Vista.  It is the source of numerous
emails as well.  So today, I am happy to say that AD LDS (aka ADAM) is available
for Windows 7 officially - no hacks needed.
</p>
        <p>
          <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=a45059af-47a8-4c96-afe3-93dab7b5b658">Download
it here</a>
        </p>
        <p>
Now, I fully realize this doesn't help those that are using Vista today, but there
are quite a few folks that are using Windows 7 or upgrading from Vista or XP to 7. 
LDAP directories are fabulous tools and AD LDS is a great one.  Enjoy.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=0ed4eb7d-01da-4862-a6ae-ab02247f330f" />
      </body>
      <title>ADAM on Windows 7</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,0ed4eb7d-01da-4862-a6ae-ab02247f330f.aspx</guid>
      <link>http://dunnry.com/blog/2010/02/17/ADAMOnWindows7.aspx</link>
      <pubDate>Wed, 17 Feb 2010 21:29:07 GMT</pubDate>
      <description>&lt;p&gt;
One of my most popular posts to this day is &lt;a href="http://dunnry.com/blog/InstallingADAMOnVista.aspx"&gt;the
hack to install ADAM&lt;/a&gt; (now called AD LDS) on Vista.&amp;#160; It is the source of numerous
emails as well.&amp;#160; So today, I am happy to say that AD LDS (aka ADAM) is available
for Windows 7 officially - no hacks needed.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=a45059af-47a8-4c96-afe3-93dab7b5b658"&gt;Download
it here&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Now, I fully realize this doesn't help those that are using Vista today, but there
are quite a few folks that are using Windows 7 or upgrading from Vista or XP to 7.&amp;#160;
LDAP directories are fabulous tools and AD LDS is a great one.&amp;#160; Enjoy.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=0ed4eb7d-01da-4862-a6ae-ab02247f330f" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,0ed4eb7d-01da-4862-a6ae-ab02247f330f.aspx</comments>
      <category>Active Directory</category>
      <category>ADAM</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=40dc15bd-7fda-4229-8230-3e0833303aa6</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,40dc15bd-7fda-4229-8230-3e0833303aa6.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,40dc15bd-7fda-4229-8230-3e0833303aa6.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=40dc15bd-7fda-4229-8230-3e0833303aa6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Windows Azure storage makes use of a symmetric key authentication system.  Essentially,
we take a 256-bit key and sign each HTTP request to the storage subsystem.  In
order to access storage, you have to prove you know the key.  What this means
of course is that you need to protect that key well.  It is an all-or-nothing
scenario, if you have the key, you can do anything.  If you don't possess the
key, you can do nothing*.
</p>
        <p>
The natural question for most folks when they understand this model is, how can I
grant access to someone without compromising my master key?  The solution turns
out to be something called Shared Access Signatures (SAS) for Windows Azure. 
SAS works by specifying a few query string parameters, canonicalizing those parameters,
hashing them and signing the hash in the query string.  This creates a unique
URL that embeds not only the required access, but the proof that it was created by
someone that knew the master key.  The parameters on the query string are:
</p>
        <ul>
          <li>
            <strong>st</strong> - this is the start time of when the signature becomes valid. 
It is optional.  If not supplied, then now is implied.</li>
          <li>
            <strong>se</strong> - this the the expiration date and time.  All signatures
are timebound and this parameter is required.</li>
          <li>
            <strong>sr</strong> - this is the resource that the signature applies to and will
be either (b)lob or (c)ontainer.  This is required.</li>
          <li>
            <strong>sp</strong> -this is the permission set that you are granting - (r)ead, (w)rite,
(d)elete, and (l)ist.  This is required.</li>
          <li>
            <strong>si</strong> - this is a signed identifier or a named policy that can incorporate
any of the previous elements. Optional.</li>
          <li>
            <strong>sig</strong> - this is the signed hash of the querystring and URI that proves
it was created with the master key.  It is required.</li>
        </ul>
        <p>
There is one other caveat that is important to mention here.  Unless you use
a signed identifier - what I refer to as a policy - there is no way to create a signature
that has a lifetime longer than an hour.  This is for good reason.  A SAS
URL that was mistakenly created with an extremely long lifetime and without using
the signed idenifier (policy) could not be revoked without changing the master key
on the storage account.  If that URL was to leak, your signed resource would
be open to abuse for a potentially long time.  By making the longest lifetime
of a signature only an hour, we have limited the window in which you are exposed.
</p>
        <p>
If you want to create a longer-lived SAS, you must create a policy.  The policy
is very interesting.  Because this policy contains any of those parameters mentioned
above and is stored at the service, it means that we can revoke those permission or
completely change them instantly.
</p>
        <p>
Let's walk through an example using <a href="http://www.myazurestorage.com">MyAzureStorage.com</a>,
where it is trivial to create a SAS.  Once I login to the site, I am going to
select the BLOBs option from the navigation tabs on top.  Here I will see a list
of all my containers.  I can select a container's <strong>Actions</strong> menu
and click <strong>Manage Policies</strong>.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_thumb.png" width="504" height="439" />
          </a> 
</p>
        <p>
Next, I am going to create two policies (signed identifiers), called Read and Write. 
These will have different expirations dates and permission sets.  Notice I am
not specifying a Start Date, so they are immediately valid.
</p>
        <p>
 
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_4.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_thumb_1.png" width="504" height="298" />
          </a>
        </p>
        <p>
Next, I am going to select the <strong>Actions</strong> menu for one of the blobs
under this container and click <strong>Share</strong>.  I am going to apply one
of the policies (shared access signature) that I just created by selecting it from
the dropdown.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_6.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_thumb_2.png" width="504" height="342" />
          </a>
        </p>
        <p>
You will notice that the value that I created in the policy fill in the values in
the<strong> Share BLOB</strong> UI and disable you from changing them.  The reason
is that a policy is like a template.  If you don't set a value, then you can
set (or must set it if it is required).  However, if the policy states one of
the parameters, you cannot supply that parameter.  In this case, the 'read' policy
that was created specified the expiration (se) and permissions (sp).  It is implied
from the dialog selection that the resource (sr) is a (b)lob.  The only value
that could be supplied here outside of the policy is the start time (st), which I
am not supplying as it is optional.
</p>
        <p>
When I click the <strong>Get URL</strong> button, I get back a URL that looks like
this:
</p>
        <p>
          <strong>http://&lt;account&gt;.blob.core.windows.net/shared/blobname?sr=b&amp;si=read&amp;sig=hIbD%.%3D</strong>
        </p>
        <p>
Now, if that URL was to leak and I no longer wanted to provide read access to the
blob, I could simply delete the 'read' policy or change the expiration date. 
It would instantly be invalidated.  Compare this to the the same signature created
without a policy:
</p>
        <p>
          <strong>http://&lt;account&gt;.blob.core.windows.net/shared/blobname?se=2010-02-13T02%3A17%3A46Z&amp;sr=b&amp;sp=r&amp;sig=bYfBBb1yf.%3D</strong>
        </p>
        <p>
This signature could not be revoked until it either expired or I regenerated the master
key.
</p>
        <p>
If you want to see how the SAS feature works or easily share blobs or containers in
your Windows Azure storage account, give it a try at <a href="http://www.myazurestorage.com/">MyAzureStorage.com</a> and
see how easy it is to do.
</p>
        <p>
 
</p>
        <p>
* assuming the key holder has not marked the container as blob- or container-level
public access already, in which case it is public read-only.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=40dc15bd-7fda-4229-8230-3e0833303aa6" />
      </body>
      <title>Sharing Blobs in Windows Azure</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,40dc15bd-7fda-4229-8230-3e0833303aa6.aspx</guid>
      <link>http://dunnry.com/blog/2010/02/13/SharingBlobsInWindowsAzure.aspx</link>
      <pubDate>Sat, 13 Feb 2010 01:29:47 GMT</pubDate>
      <description>&lt;p&gt;
Windows Azure storage makes use of a symmetric key authentication system.&amp;#160; Essentially,
we take a 256-bit key and sign each HTTP request to the storage subsystem.&amp;#160; In
order to access storage, you have to prove you know the key.&amp;#160; What this means
of course is that you need to protect that key well.&amp;#160; It is an all-or-nothing
scenario, if you have the key, you can do anything.&amp;#160; If you don't possess the
key, you can do nothing*.
&lt;/p&gt;
&lt;p&gt;
The natural question for most folks when they understand this model is, how can I
grant access to someone without compromising my master key?&amp;#160; The solution turns
out to be something called Shared Access Signatures (SAS) for Windows Azure.&amp;#160;
SAS works by specifying a few query string parameters, canonicalizing those parameters,
hashing them and signing the hash in the query string.&amp;#160; This creates a unique
URL that embeds not only the required access, but the proof that it was created by
someone that knew the master key.&amp;#160; The parameters on the query string are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;st&lt;/strong&gt; - this is the start time of when the signature becomes valid.&amp;#160;
It is optional.&amp;#160; If not supplied, then now is implied.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;se&lt;/strong&gt; - this the the expiration date and time.&amp;#160; All signatures
are timebound and this parameter is required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sr&lt;/strong&gt; - this is the resource that the signature applies to and will
be either (b)lob or (c)ontainer.&amp;#160; This is required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sp&lt;/strong&gt; -this is the permission set that you are granting - (r)ead, (w)rite,
(d)elete, and (l)ist.&amp;#160; This is required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;si&lt;/strong&gt; - this is a signed identifier or a named policy that can incorporate
any of the previous elements. Optional.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sig&lt;/strong&gt; - this is the signed hash of the querystring and URI that proves
it was created with the master key.&amp;#160; It is required.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
There is one other caveat that is important to mention here.&amp;#160; Unless you use
a signed identifier - what I refer to as a policy - there is no way to create a signature
that has a lifetime longer than an hour.&amp;#160; This is for good reason.&amp;#160; A SAS
URL that was mistakenly created with an extremely long lifetime and without using
the signed idenifier (policy) could not be revoked without changing the master key
on the storage account.&amp;#160; If that URL was to leak, your signed resource would
be open to abuse for a potentially long time.&amp;#160; By making the longest lifetime
of a signature only an hour, we have limited the window in which you are exposed.
&lt;/p&gt;
&lt;p&gt;
If you want to create a longer-lived SAS, you must create a policy.&amp;#160; The policy
is very interesting.&amp;#160; Because this policy contains any of those parameters mentioned
above and is stored at the service, it means that we can revoke those permission or
completely change them instantly.
&lt;/p&gt;
&lt;p&gt;
Let's walk through an example using &lt;a href="http://www.myazurestorage.com"&gt;MyAzureStorage.com&lt;/a&gt;,
where it is trivial to create a SAS.&amp;#160; Once I login to the site, I am going to
select the BLOBs option from the navigation tabs on top.&amp;#160; Here I will see a list
of all my containers.&amp;#160; I can select a container's &lt;strong&gt;Actions&lt;/strong&gt; menu
and click &lt;strong&gt;Manage Policies&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_2.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_thumb.png" width="504" height="439" /&gt;&lt;/a&gt;&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Next, I am going to create two policies (signed identifiers), called Read and Write.&amp;#160;
These will have different expirations dates and permission sets.&amp;#160; Notice I am
not specifying a Start Date, so they are immediately valid.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_4.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_thumb_1.png" width="504" height="298" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Next, I am going to select the &lt;strong&gt;Actions&lt;/strong&gt; menu for one of the blobs
under this container and click &lt;strong&gt;Share&lt;/strong&gt;.&amp;#160; I am going to apply one
of the policies (shared access signature) that I just created by selecting it from
the dropdown.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_6.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SharingBlobsinWindowsAzure_E158/image_thumb_2.png" width="504" height="342" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
You will notice that the value that I created in the policy fill in the values in
the&lt;strong&gt; Share BLOB&lt;/strong&gt; UI and disable you from changing them.&amp;#160; The reason
is that a policy is like a template.&amp;#160; If you don't set a value, then you can
set (or must set it if it is required).&amp;#160; However, if the policy states one of
the parameters, you cannot supply that parameter.&amp;#160; In this case, the 'read' policy
that was created specified the expiration (se) and permissions (sp).&amp;#160; It is implied
from the dialog selection that the resource (sr) is a (b)lob.&amp;#160; The only value
that could be supplied here outside of the policy is the start time (st), which I
am not supplying as it is optional.
&lt;/p&gt;
&lt;p&gt;
When I click the &lt;strong&gt;Get URL&lt;/strong&gt; button, I get back a URL that looks like
this:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;http://&amp;lt;account&amp;gt;.blob.core.windows.net/shared/blobname?sr=b&amp;amp;si=read&amp;amp;sig=hIbD%.%3D&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Now, if that URL was to leak and I no longer wanted to provide read access to the
blob, I could simply delete the 'read' policy or change the expiration date.&amp;#160;
It would instantly be invalidated.&amp;#160; Compare this to the the same signature created
without a policy:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;http://&amp;lt;account&amp;gt;.blob.core.windows.net/shared/blobname?se=2010-02-13T02%3A17%3A46Z&amp;amp;sr=b&amp;amp;sp=r&amp;amp;sig=bYfBBb1yf.%3D&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This signature could not be revoked until it either expired or I regenerated the master
key.
&lt;/p&gt;
&lt;p&gt;
If you want to see how the SAS feature works or easily share blobs or containers in
your Windows Azure storage account, give it a try at &lt;a href="http://www.myazurestorage.com/"&gt;MyAzureStorage.com&lt;/a&gt; and
see how easy it is to do.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
* assuming the key holder has not marked the container as blob- or container-level
public access already, in which case it is public read-only.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=40dc15bd-7fda-4229-8230-3e0833303aa6" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,40dc15bd-7fda-4229-8230-3e0833303aa6.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Server</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=b7c3a643-7347-4a56-a259-acdff347b4ae</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,b7c3a643-7347-4a56-a259-acdff347b4ae.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,b7c3a643-7347-4a56-a259-acdff347b4ae.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b7c3a643-7347-4a56-a259-acdff347b4ae</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It wasn't too long ago when <a href="http://rhizohm.net/irhetoric/">Karsten Januszewski</a> came
to my office looking for a Windows Azure token (back when we were in CTP).  I
wondered what cool shenanigans the <a href="http://visitmix.com/About/">MIX team</a> had
going.  Turns out it was for the <a href="http://visitmix.com/labs/incarnate/">Incarnate</a> project
(<a href="http://visitmix.com/LabNotes/Incarnate-Find-and-Reuse-Your-Avatars">explained
here</a>).  In short, this service finds all the different avatars you might
be using across popular sites* and allows you to select an existing one instead of
having to upload one again and again.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/DoyouIncarnate_CB05/image_4.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/DoyouIncarnate_CB05/image_thumb_1.png" width="504" height="492" />
          </a>
        </p>
        <p>
You will note that there is another 'dunnry' somewhere on the interwebs, stealing
my exclusive trademark.  I have conveniently crossed them out for reference.
;)
</p>
        <p>
Since the entire Incarnate service is running in Windows Azure, I was interested in
Karsten's experience:
</p>
        <blockquote>
          <p>
We chose Windows Azure to host Incarnate because there was a lot of uncertainty in
traffic.  We didn't know how popular the service would be and knowing that we
could scale to any load was a big factor in choosing it.
</p>
        </blockquote>
        <p>
I asked him how the experience was, developing for Windows Azure
</p>
        <blockquote>
          <p>
There is a ton of great documentation and samples.  I relied heavily on the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78&amp;displaylang=en">Windows
Azure Platform Kit</a> as well as the samples in the SDK to get started.  Once
I understood how the development environment worked and how the deployment model functioned,
I was off and running. I'd definitely recommend those two resources as well as the <a href="http://microsoftpdc.com/Search?Term=Azure">videos
from the PDC</a> for people who are getting started.
</p>
        </blockquote>
        <p>
I love it when I hear that.  Karsten was able to get the Incarnate service up
and running on Windows Azure easily and now he is scale-proof in addition to the management
goodness that is baked into Windows Azure.
</p>
        <p>
Checkout more about Incarnate and Karsten's Windows Azure learning on the <a href="http://www.visitmix.com/writings/">MIX
blog</a>.
</p>
        <p>
 
</p>
        <p>
*turns out you can extend this to add a provider for any site (not just the ones that
ship in source).
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=b7c3a643-7347-4a56-a259-acdff347b4ae" />
      </body>
      <title>Do you Incarnate?</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,b7c3a643-7347-4a56-a259-acdff347b4ae.aspx</guid>
      <link>http://dunnry.com/blog/2010/02/10/DoYouIncarnate.aspx</link>
      <pubDate>Wed, 10 Feb 2010 21:19:16 GMT</pubDate>
      <description>&lt;p&gt;
It wasn't too long ago when &lt;a href="http://rhizohm.net/irhetoric/"&gt;Karsten Januszewski&lt;/a&gt; came
to my office looking for a Windows Azure token (back when we were in CTP).&amp;#160; I
wondered what cool shenanigans the &lt;a href="http://visitmix.com/About/"&gt;MIX team&lt;/a&gt; had
going.&amp;#160; Turns out it was for the &lt;a href="http://visitmix.com/labs/incarnate/"&gt;Incarnate&lt;/a&gt; project
(&lt;a href="http://visitmix.com/LabNotes/Incarnate-Find-and-Reuse-Your-Avatars"&gt;explained
here&lt;/a&gt;).&amp;#160; In short, this service finds all the different avatars you might
be using across popular sites* and allows you to select an existing one instead of
having to upload one again and again.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/DoyouIncarnate_CB05/image_4.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://dunnry.com/blog/content/binary/WindowsLiveWriter/DoyouIncarnate_CB05/image_thumb_1.png" width="504" height="492" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
You will note that there is another 'dunnry' somewhere on the interwebs, stealing
my exclusive trademark.&amp;#160; I have conveniently crossed them out for reference.
;)
&lt;/p&gt;
&lt;p&gt;
Since the entire Incarnate service is running in Windows Azure, I was interested in
Karsten's experience:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
We chose Windows Azure to host Incarnate because there was a lot of uncertainty in
traffic.&amp;#160; We didn't know how popular the service would be and knowing that we
could scale to any load was a big factor in choosing it.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I asked him how the experience was, developing for Windows Azure
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
There is a ton of great documentation and samples.&amp;#160; I relied heavily on the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78&amp;amp;displaylang=en"&gt;Windows
Azure Platform Kit&lt;/a&gt; as well as the samples in the SDK to get started.&amp;#160; Once
I understood how the development environment worked and how the deployment model functioned,
I was off and running. I'd definitely recommend those two resources as well as the &lt;a href="http://microsoftpdc.com/Search?Term=Azure"&gt;videos
from the PDC&lt;/a&gt; for people who are getting started.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I love it when I hear that.&amp;#160; Karsten was able to get the Incarnate service up
and running on Windows Azure easily and now he is scale-proof in addition to the management
goodness that is baked into Windows Azure.
&lt;/p&gt;
&lt;p&gt;
Checkout more about Incarnate and Karsten's Windows Azure learning on the &lt;a href="http://www.visitmix.com/writings/"&gt;MIX
blog&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
*turns out you can extend this to add a provider for any site (not just the ones that
ship in source).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=b7c3a643-7347-4a56-a259-acdff347b4ae" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,b7c3a643-7347-4a56-a259-acdff347b4ae.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=7ed8cbd1-2104-475f-94d6-a1451169c873</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,7ed8cbd1-2104-475f-94d6-a1451169c873.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,7ed8cbd1-2104-475f-94d6-a1451169c873.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7ed8cbd1-2104-475f-94d6-a1451169c873</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This might come as a surprise to some folks, but in Windows Azure you are billed when
you deploy, not when you run.  That means we don't care about CPU hours - we
care about deployed hours.  Your meter starts the second you deploy, irrespective
of the state of the application.  This means that even if you 'Suspend' your
service so it is not reachable (and consumes no CPU), the meter is still running.
</p>
        <p>
Visually, here is the meter still running:
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/HowDoIStoptheBillingMeterinWindowsAzure_A88E/image_4.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/HowDoIStoptheBillingMeterinWindowsAzure_A88E/image_thumb_1.png" width="504" height="233" />
          </a>
        </p>
        <p>
Here is when the meter is stopped:
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/HowDoIStoptheBillingMeterinWindowsAzure_A88E/image_6.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/HowDoIStoptheBillingMeterinWindowsAzure_A88E/image_thumb_2.png" width="504" height="196" />
          </a>
        </p>
        <p>
Right now, there is a 'free' offering of Windows Azure that offers a limited # of
hours per month.  If you are using MSDN benefits for Windows Azure, there is
another offering that offers some bucket of 'free' hours.  Any overage and you
start to pay.
</p>
        <p>
Now, if you are like me and have a fair number of hosted services squirreled around,
you might forget to go to the portal and delete the deployments when you are done. 
Or, you might simply wish to automate the removal of your deployments at the end of
day.  There are lots of reasons to remove your deployments, but the primary one
is to turn the meter off.  Given that re-deploying your services is very simple
(and can also be automated), this is not a huge issue to remove the deployment when
you are done.
</p>
        <h2>Automatic Service Removal
</h2>
        <p>
For those folks that wish an automated solution, it turns out that this is amazingly
simple when using the Service Management API and the <a href="http://code.msdn.microsoft.com/azurecmdlets">Azure
cmdlets</a>.  Here is the complete, deployment-nuking script:
</p>
        <code>
          <p>
$cert = Get-Item cert:\CurrentUser\My\&lt;cert thumbprint&gt; 
<br />
$sub = 'CCCEA07B. your sub ID' 
</p>
          <p>
$services = Get-HostedServices -Certificate $cert -SubscriptionId $sub 
</p>
          <p>
$services | Get-Deployment -Slot Production | Set-DeploymentStatus 'Suspended' | Get-OperationStatus
-WaitToComplete 
<br />
$services | Get-Deployment -Slot Staging | Set-DeploymentStatus 'Suspended' | Get-OperationStatus
-WaitToComplete 
</p>
          <p>
$services | Get-Deployment -Slot Production | Remove-Deployment 
<br />
$services | Get-Deployment -Slot Staging | Remove-Deployment
</p>
          <p>
          </p>
        </code>
        <p>
That's it - just 6 lines of Powershell. BE CAREFUL.  This script will iterate
through all the services in your subscription ID, stop any deployed service, and then
remove it.  After this runs, every hosted service will be gone and the billing
meter has stopped (for hosted services anyway).
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=7ed8cbd1-2104-475f-94d6-a1451169c873" />
      </body>
      <title>How Do I Stop the Billing Meter in Windows Azure?</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,7ed8cbd1-2104-475f-94d6-a1451169c873.aspx</guid>
      <link>http://dunnry.com/blog/2010/02/03/HowDoIStopTheBillingMeterInWindowsAzure.aspx</link>
      <pubDate>Wed, 03 Feb 2010 20:00:11 GMT</pubDate>
      <description>&lt;p&gt;
This might come as a surprise to some folks, but in Windows Azure you are billed when
you deploy, not when you run.&amp;#160; That means we don't care about CPU hours - we
care about deployed hours.&amp;#160; Your meter starts the second you deploy, irrespective
of the state of the application.&amp;#160; This means that even if you 'Suspend' your
service so it is not reachable (and consumes no CPU), the meter is still running.
&lt;/p&gt;
&lt;p&gt;
Visually, here is the meter still running:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/HowDoIStoptheBillingMeterinWindowsAzure_A88E/image_4.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://dunnry.com/blog/content/binary/WindowsLiveWriter/HowDoIStoptheBillingMeterinWindowsAzure_A88E/image_thumb_1.png" width="504" height="233" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Here is when the meter is stopped:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/HowDoIStoptheBillingMeterinWindowsAzure_A88E/image_6.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://dunnry.com/blog/content/binary/WindowsLiveWriter/HowDoIStoptheBillingMeterinWindowsAzure_A88E/image_thumb_2.png" width="504" height="196" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Right now, there is a 'free' offering of Windows Azure that offers a limited # of
hours per month.&amp;#160; If you are using MSDN benefits for Windows Azure, there is
another offering that offers some bucket of 'free' hours.&amp;#160; Any overage and you
start to pay.
&lt;/p&gt;
&lt;p&gt;
Now, if you are like me and have a fair number of hosted services squirreled around,
you might forget to go to the portal and delete the deployments when you are done.&amp;#160;
Or, you might simply wish to automate the removal of your deployments at the end of
day.&amp;#160; There are lots of reasons to remove your deployments, but the primary one
is to turn the meter off.&amp;#160; Given that re-deploying your services is very simple
(and can also be automated), this is not a huge issue to remove the deployment when
you are done.
&lt;/p&gt;
&lt;h2&gt;Automatic Service Removal
&lt;/h2&gt;
&lt;p&gt;
For those folks that wish an automated solution, it turns out that this is amazingly
simple when using the Service Management API and the &lt;a href="http://code.msdn.microsoft.com/azurecmdlets"&gt;Azure
cmdlets&lt;/a&gt;.&amp;#160; Here is the complete, deployment-nuking script:
&lt;/p&gt;
&lt;code&gt; 
&lt;p&gt;
$cert = Get-Item cert:\CurrentUser\My\&amp;lt;cert thumbprint&amp;gt; 
&lt;br /&gt;
$sub = 'CCCEA07B. your sub ID' 
&lt;/p&gt;
&lt;p&gt;
$services = Get-HostedServices -Certificate $cert -SubscriptionId $sub 
&lt;/p&gt;
&lt;p&gt;
$services | Get-Deployment -Slot Production | Set-DeploymentStatus 'Suspended' | Get-OperationStatus
-WaitToComplete 
&lt;br /&gt;
$services | Get-Deployment -Slot Staging | Set-DeploymentStatus 'Suspended' | Get-OperationStatus
-WaitToComplete 
&lt;/p&gt;
&lt;p&gt;
$services | Get-Deployment -Slot Production | Remove-Deployment 
&lt;br /&gt;
$services | Get-Deployment -Slot Staging | Remove-Deployment
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/code&gt; 
&lt;p&gt;
That's it - just 6 lines of Powershell. BE CAREFUL.&amp;#160; This script will iterate
through all the services in your subscription ID, stop any deployed service, and then
remove it.&amp;#160; After this runs, every hosted service will be gone and the billing
meter has stopped (for hosted services anyway).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=7ed8cbd1-2104-475f-94d6-a1451169c873" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,7ed8cbd1-2104-475f-94d6-a1451169c873.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Tips</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=7f196fcb-9032-4a1e-afe0-1dddb6211dc9</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,7f196fcb-9032-4a1e-afe0-1dddb6211dc9.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,7f196fcb-9032-4a1e-afe0-1dddb6211dc9.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7f196fcb-9032-4a1e-afe0-1dddb6211dc9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A few customers have asked how they can use tools like <a href="http://code.msdn.microsoft.com/wazt">wazt</a>, <a href="http://code.msdn.microsoft.com/windowsazuremmc">Windows
Azure MMC</a>, the <a href="http://code.msdn.microsoft.com/azurecmdlets">Azure Cmdlets</a>,
etc. when they are behind proxies at work that require basic authentication. 
The tools themselves don't directly support this type of proxy.  What we are
doing is simply relying on the fact that the underlying HttpRequest object will pick
up your IE's default proxy configuration.  Most of the time, this just works.
</p>
        <p>
However, if you are in an environment where you are prompted for your username and
password, you might be on a basic auth proxy and the tools might not work.  To
work around this, you can actually implement a very simple proxy handler yourself
and inject it into the application.
</p>
        <p>
Here is one that I wrote to support wazt.  To use this, add the following to
your app.config and drop the output assembly from this project into your execution
directory.  Note, this would work with any tool in .NET that uses HttpWebRequest
under the covers (like csmanage for instance).
</p>
        <p>
 
</p>
        <p>
&lt;!-- basic auth proxy section declaration area--&gt; 
<br />
&lt;!-- proxyHostAddress="Auto" : use Internet explorer configuration for
name of the proxy --&gt; 
<br />
&lt;configSections&gt; 
<br />
  &lt;sectionGroup name="proxyGroup"&gt; 
<br />
    &lt;section name="basicProxy" 
<br />
             type="Proxy.Configuration.CustomProxySection,
Proxy" /&gt; 
<br />
  &lt;/sectionGroup&gt; 
<br />
&lt;/configSections&gt; 
</p>
        <p>
&lt;system.net&gt; 
<br />
  &lt;defaultProxy enabled="true" useDefaultCredentials="false"&gt; 
<br />
    &lt;module type="Proxy.CustomProxy, Proxy"/&gt; 
<br />
  &lt;/defaultProxy&gt; 
<br />
&lt;/system.net&gt; 
</p>
        <p>
&lt;proxyGroup&gt;    
<br />
  &lt;basicProxy proxyHostAddress="Auto" proxyUserName="MyName"
proxyUserPassword="MyPassword" /&gt; 
<br />
&lt;/proxyGroup&gt;
</p>
        <p>
 
</p>
        <p>
          <a href="http://cid-4225352e17899c6d.office.live.com/self.aspx/Public/Proxy.zip" target="_blank">Download
the source here</a>.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=7f196fcb-9032-4a1e-afe0-1dddb6211dc9" />
      </body>
      <title>Supporting Basic Auth Proxies</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,7f196fcb-9032-4a1e-afe0-1dddb6211dc9.aspx</guid>
      <link>http://dunnry.com/blog/2010/01/25/SupportingBasicAuthProxies.aspx</link>
      <pubDate>Mon, 25 Jan 2010 23:52:35 GMT</pubDate>
      <description>&lt;p&gt;
A few customers have asked how they can use tools like &lt;a href="http://code.msdn.microsoft.com/wazt"&gt;wazt&lt;/a&gt;, &lt;a href="http://code.msdn.microsoft.com/windowsazuremmc"&gt;Windows
Azure MMC&lt;/a&gt;, the &lt;a href="http://code.msdn.microsoft.com/azurecmdlets"&gt;Azure Cmdlets&lt;/a&gt;,
etc. when they are behind proxies at work that require basic authentication.&amp;#160;
The tools themselves don't directly support this type of proxy.&amp;#160; What we are
doing is simply relying on the fact that the underlying HttpRequest object will pick
up your IE's default proxy configuration.&amp;#160; Most of the time, this just works.
&lt;/p&gt;
&lt;p&gt;
However, if you are in an environment where you are prompted for your username and
password, you might be on a basic auth proxy and the tools might not work.&amp;#160; To
work around this, you can actually implement a very simple proxy handler yourself
and inject it into the application.
&lt;/p&gt;
&lt;p&gt;
Here is one that I wrote to support wazt.&amp;#160; To use this, add the following to
your app.config and drop the output assembly from this project into your execution
directory.&amp;#160; Note, this would work with any tool in .NET that uses HttpWebRequest
under the covers (like csmanage for instance).
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&amp;lt;!-- basic auth proxy section declaration area--&amp;gt; 
&lt;br /&gt;
&amp;lt;!-- proxyHostAddress=&amp;quot;Auto&amp;quot; : use Internet explorer configuration for
name of the proxy --&amp;gt; 
&lt;br /&gt;
&amp;lt;configSections&amp;gt; 
&lt;br /&gt;
&amp;#160; &amp;lt;sectionGroup name=&amp;quot;proxyGroup&amp;quot;&amp;gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &amp;lt;section name=&amp;quot;basicProxy&amp;quot; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type=&amp;quot;Proxy.Configuration.CustomProxySection,
Proxy&amp;quot; /&amp;gt; 
&lt;br /&gt;
&amp;#160; &amp;lt;/sectionGroup&amp;gt; 
&lt;br /&gt;
&amp;lt;/configSections&amp;gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;lt;system.net&amp;gt; 
&lt;br /&gt;
&amp;#160; &amp;lt;defaultProxy enabled=&amp;quot;true&amp;quot; useDefaultCredentials=&amp;quot;false&amp;quot;&amp;gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &amp;lt;module type=&amp;quot;Proxy.CustomProxy, Proxy&amp;quot;/&amp;gt; 
&lt;br /&gt;
&amp;#160; &amp;lt;/defaultProxy&amp;gt; 
&lt;br /&gt;
&amp;lt;/system.net&amp;gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;lt;proxyGroup&amp;gt;&amp;#160;&amp;#160;&amp;#160; 
&lt;br /&gt;
&amp;#160; &amp;lt;basicProxy proxyHostAddress=&amp;quot;Auto&amp;quot; proxyUserName=&amp;quot;MyName&amp;quot;
proxyUserPassword=&amp;quot;MyPassword&amp;quot; /&amp;gt; 
&lt;br /&gt;
&amp;lt;/proxyGroup&amp;gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://cid-4225352e17899c6d.office.live.com/self.aspx/Public/Proxy.zip" target="_blank"&gt;Download
the source here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=7f196fcb-9032-4a1e-afe0-1dddb6211dc9" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,7f196fcb-9032-4a1e-afe0-1dddb6211dc9.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Tips</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=55186781-9917-45e5-8a34-0eb8d0be3356</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,55186781-9917-45e5-8a34-0eb8d0be3356.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,55186781-9917-45e5-8a34-0eb8d0be3356.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=55186781-9917-45e5-8a34-0eb8d0be3356</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I love elegant software.  I knew about <a href="http://clumsyleaf.com/products/cloudxplorer">CloudXplorer</a> from
Clumsy Leaf for some time, but I hadn't used it for awhile because the <a href="http://code.msdn.microsoft.com/windowsazuremmc">Windows
Azure MMC</a> and <a href="https://www.myazurestorage.com">MyAzureStorage.com</a> have
been all I need for storage for awhile.  Also, I have a private tool that I wrote
awhile back to generate Shared Access signatures for files I want to share.
</p>
        <p>
I decided to check out the progress on this tool and noticed in the change log that
support for Shared Access signatures is now included.  Nice!  So far, this
is the only tool* that I have seen handle Shared Access signatures in such an elegant
and complete manner.  Nicely done!
</p>
        <p>
Definitely a recommended tool to keep on your shortlist.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/NeatWindowsAzureStorageTool_CD5D/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/NeatWindowsAzureStorageTool_CD5D/image_thumb.png" width="349" height="171" />
          </a>
        </p>
        <p>
*My tool is complete, but not nearly as elegant.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=55186781-9917-45e5-8a34-0eb8d0be3356" />
      </body>
      <title>Neat Windows Azure Storage Tool</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,55186781-9917-45e5-8a34-0eb8d0be3356.aspx</guid>
      <link>http://dunnry.com/blog/2010/01/25/NeatWindowsAzureStorageTool.aspx</link>
      <pubDate>Mon, 25 Jan 2010 22:41:05 GMT</pubDate>
      <description>&lt;p&gt;
I love elegant software.&amp;#160; I knew about &lt;a href="http://clumsyleaf.com/products/cloudxplorer"&gt;CloudXplorer&lt;/a&gt; from
Clumsy Leaf for some time, but I hadn't used it for awhile because the &lt;a href="http://code.msdn.microsoft.com/windowsazuremmc"&gt;Windows
Azure MMC&lt;/a&gt; and &lt;a href="https://www.myazurestorage.com"&gt;MyAzureStorage.com&lt;/a&gt; have
been all I need for storage for awhile.&amp;#160; Also, I have a private tool that I wrote
awhile back to generate Shared Access signatures for files I want to share.
&lt;/p&gt;
&lt;p&gt;
I decided to check out the progress on this tool and noticed in the change log that
support for Shared Access signatures is now included.&amp;#160; Nice!&amp;#160; So far, this
is the only tool* that I have seen handle Shared Access signatures in such an elegant
and complete manner.&amp;#160; Nicely done!
&lt;/p&gt;
&lt;p&gt;
Definitely a recommended tool to keep on your shortlist.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/NeatWindowsAzureStorageTool_CD5D/image_2.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://dunnry.com/blog/content/binary/WindowsLiveWriter/NeatWindowsAzureStorageTool_CD5D/image_thumb.png" width="349" height="171" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
*My tool is complete, but not nearly as elegant.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=55186781-9917-45e5-8a34-0eb8d0be3356" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,55186781-9917-45e5-8a34-0eb8d0be3356.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=91a03722-0ca6-4190-8d2f-d3e875d04490</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,91a03722-0ca6-4190-8d2f-d3e875d04490.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,91a03722-0ca6-4190-8d2f-d3e875d04490.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=91a03722-0ca6-4190-8d2f-d3e875d04490</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Some time back, I put in a request to LINQPad's <a href="http://linqpad.uservoice.com/forums/18302-linqpad-feature-suggestions">feature
request page</a> to support SQL Azure.  I love using LINQPad for basically all
my quick demo programs and prototypes.  Since all I work with these days is the
Windows Azure platform, it was killing me to have to go to SSMS to do anything with
SQL Azure.
</p>
        <p>
Well, my request was granted!  Today, you can use the <a href="http://www.linqpad.net/beta.aspx">beta
version</a> of LINQPad against SQL Azure and get the full LINQ experience.  Behold:
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LINQPadsupportsSQLAzure_1044A/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LINQPadsupportsSQLAzure_1044A/image_thumb.png" width="504" height="435" />
          </a>
        </p>
        <p>
In this case, I am querying the firewall rules on my database using LINQ.  Hot
damn.  Nice work Joe!  If you pay a few bucks, you get the intellisense
version of the tool too, which is well worth it.  This tool has completely replaced
SnippetCompiler for me and continues to get better and better.  Now, if Joe would
add F# support.
</p>
        <p>
          <a href="http://www.linqpad.net/beta.aspx">LINQPad Beta</a>
        </p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=91a03722-0ca6-4190-8d2f-d3e875d04490" />
      </body>
      <title>LINQPad supports SQL Azure</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,91a03722-0ca6-4190-8d2f-d3e875d04490.aspx</guid>
      <link>http://dunnry.com/blog/2010/01/12/LINQPadSupportsSQLAzure.aspx</link>
      <pubDate>Tue, 12 Jan 2010 02:31:14 GMT</pubDate>
      <description>&lt;p&gt;
Some time back, I put in a request to LINQPad's &lt;a href="http://linqpad.uservoice.com/forums/18302-linqpad-feature-suggestions"&gt;feature
request page&lt;/a&gt; to support SQL Azure.&amp;#160; I love using LINQPad for basically all
my quick demo programs and prototypes.&amp;#160; Since all I work with these days is the
Windows Azure platform, it was killing me to have to go to SSMS to do anything with
SQL Azure.
&lt;/p&gt;
&lt;p&gt;
Well, my request was granted!&amp;#160; Today, you can use the &lt;a href="http://www.linqpad.net/beta.aspx"&gt;beta
version&lt;/a&gt; of LINQPad against SQL Azure and get the full LINQ experience.&amp;#160; Behold:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LINQPadsupportsSQLAzure_1044A/image_2.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://dunnry.com/blog/content/binary/WindowsLiveWriter/LINQPadsupportsSQLAzure_1044A/image_thumb.png" width="504" height="435" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
In this case, I am querying the firewall rules on my database using LINQ.&amp;#160; Hot
damn.&amp;#160; Nice work Joe!&amp;#160; If you pay a few bucks, you get the intellisense
version of the tool too, which is well worth it.&amp;#160; This tool has completely replaced
SnippetCompiler for me and continues to get better and better.&amp;#160; Now, if Joe would
add F# support.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.linqpad.net/beta.aspx"&gt;LINQPad Beta&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=91a03722-0ca6-4190-8d2f-d3e875d04490" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,91a03722-0ca6-4190-8d2f-d3e875d04490.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>LINQ</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=917a2ca7-83ce-45a0-82e9-a8b6d23ddf45</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,917a2ca7-83ce-45a0-82e9-a8b6d23ddf45.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,917a2ca7-83ce-45a0-82e9-a8b6d23ddf45.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=917a2ca7-83ce-45a0-82e9-a8b6d23ddf45</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
For those of you that made PDC, this will serve as a reminder and for those of you
that missed PDC this year (too bad!), this will serve as a guide to some great content.
</p>
        <h2>PDC Sessions for the Windows Azure Platform
</h2>
        <h3>Getting Started
</h3>
        <ul>
          <li>
            <a href="http://microsoftpdc.com/Sessions/P09-03">Lap Around the Windows Azure Platform</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC13">Windows Azure Present and Future</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC37">Introduction to Building Applications
with Windows Azure</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC54">The Business of Windows Azure: What
you should know about Windows Azure Platform pricing and SLAs</a>
          </li>
        </ul>
        <h3>Windows Azure
</h3>
        <ul>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC08">Patterns for Building Scalable and
Reliable Applications with Windows Azure</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC16">Developing Advanced Applications
with Windows Azure</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC15">Windows Azure Monitoring, Logging,
and Management APIs</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC25">Automating the Application Lifecycle
with Windows Azure</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC18">Building Hybrid Cloud Applications
with Windows Azure and the Service Bus</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC17">Enabling Single Sign-On to Windows
Azure Applications</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC20">Bridging the Gap from On-Premises
to the Cloud</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC53">Tips and Tricks for Using Visual
Studio 2010 to Build Applications that Run on Windows Azure </a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC14">Storing and Manipulating Blobs and
Files with Windows Azure Storage</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC09">Windows Azure Tables and Queues Deep
Dive</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC51">Developing PHP and MySQL Applications
with Windows Azure</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC50">Building Java Applications with Windows
Azure</a>
          </li>
        </ul>
        <h3>Codename "Dallas"
</h3>
        <ul>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC29">Enrich your Applications with Data
from Microsoft Project Code Name "Dallas"</a>
          </li>
        </ul>
        <h3>SQL Azure
</h3>
        <ul>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC52">SQL Azure Database: Present and Future</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC23">Using the Microsoft Sync Framework
to Connect Apps to the Cloud</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC27">The Future of Database Development
with SQL Azure</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC12">Microsoft SQL Azure Database: Under
the Hood</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC06">Scaling out Web Applications with
Microsoft SQL Azure Databases</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/P09-14">Petabytes for Peanuts! Making Sense
out of "Ambient" Data</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/P09-08">Development Best Practices and Patterns
for Using Microsoft SQL Azure Databases</a>
          </li>
        </ul>
        <h3>Identity
</h3>
        <ul>
          <li>
            <a href="http://microsoftpdc.com/Sessions/P09-21">Windows Identity Foundation Overview</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC10">Software + Services Identity Roadmap
Update</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC17">Enabling Single Sign-On to Windows
Azure Applications</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC19">REST Services Security Using the
Access Control Service</a>
            <strong>
            </strong>
          </li>
        </ul>
        <h3>Customer &amp; Partner Showcases
</h3>
        <ul>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC32">Lessons Learned: Building Scalable
Applications with the Windows Azure Platform</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC31">Lessons Learned: Building On-Premises
and Cloud Applications with the Service Bus and Windows Azure</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC33">Lessons Learned: Building Multi-Tenant
Applications with the Windows Azure Platform</a>
          </li>
          <li>
            <a href="http://microsoftpdc.com/Sessions/SVC22">Lessons Learned: Migrating Applications
to the Windows Azure Platform</a>
          </li>
        </ul>
        <h2>Channel 9 Learning Centers
</h2>
        <p>
Coinciding with PDC, we have released the first wave of learning content on Channel
9. The new Ch9 learning centers features content for both the <a href="http://channel9.msdn.com/learn/courses/azure">Windows
Azure Platform</a>, as well as a course specifically designed for the <a href="http://channel9.msdn.com/learn/courses/IdentityTrainingCourse/">Identity
Developer</a>. The content on both these sites will be continued to be developed by
the team over the coming weeks and months. Watch out for updates and additions.
</p>
        <h2>Downloadable Training Kits
</h2>
        <p>
To complement the learning centers on Ch9, we still continue to maintain the training
kits on the Microsoft download center, which allows you to download and consume the
content offline. You can download the Windows Azure Platform training kit <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78">here</a>,
and the Identity training kit <a href="http://go.microsoft.com/fwlink/?LinkId=148795">here</a>.
The next update is planned for mid-December.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=917a2ca7-83ce-45a0-82e9-a8b6d23ddf45" />
      </body>
      <title>PDC 2009 Windows Azure Resources</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,917a2ca7-83ce-45a0-82e9-a8b6d23ddf45.aspx</guid>
      <link>http://dunnry.com/blog/2009/11/23/PDC2009WindowsAzureResources.aspx</link>
      <pubDate>Mon, 23 Nov 2009 17:51:28 GMT</pubDate>
      <description>&lt;p&gt;
For those of you that made PDC, this will serve as a reminder and for those of you
that missed PDC this year (too bad!), this will serve as a guide to some great content.
&lt;/p&gt;
&lt;h2&gt;PDC Sessions for the Windows Azure Platform
&lt;/h2&gt;
&lt;h3&gt;Getting Started
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/P09-03"&gt;Lap Around the Windows Azure Platform&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC13"&gt;Windows Azure Present and Future&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC37"&gt;Introduction to Building Applications
with Windows Azure&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC54"&gt;The Business of Windows Azure: What
you should know about Windows Azure Platform pricing and SLAs&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Windows Azure
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC08"&gt;Patterns for Building Scalable and
Reliable Applications with Windows Azure&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC16"&gt;Developing Advanced Applications
with Windows Azure&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC15"&gt;Windows Azure Monitoring, Logging,
and Management APIs&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC25"&gt;Automating the Application Lifecycle
with Windows Azure&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC18"&gt;Building Hybrid Cloud Applications
with Windows Azure and the Service Bus&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC17"&gt;Enabling Single Sign-On to Windows
Azure Applications&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC20"&gt;Bridging the Gap from On-Premises
to the Cloud&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC53"&gt;Tips and Tricks for Using Visual
Studio 2010 to Build Applications that Run on Windows Azure &lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC14"&gt;Storing and Manipulating Blobs and
Files with Windows Azure Storage&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC09"&gt;Windows Azure Tables and Queues Deep
Dive&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC51"&gt;Developing PHP and MySQL Applications
with Windows Azure&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC50"&gt;Building Java Applications with Windows
Azure&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Codename "Dallas"
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC29"&gt;Enrich your Applications with Data
from Microsoft Project Code Name "Dallas"&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;SQL Azure
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC52"&gt;SQL Azure Database: Present and Future&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC23"&gt;Using the Microsoft Sync Framework
to Connect Apps to the Cloud&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC27"&gt;The Future of Database Development
with SQL Azure&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC12"&gt;Microsoft SQL Azure Database: Under
the Hood&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC06"&gt;Scaling out Web Applications with
Microsoft SQL Azure Databases&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/P09-14"&gt;Petabytes for Peanuts! Making Sense
out of "Ambient" Data&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/P09-08"&gt;Development Best Practices and Patterns
for Using Microsoft SQL Azure Databases&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Identity
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/P09-21"&gt;Windows Identity Foundation Overview&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC10"&gt;Software + Services Identity Roadmap
Update&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC17"&gt;Enabling Single Sign-On to Windows
Azure Applications&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC19"&gt;REST Services Security Using the
Access Control Service&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Customer &amp;amp; Partner Showcases
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC32"&gt;Lessons Learned: Building Scalable
Applications with the Windows Azure Platform&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC31"&gt;Lessons Learned: Building On-Premises
and Cloud Applications with the Service Bus and Windows Azure&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC33"&gt;Lessons Learned: Building Multi-Tenant
Applications with the Windows Azure Platform&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://microsoftpdc.com/Sessions/SVC22"&gt;Lessons Learned: Migrating Applications
to the Windows Azure Platform&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Channel 9 Learning Centers
&lt;/h2&gt;
&lt;p&gt;
Coinciding with PDC, we have released the first wave of learning content on Channel
9. The new Ch9 learning centers features content for both the &lt;a href="http://channel9.msdn.com/learn/courses/azure"&gt;Windows
Azure Platform&lt;/a&gt;, as well as a course specifically designed for the &lt;a href="http://channel9.msdn.com/learn/courses/IdentityTrainingCourse/"&gt;Identity
Developer&lt;/a&gt;. The content on both these sites will be continued to be developed by
the team over the coming weeks and months. Watch out for updates and additions.
&lt;/p&gt;
&lt;h2&gt;Downloadable Training Kits
&lt;/h2&gt;
&lt;p&gt;
To complement the learning centers on Ch9, we still continue to maintain the training
kits on the Microsoft download center, which allows you to download and consume the
content offline. You can download the Windows Azure Platform training kit &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78"&gt;here&lt;/a&gt;,
and the Identity training kit &lt;a href="http://go.microsoft.com/fwlink/?LinkId=148795"&gt;here&lt;/a&gt;.
The next update is planned for mid-December.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=917a2ca7-83ce-45a0-82e9-a8b6d23ddf45" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,917a2ca7-83ce-45a0-82e9-a8b6d23ddf45.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=a4c8084f-de9b-4074-b2e9-5137453466f1</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,a4c8084f-de9b-4074-b2e9-5137453466f1.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,a4c8084f-de9b-4074-b2e9-5137453466f1.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a4c8084f-de9b-4074-b2e9-5137453466f1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As I write this, I am sitting on a plane headed back to the US from a wonderful visit
over to our UK office.  While there, I got to meet a number of customers working
with Windows Azure.  It was clear from the interaction that these folks were
looking for a way to simplify how to manage their deployments and build it into an
automated process.
</p>
        <p>
With the release of the <a href="http://blogs.msdn.com/windowsazure/archive/2009/09/17/introducing-the-windows-azure-service-management-api.aspx">Service
Management API</a>, this is now possible.  As of today, you can <a href="http://code.msdn.microsoft.com/azurecmdlets">download
some Powershell cmdlets</a> that wrap this API and make managing your Windows Azure
applications simple from script.  With these cmdlets, you can script your deploys,
upgrades, and scaling operations very easily.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureServiceManagementCmdLets_757C/clip_image001_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureServiceManagementCmdLets_757C/clip_image001_thumb.jpg" width="504" height="242" />
          </a>
        </p>
        <p>
The cmdlets mirror the API quite closely, but since it is Powershell, we support piping
which cuts down quite a bit on the things you need to type.  As an example, here
is how we can take an existing deployment, stop it, remove it, create a new deployment,
and start it:
</p>
        <code>
          <p>
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | 
<br />
    Get-Deployment -Slot Production | 
<br />
    Set-DeploymentStatus 'Suspended' | 
<br />
    Get-OperationStatus -WaitToComplete | 
</p>
          <p>
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | 
<br />
    Get-Deployment -Slot Production | 
<br />
    Remove-Deployment | 
<br />
    Get-OperationStatus -WaitToComplete
</p>
          <p>
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | 
<br />
    New-Deployment Production $package $config -Label 'v.Next' | 
<br />
    Get-OperationStatus -WaitToComplete
</p>
          <p>
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | 
<br />
    Get-Deployment -Slot Production | 
<br />
    Set-DeploymentStatus 'Running' | 
<br />
    Get-OperationStatus -WaitToComplete
</p>
        </code>
        <p>
Notice that in each case, we are first getting our service by passing in the certificate
and our subscription ID.  Again, since this is Powershell, we can get the certificate
quite easily:
</p>
        <code>$cert = Get-Item cert:\CurrentUser\My\D6BE55AC428FAC6CDEBAFF432BDC0780F1BD00CF</code>
        <p>
You will find your Subscription ID on the portal under the 'Account' tab.  Note
that we are breaking up the steps by using the <strong><em>Get-OperationStatus</em></strong> cmdlet
and having it block until it completes.  This is because the Service Management
API is an asynchronous model.
</p>
        <p>
Similarly, here is a script that will upgrade a single role or the entire deployment
depending on the arguments passed to it:
</p>
        <code>
          <p>
$label = 'nolabel' 
<br />
$role = '' 
</p>
          <p>
if ($args.Length -eq 2) 
<br />
{ 
<br />
    $role = $args[0] 
<br />
    $label = $args[1] 
<br />
} 
</p>
          <p>
if ($args.Length -eq 1) 
<br />
{ 
<br />
    $label = $args[0] 
<br />
} 
</p>
          <p>
if ($role -ne '') 
<br />
{ 
<br />
    Get-HostedService $servicename -Certificate $cert -SubscriptionId
$sub | 
<br />
    Get-Deployment -Slot Production | 
<br />
    Set-Deployment -mode Auto -roleName $role -package $package -label
$label | 
<br />
    Get-OperationStatus -WaitToComplete 
<br />
} 
<br />
else 
<br />
{ 
<br />
    Get-HostedService $servicename -Certificate $cert -SubscriptionId
$sub | 
<br />
    Get-Deployment -Slot Production | 
<br />
    Set-Deployment -mode Auto -package $package -label $label | 
<br />
    Get-OperationStatus -WaitToComplete 
<br />
}
</p>
        </code>
        <p>
          <a href="http://code.msdn.microsoft.com/azurecmdlets">Download the cmdlets from Code
Gallery</a> and leave me some feedback if you like them or if they are not working
for you.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=a4c8084f-de9b-4074-b2e9-5137453466f1" />
      </body>
      <title>Windows Azure Service Management CmdLets</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,a4c8084f-de9b-4074-b2e9-5137453466f1.aspx</guid>
      <link>http://dunnry.com/blog/2009/10/26/WindowsAzureServiceManagementCmdLets.aspx</link>
      <pubDate>Mon, 26 Oct 2009 16:26:16 GMT</pubDate>
      <description>&lt;p&gt;
As I write this, I am sitting on a plane headed back to the US from a wonderful visit
over to our UK office.&amp;#160; While there, I got to meet a number of customers working
with Windows Azure.&amp;#160; It was clear from the interaction that these folks were
looking for a way to simplify how to manage their deployments and build it into an
automated process.
&lt;/p&gt;
&lt;p&gt;
With the release of the &lt;a href="http://blogs.msdn.com/windowsazure/archive/2009/09/17/introducing-the-windows-azure-service-management-api.aspx"&gt;Service
Management API&lt;/a&gt;, this is now possible.&amp;#160; As of today, you can &lt;a href="http://code.msdn.microsoft.com/azurecmdlets"&gt;download
some Powershell cmdlets&lt;/a&gt; that wrap this API and make managing your Windows Azure
applications simple from script.&amp;#160; With these cmdlets, you can script your deploys,
upgrades, and scaling operations very easily.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureServiceManagementCmdLets_757C/clip_image001_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureServiceManagementCmdLets_757C/clip_image001_thumb.jpg" width="504" height="242" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The cmdlets mirror the API quite closely, but since it is Powershell, we support piping
which cuts down quite a bit on the things you need to type.&amp;#160; As an example, here
is how we can take an existing deployment, stop it, remove it, create a new deployment,
and start it:
&lt;/p&gt;
&lt;code&gt; 
&lt;p&gt;
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-Deployment -Slot Production | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Set-DeploymentStatus 'Suspended' | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-OperationStatus -WaitToComplete | 
&lt;/p&gt;
&lt;p&gt;
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-Deployment -Slot Production | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Remove-Deployment | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-OperationStatus -WaitToComplete
&lt;/p&gt;
&lt;p&gt;
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; New-Deployment Production $package $config -Label 'v.Next' | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-OperationStatus -WaitToComplete
&lt;/p&gt;
&lt;p&gt;
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-Deployment -Slot Production | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Set-DeploymentStatus 'Running' | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-OperationStatus -WaitToComplete
&lt;/p&gt;
&lt;/code&gt; 
&lt;p&gt;
Notice that in each case, we are first getting our service by passing in the certificate
and our subscription ID.&amp;#160; Again, since this is Powershell, we can get the certificate
quite easily:
&lt;/p&gt;
&lt;code&gt;$cert = Get-Item cert:\CurrentUser\My\D6BE55AC428FAC6CDEBAFF432BDC0780F1BD00CF&lt;/code&gt; 
&lt;p&gt;
You will find your Subscription ID on the portal under the 'Account' tab.&amp;#160; Note
that we are breaking up the steps by using the &lt;strong&gt;&lt;em&gt;Get-OperationStatus&lt;/em&gt;&lt;/strong&gt; cmdlet
and having it block until it completes.&amp;#160; This is because the Service Management
API is an asynchronous model.
&lt;/p&gt;
&lt;p&gt;
Similarly, here is a script that will upgrade a single role or the entire deployment
depending on the arguments passed to it:
&lt;/p&gt;
&lt;code&gt; 
&lt;p&gt;
$label = 'nolabel' 
&lt;br /&gt;
$role = '' 
&lt;/p&gt;
&lt;p&gt;
if ($args.Length -eq 2) 
&lt;br /&gt;
{ 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; $role = $args[0] 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; $label = $args[1] 
&lt;br /&gt;
} 
&lt;/p&gt;
&lt;p&gt;
if ($args.Length -eq 1) 
&lt;br /&gt;
{ 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; $label = $args[0] 
&lt;br /&gt;
} 
&lt;/p&gt;
&lt;p&gt;
if ($role -ne '') 
&lt;br /&gt;
{ 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-HostedService $servicename -Certificate $cert -SubscriptionId
$sub | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-Deployment -Slot Production | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Set-Deployment -mode Auto -roleName $role -package $package -label
$label | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-OperationStatus -WaitToComplete 
&lt;br /&gt;
} 
&lt;br /&gt;
else 
&lt;br /&gt;
{ 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-HostedService $servicename -Certificate $cert -SubscriptionId
$sub | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-Deployment -Slot Production | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Set-Deployment -mode Auto -package $package -label $label | 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; Get-OperationStatus -WaitToComplete 
&lt;br /&gt;
}
&lt;/p&gt;
&lt;/code&gt; 
&lt;p&gt;
&lt;a href="http://code.msdn.microsoft.com/azurecmdlets"&gt;Download the cmdlets from Code
Gallery&lt;/a&gt; and leave me some feedback if you like them or if they are not working
for you.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=a4c8084f-de9b-4074-b2e9-5137453466f1" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,a4c8084f-de9b-4074-b2e9-5137453466f1.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=3f1a0256-eaa3-4521-84d6-c4e7ae0c65a4</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,3f1a0256-eaa3-4521-84d6-c4e7ae0c65a4.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,3f1a0256-eaa3-4521-84d6-c4e7ae0c65a4.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3f1a0256-eaa3-4521-84d6-c4e7ae0c65a4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Things are getting crazy here at Microsoft getting ready for PDC.  I haven't
had much time to blog or tweet for that matter.  However, I am taking a break
from the grind to announce something I am really excited about - a sample TableBrowser
service we are hosting for developers at <a href="https://www.myazurestorage.com/">MyAzureStorage.com</a>.
</p>
        <p>
We built this service using ASP.NET MVC on a rich AJAX interface.  The goals
of this service were to provide developers to an easy way to create, query, and manage
their Windows Azure tables.  What better way to host this than on a scalable
compute platform like Windows Azure?
</p>
        <p>
          <strong>Create and Delete Tables</strong>
        </p>
        <p>
If you need to create or manage your tables, you get a nice big list of the ones you
have.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_thumb.png" width="504" height="448" />
          </a>
        </p>
        <p>
          <strong>Create, Edit, and Clone your Entities</strong>
        </p>
        <p>
I love being able to edit my table data on the fly.  Since we can clone the entity,
it makes it trivial to copy large entities around and just apply updates.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_4.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_thumb_1.png" width="504" height="469" />
          </a>
        </p>
        <p>
          <strong>Query Entities</strong>
        </p>
        <p>
        </p>
        <p>
Of course, no browser application would be complete without being able to query your
data as well.  Since the ADO.NET Data Services syntax can be a little unfamiliar
at first, we decided to go for a more natural syntax route.  Using simple predicates
long with OR, AND, and NOT operations, you can easily test your queries.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_6.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_thumb_2.png" width="504" height="469" />
          </a>
        </p>
        <p>
          <strong>Display Data</strong>
        </p>
        <p>
Lastly, we have tried to make showing data in Windows Azure as convenient as possible. 
Since data is not necessarily rectangular in nature in Windows Azure tables, we have
given you some options:  First, you can choose the attributes to display in columns
by partition.  Next, you expand the individual entity to show each attribute.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_10.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_thumb_4.png" width="504" height="483" />
          </a>
        </p>
        <p>
          <strong>Please note:</strong>  during login you will need to supply your storage
account name and key.  We <strong>do not</strong> store this key.  It is
kept in an encrypted cookie and passed back and forth on each request.  Furthermore,
we have SSL enabled to protect the channel.
</p>
        <p>
          <a href="https://www.myazurestorage.com/">The service</a> is open for business right
now and will run at least until PDC (and hopefully longer).  Enjoy and let me
know through the blog any feedback you have or issues you run into.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=3f1a0256-eaa3-4521-84d6-c4e7ae0c65a4" />
      </body>
      <title>Launching MyAzureStorage.com</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,3f1a0256-eaa3-4521-84d6-c4e7ae0c65a4.aspx</guid>
      <link>http://dunnry.com/blog/2009/10/07/LaunchingMyAzureStoragecom.aspx</link>
      <pubDate>Wed, 07 Oct 2009 00:27:41 GMT</pubDate>
      <description>&lt;p&gt;
Things are getting crazy here at Microsoft getting ready for PDC.&amp;#160; I haven't
had much time to blog or tweet for that matter.&amp;#160; However, I am taking a break
from the grind to announce something I am really excited about - a sample TableBrowser
service we are hosting for developers at &lt;a href="https://www.myazurestorage.com/"&gt;MyAzureStorage.com&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
We built this service using ASP.NET MVC on a rich AJAX interface.&amp;#160; The goals
of this service were to provide developers to an easy way to create, query, and manage
their Windows Azure tables.&amp;#160; What better way to host this than on a scalable
compute platform like Windows Azure?
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Create and Delete Tables&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
If you need to create or manage your tables, you get a nice big list of the ones you
have.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_2.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://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_thumb.png" width="504" height="448" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Create, Edit, and Clone your Entities&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I love being able to edit my table data on the fly.&amp;#160; Since we can clone the entity,
it makes it trivial to copy large entities around and just apply updates.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_4.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://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_thumb_1.png" width="504" height="469" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Query Entities&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Of course, no browser application would be complete without being able to query your
data as well.&amp;#160; Since the ADO.NET Data Services syntax can be a little unfamiliar
at first, we decided to go for a more natural syntax route.&amp;#160; Using simple predicates
long with OR, AND, and NOT operations, you can easily test your queries.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_6.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://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_thumb_2.png" width="504" height="469" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Display Data&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Lastly, we have tried to make showing data in Windows Azure as convenient as possible.&amp;#160;
Since data is not necessarily rectangular in nature in Windows Azure tables, we have
given you some options:&amp;#160; First, you can choose the attributes to display in columns
by partition.&amp;#160; Next, you expand the individual entity to show each attribute.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_10.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://dunnry.com/blog/content/binary/WindowsLiveWriter/LaunchingMyAzureStorage.com_F584/image_thumb_4.png" width="504" height="483" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Please note:&lt;/strong&gt;&amp;#160; during login you will need to supply your storage
account name and key.&amp;#160; We &lt;strong&gt;do not&lt;/strong&gt; store this key.&amp;#160; It is
kept in an encrypted cookie and passed back and forth on each request.&amp;#160; Furthermore,
we have SSL enabled to protect the channel.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://www.myazurestorage.com/"&gt;The service&lt;/a&gt; is open for business right
now and will run at least until PDC (and hopefully longer).&amp;#160; Enjoy and let me
know through the blog any feedback you have or issues you run into.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=3f1a0256-eaa3-4521-84d6-c4e7ae0c65a4" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,3f1a0256-eaa3-4521-84d6-c4e7ae0c65a4.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=d04a11c7-c621-402d-b7b7-0499bb352ab2</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,d04a11c7-c621-402d-b7b7-0499bb352ab2.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,d04a11c7-c621-402d-b7b7-0499bb352ab2.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d04a11c7-c621-402d-b7b7-0499bb352ab2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Windows Azure has been in CTP since PDC 08 in October of last year.  Since that
time, we have had a fairly simple, yet powerful concept for how to upgrade your application. 
Essentially, we have two environments: staging and production.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_6.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_thumb_2.png" width="504" height="239" />
          </a> 
</p>
        <p>
The difference between these two environments is only in the URI that points to any
web exposed services.  In staging, we give you an opaque GUID-like URI (e.g.
&lt;guidvalue&gt;.cloudapp.net) that is hard to publically discover and in production,
we give you the URI that you chose when you created the hosted service (e.g. &lt;yourservice&gt;.cloudapp.net).
</p>
        <h2>VIP Swaps, Deploys, and Upgrades
</h2>
        <p>
When you wanted to upgrade your service, you needed to deploy the updated service
package containing all your roles into one of the environments.  Typically, this
was in the staging environment.  Whenever you were ready, you would then click
the big button in the middle to swap environments.  This re-programmed the load
balancers and suddenly staging was production and vice versa.  If anything went
wrong in your upgrade, you could hit the button again and you were back to the original
deployment in seconds.  We called this model a "VIP Swap" and it is easy to understand
and very powerful.
</p>
        <p>
We heard from some customers that they wanted more flexibility to upgrade an individual
role without redeploying the entire service.  Typically, this can be because
there might be some state or caching going on in one of the other roles that a VIP
swap would cause to be lost.
</p>
        <p>
The good news is that now you can upgrade individual roles (or even the whole service)
using the in place upgrade.  When you click the new 'Upgrade' button on the portal,
you will see a screen very similar to the 'Deploy' screen that you would be used to
from before, but this time you have two new options.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_8.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_thumb_3.png" width="504" height="444" />
          </a> 
</p>
        <h2>Upgrade Domains
</h2>
        <p>
The first new option allow you to choose if you want the upgrade to be 'Automatic'
or 'Manual' across the upgrade domains.  To understand this option, you would
probably want to understand what an 'Upgrade Domain' is all about.  You can think
of upgrade domains as vertical slices of your application, crossing roles.  So,
if I had a service with a single web role using 10 instances with 2 worker roles,
each with 4 instances, then with 2 upgrade domains, I would have a 5 web role instance,
and 2 + 2 worker roles instances in each upgrade domain.  Illustrated:
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_12.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_thumb_5.png" width="500" height="319" />
          </a>
        </p>
        <p>
If I choose 'Automatic', it simply means that each upgrade domain will be sequentially
be brought down and upgraded in turn.  If I choose 'Manual', then I need to click
another button between each upgrade domain update in order to proceed.
</p>
        <p>
          <strong>Note</strong>:  in the CTP today, 2 upgrade domains are automatically
defined and set.  In the future, you will be able to specify how many upgrade
domains you would like to have.
</p>
        <h2>Role Upgrades
</h2>
        <p>
Next, we have a radio button that specifies if you want to update the whole service,
or a specific role with in the service.  Most folks will likely use the role
specific update.
</p>
        <p>
It is important to note that these upgrades are for the services where the topology
has not changed.  That is, you cannot update the Service Definition (e.g. adding,
removing roles or configuration options).  If you want to change the topology,
you would need to use the more familiar VIP swap model.
</p>
        <p>
Once you click <strong>Deploy</strong>, the selected role will be upgraded according
to the upgrade mode you specified.
</p>
        <p>
More information about in-place upgrades and update domains can be found <a href="http://msdn.microsoft.com/en-us/library/ee517255.aspx">here</a>. 
Lastly, you can of course eschew the portal and perform all of these actions using
the new <a href="http://msdn.microsoft.com/en-us/library/ee460807.aspx">Service Management
API</a>.  Happy upgrading!
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=d04a11c7-c621-402d-b7b7-0499bb352ab2" />
      </body>
      <title>Upgrading Your Service in Windows Azure</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,d04a11c7-c621-402d-b7b7-0499bb352ab2.aspx</guid>
      <link>http://dunnry.com/blog/2009/09/18/UpgradingYourServiceInWindowsAzure.aspx</link>
      <pubDate>Fri, 18 Sep 2009 21:15:14 GMT</pubDate>
      <description>&lt;p&gt;
Windows Azure has been in CTP since PDC 08 in October of last year.&amp;#160; Since that
time, we have had a fairly simple, yet powerful concept for how to upgrade your application.&amp;#160;
Essentially, we have two environments: staging and production.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_6.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://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_thumb_2.png" width="504" height="239" /&gt;&lt;/a&gt;&amp;#160;
&lt;/p&gt;
&lt;p&gt;
The difference between these two environments is only in the URI that points to any
web exposed services.&amp;#160; In staging, we give you an opaque GUID-like URI (e.g.
&amp;lt;guidvalue&amp;gt;.cloudapp.net) that is hard to publically discover and in production,
we give you the URI that you chose when you created the hosted service (e.g. &amp;lt;yourservice&amp;gt;.cloudapp.net).
&lt;/p&gt;
&lt;h2&gt;VIP Swaps, Deploys, and Upgrades
&lt;/h2&gt;
&lt;p&gt;
When you wanted to upgrade your service, you needed to deploy the updated service
package containing all your roles into one of the environments.&amp;#160; Typically, this
was in the staging environment.&amp;#160; Whenever you were ready, you would then click
the big button in the middle to swap environments.&amp;#160; This re-programmed the load
balancers and suddenly staging was production and vice versa.&amp;#160; If anything went
wrong in your upgrade, you could hit the button again and you were back to the original
deployment in seconds.&amp;#160; We called this model a "VIP Swap" and it is easy to understand
and very powerful.
&lt;/p&gt;
&lt;p&gt;
We heard from some customers that they wanted more flexibility to upgrade an individual
role without redeploying the entire service.&amp;#160; Typically, this can be because
there might be some state or caching going on in one of the other roles that a VIP
swap would cause to be lost.
&lt;/p&gt;
&lt;p&gt;
The good news is that now you can upgrade individual roles (or even the whole service)
using the in place upgrade.&amp;#160; When you click the new 'Upgrade' button on the portal,
you will see a screen very similar to the 'Deploy' screen that you would be used to
from before, but this time you have two new options.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_8.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://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_thumb_3.png" width="504" height="444" /&gt;&lt;/a&gt;&amp;#160;
&lt;/p&gt;
&lt;h2&gt;Upgrade Domains
&lt;/h2&gt;
&lt;p&gt;
The first new option allow you to choose if you want the upgrade to be 'Automatic'
or 'Manual' across the upgrade domains.&amp;#160; To understand this option, you would
probably want to understand what an 'Upgrade Domain' is all about.&amp;#160; You can think
of upgrade domains as vertical slices of your application, crossing roles.&amp;#160; So,
if I had a service with a single web role using 10 instances with 2 worker roles,
each with 4 instances, then with 2 upgrade domains, I would have a 5 web role instance,
and 2 + 2 worker roles instances in each upgrade domain.&amp;#160; Illustrated:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_12.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://dunnry.com/blog/content/binary/WindowsLiveWriter/UpgradingYourServiceinWindowsAzure_7A77/image_thumb_5.png" width="500" height="319" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
If I choose 'Automatic', it simply means that each upgrade domain will be sequentially
be brought down and upgraded in turn.&amp;#160; If I choose 'Manual', then I need to click
another button between each upgrade domain update in order to proceed.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Note&lt;/strong&gt;:&amp;#160; in the CTP today, 2 upgrade domains are automatically
defined and set.&amp;#160; In the future, you will be able to specify how many upgrade
domains you would like to have.
&lt;/p&gt;
&lt;h2&gt;Role Upgrades
&lt;/h2&gt;
&lt;p&gt;
Next, we have a radio button that specifies if you want to update the whole service,
or a specific role with in the service.&amp;#160; Most folks will likely use the role
specific update.
&lt;/p&gt;
&lt;p&gt;
It is important to note that these upgrades are for the services where the topology
has not changed.&amp;#160; That is, you cannot update the Service Definition (e.g. adding,
removing roles or configuration options).&amp;#160; If you want to change the topology,
you would need to use the more familiar VIP swap model.
&lt;/p&gt;
&lt;p&gt;
Once you click &lt;strong&gt;Deploy&lt;/strong&gt;, the selected role will be upgraded according
to the upgrade mode you specified.
&lt;/p&gt;
&lt;p&gt;
More information about in-place upgrades and update domains can be found &lt;a href="http://msdn.microsoft.com/en-us/library/ee517255.aspx"&gt;here&lt;/a&gt;.&amp;#160;
Lastly, you can of course eschew the portal and perform all of these actions using
the new &lt;a href="http://msdn.microsoft.com/en-us/library/ee460807.aspx"&gt;Service Management
API&lt;/a&gt;.&amp;#160; Happy upgrading!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=d04a11c7-c621-402d-b7b7-0499bb352ab2" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,d04a11c7-c621-402d-b7b7-0499bb352ab2.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=cce3b152-79e4-4f55-84c6-1e2ef0d8cd54</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,cce3b152-79e4-4f55-84c6-1e2ef0d8cd54.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,cce3b152-79e4-4f55-84c6-1e2ef0d8cd54.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cce3b152-79e4-4f55-84c6-1e2ef0d8cd54</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I am on vacation right now, but I read this over at <a href="http://blog.smarx.com">Steve's
blog</a> and I just had to make sure everyone knows about it.  Right now, when
you register at Microsoft Connect for Windows Azure, you will get an instant token. 
No more 1 or 2 days wait!
</p>
        <p>
          <a href="http://go.microsoft.com/fwlink/?LinkID=129453">Register for Windows Azure</a>
        </p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=cce3b152-79e4-4f55-84c6-1e2ef0d8cd54" />
      </body>
      <title>Instant Windows Azure Tokens</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,cce3b152-79e4-4f55-84c6-1e2ef0d8cd54.aspx</guid>
      <link>http://dunnry.com/blog/2009/09/02/InstantWindowsAzureTokens.aspx</link>
      <pubDate>Wed, 02 Sep 2009 16:44:09 GMT</pubDate>
      <description>&lt;p&gt;
I am on vacation right now, but I read this over at &lt;a href="http://blog.smarx.com"&gt;Steve's
blog&lt;/a&gt; and I just had to make sure everyone knows about it.&amp;#160; Right now, when
you register at Microsoft Connect for Windows Azure, you will get an instant token.&amp;#160;
No more 1 or 2 days wait!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://go.microsoft.com/fwlink/?LinkID=129453"&gt;Register for Windows Azure&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=cce3b152-79e4-4f55-84c6-1e2ef0d8cd54" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,cce3b152-79e4-4f55-84c6-1e2ef0d8cd54.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=867d2885-6e41-4741-8087-a916c58c24e5</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,867d2885-6e41-4741-8087-a916c58c24e5.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,867d2885-6e41-4741-8087-a916c58c24e5.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=867d2885-6e41-4741-8087-a916c58c24e5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
There has been a bit of interest in an application called '<strong>myTODO</strong>'
that we built for the World Partner Conference (WPC) event back in July.  It
is a simple, yet useful application.  The application allows you to create and
share lists very easily.  It integrates with Twitter, so if you decide to share
your lists, it will tweet them and their updates automatically.  You can also
subscribe to lists using standard RSS if Twitter isn't your thing.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/DeployingApplicationsonWindowsAzure_A7B6/image_2.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/DeployingApplicationsonWindowsAzure_A7B6/image_thumb.png" width="453" height="484" />
          </a>
        </p>
        <p>
The funny thing is that we only built this app because we wanted something more interesting
than the standard "Hello World" application.  The entire purpose of the app was
to show how easily you can deploy an application (in just mins) on Windows Azure.
</p>
        <p>
You can learn more about this application in 3 ways:
</p>
        <ol>
          <li>
Get the deployment package and deploy this yourself using our demo script from the <a href="http://go.microsoft.com/fwlink/?LinkID=130354">Windows
Azure Platform Training Kit</a>.  You will find it in the Demos section and called
"Deploying Windows Azure Services". 
</li>
          <li>
Watch me show how the app works and how to deploy it by watching <a href="http://channel9.msdn.com/posts/dunnry/Deploying-Applications-on-Windows-Azure/">my
screencast</a>. 
</li>
          <li>
Download <a href="http://code.msdn.microsoft.com/mytodo">the source code</a> and see
how we built the rich dynamic UI and how we modeled the data using tables. 
</li>
        </ol>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=867d2885-6e41-4741-8087-a916c58c24e5" />
      </body>
      <title>Deploying Applications on Windows Azure</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,867d2885-6e41-4741-8087-a916c58c24e5.aspx</guid>
      <link>http://dunnry.com/blog/2009/08/27/DeployingApplicationsOnWindowsAzure.aspx</link>
      <pubDate>Thu, 27 Aug 2009 18:55:38 GMT</pubDate>
      <description>&lt;p&gt;
There has been a bit of interest in an application called '&lt;strong&gt;myTODO&lt;/strong&gt;'
that we built for the World Partner Conference (WPC) event back in July.&amp;#160; It
is a simple, yet useful application.&amp;#160; The application allows you to create and
share lists very easily.&amp;#160; It integrates with Twitter, so if you decide to share
your lists, it will tweet them and their updates automatically.&amp;#160; You can also
subscribe to lists using standard RSS if Twitter isn't your thing.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/DeployingApplicationsonWindowsAzure_A7B6/image_2.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://dunnry.com/blog/content/binary/WindowsLiveWriter/DeployingApplicationsonWindowsAzure_A7B6/image_thumb.png" width="453" height="484" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The funny thing is that we only built this app because we wanted something more interesting
than the standard "Hello World" application.&amp;#160; The entire purpose of the app was
to show how easily you can deploy an application (in just mins) on Windows Azure.
&lt;/p&gt;
&lt;p&gt;
You can learn more about this application in 3 ways:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Get the deployment package and deploy this yourself using our demo script from the &lt;a href="http://go.microsoft.com/fwlink/?LinkID=130354"&gt;Windows
Azure Platform Training Kit&lt;/a&gt;.&amp;#160; You will find it in the Demos section and called
"Deploying Windows Azure Services". 
&lt;/li&gt;
&lt;li&gt;
Watch me show how the app works and how to deploy it by watching &lt;a href="http://channel9.msdn.com/posts/dunnry/Deploying-Applications-on-Windows-Azure/"&gt;my
screencast&lt;/a&gt;. 
&lt;/li&gt;
&lt;li&gt;
Download &lt;a href="http://code.msdn.microsoft.com/mytodo"&gt;the source code&lt;/a&gt; and see
how we built the rich dynamic UI and how we modeled the data using tables. 
&lt;/li&gt;
&lt;/ol&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=867d2885-6e41-4741-8087-a916c58c24e5" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,867d2885-6e41-4741-8087-a916c58c24e5.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=c07c0d4c-e000-4ea8-835a-45baf502c1da</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,c07c0d4c-e000-4ea8-835a-45baf502c1da.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,c07c0d4c-e000-4ea8-835a-45baf502c1da.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c07c0d4c-e000-4ea8-835a-45baf502c1da</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My teammate <a href="http://blogs.msdn.com/vbertocci/archive/2009/08/04/a-guide-for-enabling-federated-authentication-on-windows-azure-webroles-using-windows-identity-foundation.aspx">Vittorio</a> has
put out some <a href="http://code.msdn.microsoft.com/wifwazpassive">new guidance</a> and
a great <a href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=wifwazpassive&amp;DownloadId=6793">new
toolkit</a> that shows how to use federation today with Windows Identity Foundation
(WIF or Geneva) on Windows Azure.  I know this has been a very common request,
especially as services move outside of the private datacenters and into the cloud
and as vendors try to build true SaaS applications that need to integrate seamlessly
into the customer's experience.
</p>
        <p>
As the technologies evolve, the guidance will be kept up to date.  For now, this
is a great piece of work that gets us past some of the early <a href="http://dunnry.com/blog/WindowsAzureAndGeneva.aspx">roadblocks</a> we
encountered.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=c07c0d4c-e000-4ea8-835a-45baf502c1da" />
      </body>
      <title>Federation on Windows Azure</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,c07c0d4c-e000-4ea8-835a-45baf502c1da.aspx</guid>
      <link>http://dunnry.com/blog/2009/08/05/FederationOnWindowsAzure.aspx</link>
      <pubDate>Wed, 05 Aug 2009 00:20:38 GMT</pubDate>
      <description>&lt;p&gt;
My teammate &lt;a href="http://blogs.msdn.com/vbertocci/archive/2009/08/04/a-guide-for-enabling-federated-authentication-on-windows-azure-webroles-using-windows-identity-foundation.aspx"&gt;Vittorio&lt;/a&gt; has
put out some &lt;a href="http://code.msdn.microsoft.com/wifwazpassive"&gt;new guidance&lt;/a&gt; and
a great &lt;a href="http://code.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=wifwazpassive&amp;amp;DownloadId=6793"&gt;new
toolkit&lt;/a&gt; that shows how to use federation today with Windows Identity Foundation
(WIF or Geneva) on Windows Azure.&amp;#160; I know this has been a very common request,
especially as services move outside of the private datacenters and into the cloud
and as vendors try to build true SaaS applications that need to integrate seamlessly
into the customer's experience.
&lt;/p&gt;
&lt;p&gt;
As the technologies evolve, the guidance will be kept up to date.&amp;#160; For now, this
is a great piece of work that gets us past some of the early &lt;a href="http://dunnry.com/blog/WindowsAzureAndGeneva.aspx"&gt;roadblocks&lt;/a&gt; we
encountered.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=c07c0d4c-e000-4ea8-835a-45baf502c1da" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,c07c0d4c-e000-4ea8-835a-45baf502c1da.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>WIF</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=6a7a73b6-efc4-4c0e-a072-051f312bc2de</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,6a7a73b6-efc4-4c0e-a072-051f312bc2de.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,6a7a73b6-efc4-4c0e-a072-051f312bc2de.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6a7a73b6-efc4-4c0e-a072-051f312bc2de</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
You can download the new SDK and Windows Azure Tools for Visual Studio right now. 
The big feature in this release is the support for multiple roles per deployment (instead
of a single web and worker role).  This is surfaced as a new wizard UI in the
tools.  Additionally, there is new support for any type of web app to be associated
to the project.  Previously this was limited to a specific project type (but
now it <a href="http://blogs.msdn.com/jnak/archive/2009/07/20/associating-an-asp-net-web-application-including-mvc-as-a-web-role.aspx">supports
MVC</a> directly!).
</p>
        <p>
          <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8d75d4f7-77a4-4adf-bce8-1b10608574bb">Download
Windows Azure Tools for Visual Studio (includes SDK)</a>
          <br />
          <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=aa40f3e2-afc5-484d-b4e9-6a5227e73590">Download
Windows Azure SDK</a>
        </p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=6a7a73b6-efc4-4c0e-a072-051f312bc2de" />
      </body>
      <title>Windows Azure SDK update for July</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,6a7a73b6-efc4-4c0e-a072-051f312bc2de.aspx</guid>
      <link>http://dunnry.com/blog/2009/07/20/WindowsAzureSDKUpdateForJuly.aspx</link>
      <pubDate>Mon, 20 Jul 2009 23:19:27 GMT</pubDate>
      <description>&lt;p&gt;
You can download the new SDK and Windows Azure Tools for Visual Studio right now.&amp;#160;
The big feature in this release is the support for multiple roles per deployment (instead
of a single web and worker role).&amp;#160; This is surfaced as a new wizard UI in the
tools.&amp;#160; Additionally, there is new support for any type of web app to be associated
to the project.&amp;#160; Previously this was limited to a specific project type (but
now it &lt;a href="http://blogs.msdn.com/jnak/archive/2009/07/20/associating-an-asp-net-web-application-including-mvc-as-a-web-role.aspx"&gt;supports
MVC&lt;/a&gt; directly!).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8d75d4f7-77a4-4adf-bce8-1b10608574bb"&gt;Download
Windows Azure Tools for Visual Studio (includes SDK)&lt;/a&gt; 
&lt;br /&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=aa40f3e2-afc5-484d-b4e9-6a5227e73590"&gt;Download
Windows Azure SDK&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=6a7a73b6-efc4-4c0e-a072-051f312bc2de" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,6a7a73b6-efc4-4c0e-a072-051f312bc2de.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=3c1f453b-4b3b-45f1-a620-710dd148d18f</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,3c1f453b-4b3b-45f1-a620-710dd148d18f.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,3c1f453b-4b3b-45f1-a620-710dd148d18f.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3c1f453b-4b3b-45f1-a620-710dd148d18f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Ahh, it is the start of a glorious June and here in Washington the weather is starting
to really get nice.  The previous cold and rainy spring must have made the product
group more productive as Windows Azure has continued adding features since the last
major update at MIX.
</p>
        <p>
Given that Windows Azure is a service and not a boxed product, you can expect updates
and features to roll-out over the coming months.  In this round-up, we have a
number of features that have gone live in the last month or two.
</p>
        <h3>New Feature: Geo-Location support
</h3>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureJuneRoundup_F796/clip_image002_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureJuneRoundup_F796/clip_image002_thumb.jpg" width="500" height="245" />
          </a>
        </p>
        <p>
Starting in May, a new option was added to the portal to support geo-locating your
code and data. In order to use this most effectively, the idea of an 'Affinity Group'
was created. This allows you to associate various services under an umbrella label
for the location.
</p>
        <p>
Read more about this feature <a href="http://blogs.msdn.com/jnak/archive/2009/04/30/windows-azure-geo-location-is-live.aspx">here</a> and
see <a href="http://dunnry.com/blog/CreateAndDeployYourWindowsAzureServiceIn5Steps.aspx">a
complete provisioning walk-through</a>.
</p>
        <p>
          <b>
          </b>
        </p>
        <h3>New Feature: Storage API updates
</h3>
        <p>
I briefly <a href="http://dunnry.com/blog/NewWindowsAzureStorageFeatures.aspx">mentioned</a> this
last week, but on Thursday (5/28), new features were released to the cloud for Windows
Azure storage. The long awaited batch transaction capability for tables as well as
a new blob copying capability were released. Additionally, the GetBlockList API was
updated to return both committed and uncommitted blocks in blob storage.
</p>
        <p>
One more significant change of note is that a new versioning mechanism has been added.
New features will be versioned by a new header ("<i>x-ms-version</i>"). This versioning
header must be present to opt-in to new features. This mechanism is in place to prevent
breaking changes from impacting existing clients in the future. It is recommended
that you start including this header in all authenticated API calls.
</p>
        <p>
Rounding out these updates were some changes to how property names are stored in table
storage as well as the size for Partition and Row keys. Unicode chars and up to 1K
key size are supported, respectively. Finally, the timeout values for various storage
operations were updated as well.
</p>
        <p>
For more details, please read <a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/78557516-387e-4517-b34a-19c048fb34d932-a52c-f050e0505b9e">the
announcement</a>.
</p>
        <p>
          <b>Please note: There currently is no SDK support for these new storage features.
The local developer fabric does NOT currently support these features and the StorageClient
SDK sample has not been updated yet. At this point, you need to use the samples provided
on <a href="http://blog.smarx.com/posts/sample-code-for-new-windows-azure-blob-features">Steve
Marx's blog</a>. A later SDK update will add these features officially. </b>
        </p>
        <h3>Windows Azure SDK Update
</h3>
        <p>
          <b>
          </b>
        </p>
        <p>
The May CTP SDK update has been released to the download center. While this release
does <b>NOT</b> support the new storage features, it does add a few new capabilities
that will be of interest to the Visual Studio 2010 beta testers. Specifically:
</p>
        <ul>
          <li>
Support for Visual Studio 2010 Beta 1 (templates, local dev fabric, etc.)</li>
          <li>
Updated support for Visual Studio 2008 - you can now configure settings through the
UI instead of munging XML files.</li>
          <li>
Improved reliability of the local dev fabric for debugging</li>
          <li>
Enhanced robustness and stability (aka bug fixes).</li>
        </ul>
        <p>
Download the <a href="http://go.microsoft.com/fwlink/?LinkId=128752">Windows Azure
Tools for Visual Studio</a> (includes both SDK and tools).
</p>
        <h3>New Windows Azure Applications and Demos
</h3>
        <p>
          <a href="http://code.msdn.microsoft.com/windowsazuremmc">Windows Azure Management
Tool (MMC)</a>
        </p>
        <p>
          <i>The Windows Azure Management Tool was created to manage your storage accounts in
Windows Azure. Developed as a managed MMC, the tool allows you to create and manage
both blobs and queues. Easily create and manage containers, blobs, and permissions.
Add and remove queues, inspect or add messages or empty queues as well.</i>
        </p>
        <p>
          <a href="http://code.msdn.microsoft.com/BidNowSample">Bid Now Sample</a>
        </p>
        <p>
          <i>Bid Now is an online auction site designed to demonstrate how you can build highly
scalable consumer applications. This sample is built using Windows Azure and uses
Windows Azure Storage. Auctions are processed using Windows Azure Queues and Worker
Roles. Authentication is provided via Live Id.</i>
        </p>
        <p>
If you know of new and interesting Windows Azure content that would be of broad interest,
please let me know and I will feature it in later updates.
</p>
        <h3>Relevant Blog Postings
</h3>
        <p>
          <b>
          </b>
        </p>
        <p>
          <a href="http://blog.smarx.com/posts/sample-code-for-new-windows-azure-blob-features">http://blog.smarx.com/posts/sample-code-for-new-windows-azure-blob-features</a>
        </p>
        <p>
          <a href="http://blogs.msdn.com/jnak/archive/2009/05/28/may-ctp-of-the-windows-azure-tools-and-sdk-now-supports-visual-studio-2010-beta-1.aspx">http://blogs.msdn.com/jnak/archive/2009/05/28/may-ctp-of-the-windows-azure-tools-and-sdk-now-supports-visual-studio-2010-beta-1.aspx</a>
        </p>
        <p>
          <a href="http://blogs.msdn.com/jnak/archive/2009/04/30/windows-azure-geo-location-is-live.aspx">http://blogs.msdn.com/jnak/archive/2009/04/30/windows-azure-geo-location-is-live.aspx</a>
        </p>
        <p>
          <a href="http://dunnry.com/blog/CreateAndDeployYourWindowsAzureServiceIn5Steps.aspx">http://dunnry.com/blog/CreateAndDeployYourWindowsAzureServiceIn5Steps.aspx</a>
        </p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=3c1f453b-4b3b-45f1-a620-710dd148d18f" />
      </body>
      <title>Windows Azure June Round-up</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,3c1f453b-4b3b-45f1-a620-710dd148d18f.aspx</guid>
      <link>http://dunnry.com/blog/2009/06/02/WindowsAzureJuneRoundup.aspx</link>
      <pubDate>Tue, 02 Jun 2009 00:53:04 GMT</pubDate>
      <description>&lt;p&gt;
Ahh, it is the start of a glorious June and here in Washington the weather is starting
to really get nice.&amp;#160; The previous cold and rainy spring must have made the product
group more productive as Windows Azure has continued adding features since the last
major update at MIX.
&lt;/p&gt;
&lt;p&gt;
Given that Windows Azure is a service and not a boxed product, you can expect updates
and features to roll-out over the coming months.&amp;#160; In this round-up, we have a
number of features that have gone live in the last month or two.
&lt;/p&gt;
&lt;h3&gt;New Feature: Geo-Location support
&lt;/h3&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureJuneRoundup_F796/clip_image002_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureJuneRoundup_F796/clip_image002_thumb.jpg" width="500" height="245" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Starting in May, a new option was added to the portal to support geo-locating your
code and data. In order to use this most effectively, the idea of an 'Affinity Group'
was created. This allows you to associate various services under an umbrella label
for the location.
&lt;/p&gt;
&lt;p&gt;
Read more about this feature &lt;a href="http://blogs.msdn.com/jnak/archive/2009/04/30/windows-azure-geo-location-is-live.aspx"&gt;here&lt;/a&gt; and
see &lt;a href="http://dunnry.com/blog/CreateAndDeployYourWindowsAzureServiceIn5Steps.aspx"&gt;a
complete provisioning walk-through&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;h3&gt;New Feature: Storage API updates
&lt;/h3&gt;
&lt;p&gt;
I briefly &lt;a href="http://dunnry.com/blog/NewWindowsAzureStorageFeatures.aspx"&gt;mentioned&lt;/a&gt; this
last week, but on Thursday (5/28), new features were released to the cloud for Windows
Azure storage. The long awaited batch transaction capability for tables as well as
a new blob copying capability were released. Additionally, the GetBlockList API was
updated to return both committed and uncommitted blocks in blob storage.
&lt;/p&gt;
&lt;p&gt;
One more significant change of note is that a new versioning mechanism has been added.
New features will be versioned by a new header ("&lt;i&gt;x-ms-version&lt;/i&gt;"). This versioning
header must be present to opt-in to new features. This mechanism is in place to prevent
breaking changes from impacting existing clients in the future. It is recommended
that you start including this header in all authenticated API calls.
&lt;/p&gt;
&lt;p&gt;
Rounding out these updates were some changes to how property names are stored in table
storage as well as the size for Partition and Row keys. Unicode chars and up to 1K
key size are supported, respectively. Finally, the timeout values for various storage
operations were updated as well.
&lt;/p&gt;
&lt;p&gt;
For more details, please read &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/78557516-387e-4517-b34a-19c048fb34d932-a52c-f050e0505b9e"&gt;the
announcement&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Please note: There currently is no SDK support for these new storage features.
The local developer fabric does NOT currently support these features and the StorageClient
SDK sample has not been updated yet. At this point, you need to use the samples provided
on &lt;a href="http://blog.smarx.com/posts/sample-code-for-new-windows-azure-blob-features"&gt;Steve
Marx's blog&lt;/a&gt;. A later SDK update will add these features officially. &lt;/b&gt;
&lt;/p&gt;
&lt;h3&gt;Windows Azure SDK Update
&lt;/h3&gt;
&lt;p&gt;
&lt;b&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
The May CTP SDK update has been released to the download center. While this release
does &lt;b&gt;NOT&lt;/b&gt; support the new storage features, it does add a few new capabilities
that will be of interest to the Visual Studio 2010 beta testers. Specifically:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Support for Visual Studio 2010 Beta 1 (templates, local dev fabric, etc.)&lt;/li&gt;
&lt;li&gt;
Updated support for Visual Studio 2008 - you can now configure settings through the
UI instead of munging XML files.&lt;/li&gt;
&lt;li&gt;
Improved reliability of the local dev fabric for debugging&lt;/li&gt;
&lt;li&gt;
Enhanced robustness and stability (aka bug fixes).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Download the &lt;a href="http://go.microsoft.com/fwlink/?LinkId=128752"&gt;Windows Azure
Tools for Visual Studio&lt;/a&gt; (includes both SDK and tools).
&lt;/p&gt;
&lt;h3&gt;New Windows Azure Applications and Demos
&lt;/h3&gt;
&lt;p&gt;
&lt;a href="http://code.msdn.microsoft.com/windowsazuremmc"&gt;Windows Azure Management
Tool (MMC)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;The Windows Azure Management Tool was created to manage your storage accounts in
Windows Azure. Developed as a managed MMC, the tool allows you to create and manage
both blobs and queues. Easily create and manage containers, blobs, and permissions.
Add and remove queues, inspect or add messages or empty queues as well.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://code.msdn.microsoft.com/BidNowSample"&gt;Bid Now Sample&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;i&gt;Bid Now is an online auction site designed to demonstrate how you can build highly
scalable consumer applications. This sample is built using Windows Azure and uses
Windows Azure Storage. Auctions are processed using Windows Azure Queues and Worker
Roles. Authentication is provided via Live Id.&lt;/i&gt;
&lt;/p&gt;
&lt;p&gt;
If you know of new and interesting Windows Azure content that would be of broad interest,
please let me know and I will feature it in later updates.
&lt;/p&gt;
&lt;h3&gt;Relevant Blog Postings
&lt;/h3&gt;
&lt;p&gt;
&lt;b&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.smarx.com/posts/sample-code-for-new-windows-azure-blob-features"&gt;http://blog.smarx.com/posts/sample-code-for-new-windows-azure-blob-features&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.msdn.com/jnak/archive/2009/05/28/may-ctp-of-the-windows-azure-tools-and-sdk-now-supports-visual-studio-2010-beta-1.aspx"&gt;http://blogs.msdn.com/jnak/archive/2009/05/28/may-ctp-of-the-windows-azure-tools-and-sdk-now-supports-visual-studio-2010-beta-1.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.msdn.com/jnak/archive/2009/04/30/windows-azure-geo-location-is-live.aspx"&gt;http://blogs.msdn.com/jnak/archive/2009/04/30/windows-azure-geo-location-is-live.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/CreateAndDeployYourWindowsAzureServiceIn5Steps.aspx"&gt;http://dunnry.com/blog/CreateAndDeployYourWindowsAzureServiceIn5Steps.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=3c1f453b-4b3b-45f1-a620-710dd148d18f" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,3c1f453b-4b3b-45f1-a620-710dd148d18f.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=f9e0059c-9639-411e-940d-16d398530129</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,f9e0059c-9639-411e-940d-16d398530129.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,f9e0059c-9639-411e-940d-16d398530129.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f9e0059c-9639-411e-940d-16d398530129</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Some new features related to blob and table storage <a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/78557516-387e-4517-b34a-19c048fb34d9" target="_blank">were
announced</a> on the forum today.  The key features announced were:
</p>
        <ol>
          <li>
Transactions support for table operations (batching)</li>
          <li>
Copy Blob API (self explanatory)</li>
          <li>
Updated GetBlockList API now returns both committed and uncommitted block lists</li>
        </ol>
        <p>
There are some more details around bug fixes/changes and timeout updates as well. 
Refer to the announcement for more details.
</p>
        <p>
The biggest impact to developers at this point is that to get these new features,
you will need to include a new versioning header in your call to storage.  Additionally,
the StorageClient library has not been updated yet to reflect these new APIs, so you
will need to wait for some examples (coming from <a href="http://blog.smarx.com" target="_blank">Steve</a>)
or an update to the SDK.  You can also refer to the <a href="http://msdn.microsoft.com/en-us/library/dd179355.aspx" target="_blank">MSDN
documentation</a> for more details on the API and roll your own in the meantime.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=f9e0059c-9639-411e-940d-16d398530129" />
      </body>
      <title>New Windows Azure Storage Features</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,f9e0059c-9639-411e-940d-16d398530129.aspx</guid>
      <link>http://dunnry.com/blog/2009/05/28/NewWindowsAzureStorageFeatures.aspx</link>
      <pubDate>Thu, 28 May 2009 22:28:18 GMT</pubDate>
      <description>&lt;p&gt;
Some new features related to blob and table storage &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/78557516-387e-4517-b34a-19c048fb34d9" target="_blank"&gt;were
announced&lt;/a&gt; on the forum today.&amp;#160; The key features announced were:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Transactions support for table operations (batching)&lt;/li&gt;
&lt;li&gt;
Copy Blob API (self explanatory)&lt;/li&gt;
&lt;li&gt;
Updated GetBlockList API now returns both committed and uncommitted block lists&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
There are some more details around bug fixes/changes and timeout updates as well.&amp;#160;
Refer to the announcement for more details.
&lt;/p&gt;
&lt;p&gt;
The biggest impact to developers at this point is that to get these new features,
you will need to include a new versioning header in your call to storage.&amp;#160; Additionally,
the StorageClient library has not been updated yet to reflect these new APIs, so you
will need to wait for some examples (coming from &lt;a href="http://blog.smarx.com" target="_blank"&gt;Steve&lt;/a&gt;)
or an update to the SDK.&amp;#160; You can also refer to the &lt;a href="http://msdn.microsoft.com/en-us/library/dd179355.aspx" target="_blank"&gt;MSDN
documentation&lt;/a&gt; for more details on the API and roll your own in the meantime.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=f9e0059c-9639-411e-940d-16d398530129" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,f9e0059c-9639-411e-940d-16d398530129.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=9ab7440e-ede5-4dae-83df-ec5535707919</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,9ab7440e-ede5-4dae-83df-ec5535707919.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,9ab7440e-ede5-4dae-83df-ec5535707919.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9ab7440e-ede5-4dae-83df-ec5535707919</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h3>Step 1:  Obtaining a token
</h3>
        <p>
Sign up through <a href="http://dev.windowsazure.com">http://dev.windowsazure.com</a> to
get a token for the service.  Turnaround is pretty quick, so you should have
one in about a day or so.  If you don't see it in a day, make sure you check
your SPAM folder to ensure that the message we send you is not trapped in purgatory
there.
</p>
        <h3>Step 2:  Redeeming the token
</h3>
        <p>
Navigate to the <a href="http://lx.azure.microsoft.com">Windows Azure Portal</a> and
sign-in with the LiveID that you would like to use to manage your Windows Azure applications. 
Today, in the CTP, only a single LiveID can manage your Windows Azure project and
we cannot reassociate the token with another LiveID once redeemed.  As such,
make sure you use the LiveID that you want long term to manage the solution.
</p>
        <p>
The first time you login to the portal, you will be asked to associate your LiveID.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_2.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb.png" width="504" height="427" />
          </a>
        </p>
        <p>
Click 'I Agree' to continue and once the association has been successful click 'Continue'
again.  At this point, you will be presented with an option to redeem a token. 
Here is where you input the token you received in Step 1.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_4.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_1.png" width="504" height="427" />
          </a>
        </p>
        <p>
Enter the token and click 'Next'.  You will then be presented with some EULAs
to peruse.  Read them carefully (or don't) and then click 'Accept'.  You
will get another confirmation screen, so click 'Continue'.
</p>
        <h3>Step 3:  Create your Hosted Service
</h3>
        <p>
At this point, you can now create your first hosted solution.  You should be
on the main Project page and you should see 2 and 1 project(s) remaining for Storage
Account and Hosted Services, respectively.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_8.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_3.png" width="504" height="427" />
          </a>
        </p>
        <p>
Click 'Hosted Services' and provide a Project label and description.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_10.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_4.png" width="504" height="427" />
          </a>
        </p>
        <p>
Click 'Next' and provide a globally unique name that will be the basis for your public
URL.  Click 'Check Availability' and ensure that the name hasn't been taken. 
Next, you will need to create an <strong>Affinity Group</strong> in order to later
get your storage account co-located with your hosted service.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_14.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_6.png" width="504" height="427" />
          </a>
        </p>
        <p>
Click the 'Yes' radio button and the option to create a new Affinity Group. 
Give the Affinity Group a name and select a region where you would like this Affinity
Group located.  Click 'Create' to finish the process.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_16.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_7.png" width="504" height="427" />
          </a>
        </p>
        <h3>Step 4:  Create your Storage account
</h3>
        <p>
Click the 'New Project' link near the left corner of the portal and this time, select
the Storage Account option.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_20.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_9.png" width="504" height="427" />
          </a>
        </p>
        <p>
Similar to before, give a project label and description and click Next.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_22.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_10.png" width="504" height="427" />
          </a>
        </p>
        <p>
Enter a globally unique name for your storage account and click 'Check Availability'. 
Since performance is best when the data is near the compute, you should make sure
that you opt to have your storage co-located with your service.  We can do this
with the <strong>Affinity Group</strong> we created earlier.  Click the 'Yes'
radio button and use the existing Affinity group.  Click 'Create' to finish.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_24.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_11.png" width="504" height="427" />
          </a>
        </p>
        <p>
At this time, you should note that your endpoints have been created for your storage
account and two access keys are provided for you to use for authentication.
</p>
        <h3>Step 5:  Deploying an application.
</h3>
        <p>
At this point, I will skip past the minor detail of actually building an application
for this tutorial and assume you have one (or you choose to use one from the SDK). 
For Visual Studio users, you would want to right click your project and select 'Publish'
to generate <a href="http://blogs.msdn.com/jnak/archive/2009/04/16/digging-in-to-the-windows-azure-service-package.aspx">the
service package</a> you need to upload.  Alternatively, you can use the cspack.exe
tool to create your package.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_26.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_12.png" width="504" height="192" />
          </a>
        </p>
        <p>
Using either method you will eventually have two files:  the actual service package
(cspkg) and a configuration file (cscfg).
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_28.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_13.png" width="504" height="354" />
          </a>
        </p>
        <p>
From the portal, select the hosted service project you just created in Step 3 and
click the 'Deploy' button.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_30.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_14.png" width="504" height="427" />
          </a>
        </p>
        <p>
Browse to the cspkg location and upload both the package and the configuration settings
file (cscfg).  Click 'Deploy'.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_32.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_15.png" width="504" height="427" />
          </a>
        </p>
        <p>
Over the next minute or so, you will see that your package is deploying.  Hold
tight and you will see it come back with the status of "Allocated".  At this
point, click the 'Configure' button<strong>**</strong>.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_34.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_16.png" width="504" height="427" />
          </a>
        </p>
        <p>
In order to use your storage account you created in Step 4, you will need to update
this information from the local development fabric settings to your storage account
settings.  An easy way to get this is to right click your Storage Account project
link in the left hand navigation tabs and open it in a new tab.  With the storage
settings in one tab and the configuration in another, you can easily switch between
the two and cut &amp; paste what you need.
</p>
        <p>
Inside the XML configuration, replace the 'AccountName' setting with your storage
account name.  If you are confused, teh account name is the one that is part
of the unique global URL, i.e. &lt;<strong>youraccountname</strong>&gt;.blob.core.windows.net. 
Enter the 'AccountSharedKey' using the primary access key found on the storage project
page (in your new tab).  Update the endpoints from the loop-back addresses to
the cloud settings:  <a href="https://blob.core.windows.net">https://blob.core.windows.net</a>, <a href="https://queue.core.windows.net">https://queue.core.windows.net</a>, <a href="https://table.core.windows.net">https://table.core.windows.net</a> respectively. 
Note that the endpoints here do <strong>not</strong> include your account name and
we are using https.  Set the 'allowInsecureRemoteEndpoints' to either false or
just delete that XML element.
</p>
        <p>
Finally, update the 'Instances' element to 2 (the limit in the CTP today).  It
is strongly recommended that you run at least 2 instances at all times.  This
ensures that you always have at least one instance running at all times if something
fails or we need to do updates (we update by fault zones and your instances are automatically
placed across fault zones).  Click 'Save' and you will see that your package
is listed as 'Package is updating'.
</p>
        <p>
When your package is back in the 'Allocated' state (a min later or so), click the
'Run' button.  Your service will then go to the 'Initializing' state and you
will need to wait a few mins while it gets your instances up and running.  Eventually,
your app will have a 'Started' status.  Congratulations, your app is deployed
in the Staging environment.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_36.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_17.png" width="504" height="427" />
          </a>
        </p>
        <p>
Once deployed to staging, you should click the staging hyperlink for your app (the
one with the GUID in the DNS name) and test your app.  If you get a hostname
not found error, wait a few more seconds and try again - it is likely that you are
waiting for DNS to update and propagate your GUID hostname. When you are comfortable,
click the big circular button in between the two environments (it has two arrows on
it) and promote your application to the 'production' URL.
</p>
        <p>
Congratulations, you have deployed your first app in Windows Azure.
</p>
        <p>
          <strong>**</strong> Note, this part of the process might be optional for you. 
If you have already configured your developer environment to run against cloud storage
or you are not using the StorageClient sample at all, you might not need to do this
as the uploaded configuration file will already include the appropriate cloud settings. 
Of course, if you are not using these options, you are already likely a savvy user
and this tutorial is unnecessary for you.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=9ab7440e-ede5-4dae-83df-ec5535707919" />
      </body>
      <title>Create and Deploy your Windows Azure Service in 5 Steps</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,9ab7440e-ede5-4dae-83df-ec5535707919.aspx</guid>
      <link>http://dunnry.com/blog/2009/05/22/CreateAndDeployYourWindowsAzureServiceIn5Steps.aspx</link>
      <pubDate>Fri, 22 May 2009 16:38:12 GMT</pubDate>
      <description>&lt;h3&gt;Step 1:&amp;#160; Obtaining a token
&lt;/h3&gt;
&lt;p&gt;
Sign up through &lt;a href="http://dev.windowsazure.com"&gt;http://dev.windowsazure.com&lt;/a&gt; to
get a token for the service.&amp;#160; Turnaround is pretty quick, so you should have
one in about a day or so.&amp;#160; If you don't see it in a day, make sure you check
your SPAM folder to ensure that the message we send you is not trapped in purgatory
there.
&lt;/p&gt;
&lt;h3&gt;Step 2:&amp;#160; Redeeming the token
&lt;/h3&gt;
&lt;p&gt;
Navigate to the &lt;a href="http://lx.azure.microsoft.com"&gt;Windows Azure Portal&lt;/a&gt; and
sign-in with the LiveID that you would like to use to manage your Windows Azure applications.&amp;#160;
Today, in the CTP, only a single LiveID can manage your Windows Azure project and
we cannot reassociate the token with another LiveID once redeemed.&amp;#160; As such,
make sure you use the LiveID that you want long term to manage the solution.
&lt;/p&gt;
&lt;p&gt;
The first time you login to the portal, you will be asked to associate your LiveID.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_2.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Click 'I Agree' to continue and once the association has been successful click 'Continue'
again.&amp;#160; At this point, you will be presented with an option to redeem a token.&amp;#160;
Here is where you input the token you received in Step 1.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_4.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_1.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Enter the token and click 'Next'.&amp;#160; You will then be presented with some EULAs
to peruse.&amp;#160; Read them carefully (or don't) and then click 'Accept'.&amp;#160; You
will get another confirmation screen, so click 'Continue'.
&lt;/p&gt;
&lt;h3&gt;Step 3:&amp;#160; Create your Hosted Service
&lt;/h3&gt;
&lt;p&gt;
At this point, you can now create your first hosted solution.&amp;#160; You should be
on the main Project page and you should see 2 and 1 project(s) remaining for Storage
Account and Hosted Services, respectively.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_8.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_3.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Click 'Hosted Services' and provide a Project label and description.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_10.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_4.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Click 'Next' and provide a globally unique name that will be the basis for your public
URL.&amp;#160; Click 'Check Availability' and ensure that the name hasn't been taken.&amp;#160;
Next, you will need to create an &lt;strong&gt;Affinity Group&lt;/strong&gt; in order to later
get your storage account co-located with your hosted service.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_14.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_6.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Click the 'Yes' radio button and the option to create a new Affinity Group.&amp;#160;
Give the Affinity Group a name and select a region where you would like this Affinity
Group located.&amp;#160; Click 'Create' to finish the process.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_16.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_7.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h3&gt;Step 4:&amp;#160; Create your Storage account
&lt;/h3&gt;
&lt;p&gt;
Click the 'New Project' link near the left corner of the portal and this time, select
the Storage Account option.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_20.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_9.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Similar to before, give a project label and description and click Next.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_22.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_10.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Enter a globally unique name for your storage account and click 'Check Availability'.&amp;#160;
Since performance is best when the data is near the compute, you should make sure
that you opt to have your storage co-located with your service.&amp;#160; We can do this
with the &lt;strong&gt;Affinity Group&lt;/strong&gt; we created earlier.&amp;#160; Click the 'Yes'
radio button and use the existing Affinity group.&amp;#160; Click 'Create' to finish.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_24.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_11.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
At this time, you should note that your endpoints have been created for your storage
account and two access keys are provided for you to use for authentication.
&lt;/p&gt;
&lt;h3&gt;Step 5:&amp;#160; Deploying an application.
&lt;/h3&gt;
&lt;p&gt;
At this point, I will skip past the minor detail of actually building an application
for this tutorial and assume you have one (or you choose to use one from the SDK).&amp;#160;
For Visual Studio users, you would want to right click your project and select 'Publish'
to generate &lt;a href="http://blogs.msdn.com/jnak/archive/2009/04/16/digging-in-to-the-windows-azure-service-package.aspx"&gt;the
service package&lt;/a&gt; you need to upload.&amp;#160; Alternatively, you can use the cspack.exe
tool to create your package.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_26.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_12.png" width="504" height="192" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Using either method you will eventually have two files:&amp;#160; the actual service package
(cspkg) and a configuration file (cscfg).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_28.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_13.png" width="504" height="354" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
From the portal, select the hosted service project you just created in Step 3 and
click the 'Deploy' button.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_30.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_14.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Browse to the cspkg location and upload both the package and the configuration settings
file (cscfg).&amp;#160; Click 'Deploy'.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_32.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_15.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Over the next minute or so, you will see that your package is deploying.&amp;#160; Hold
tight and you will see it come back with the status of "Allocated".&amp;#160; At this
point, click the 'Configure' button&lt;strong&gt;**&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_34.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_16.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
In order to use your storage account you created in Step 4, you will need to update
this information from the local development fabric settings to your storage account
settings.&amp;#160; An easy way to get this is to right click your Storage Account project
link in the left hand navigation tabs and open it in a new tab.&amp;#160; With the storage
settings in one tab and the configuration in another, you can easily switch between
the two and cut &amp;amp; paste what you need.
&lt;/p&gt;
&lt;p&gt;
Inside the XML configuration, replace the 'AccountName' setting with your storage
account name.&amp;#160; If you are confused, teh account name is the one that is part
of the unique global URL, i.e. &amp;lt;&lt;strong&gt;youraccountname&lt;/strong&gt;&amp;gt;.blob.core.windows.net.&amp;#160;
Enter the 'AccountSharedKey' using the primary access key found on the storage project
page (in your new tab).&amp;#160; Update the endpoints from the loop-back addresses to
the cloud settings:&amp;#160; &lt;a href="https://blob.core.windows.net"&gt;https://blob.core.windows.net&lt;/a&gt;, &lt;a href="https://queue.core.windows.net"&gt;https://queue.core.windows.net&lt;/a&gt;, &lt;a href="https://table.core.windows.net"&gt;https://table.core.windows.net&lt;/a&gt; respectively.&amp;#160;
Note that the endpoints here do &lt;strong&gt;not&lt;/strong&gt; include your account name and
we are using https.&amp;#160; Set the 'allowInsecureRemoteEndpoints' to either false or
just delete that XML element.
&lt;/p&gt;
&lt;p&gt;
Finally, update the 'Instances' element to 2 (the limit in the CTP today).&amp;#160; It
is strongly recommended that you run at least 2 instances at all times.&amp;#160; This
ensures that you always have at least one instance running at all times if something
fails or we need to do updates (we update by fault zones and your instances are automatically
placed across fault zones).&amp;#160; Click 'Save' and you will see that your package
is listed as 'Package is updating'.
&lt;/p&gt;
&lt;p&gt;
When your package is back in the 'Allocated' state (a min later or so), click the
'Run' button.&amp;#160; Your service will then go to the 'Initializing' state and you
will need to wait a few mins while it gets your instances up and running.&amp;#160; Eventually,
your app will have a 'Started' status.&amp;#160; Congratulations, your app is deployed
in the Staging environment.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_36.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://dunnry.com/blog/content/binary/WindowsLiveWriter/SettingupasolutioninWindowsAzure_A8F1/image_thumb_17.png" width="504" height="427" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Once deployed to staging, you should click the staging hyperlink for your app (the
one with the GUID in the DNS name) and test your app.&amp;#160; If you get a hostname
not found error, wait a few more seconds and try again - it is likely that you are
waiting for DNS to update and propagate your GUID hostname. When you are comfortable,
click the big circular button in between the two environments (it has two arrows on
it) and promote your application to the 'production' URL.
&lt;/p&gt;
&lt;p&gt;
Congratulations, you have deployed your first app in Windows Azure.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;**&lt;/strong&gt; Note, this part of the process might be optional for you.&amp;#160;
If you have already configured your developer environment to run against cloud storage
or you are not using the StorageClient sample at all, you might not need to do this
as the uploaded configuration file will already include the appropriate cloud settings.&amp;#160;
Of course, if you are not using these options, you are already likely a savvy user
and this tutorial is unnecessary for you.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=9ab7440e-ede5-4dae-83df-ec5535707919" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,9ab7440e-ede5-4dae-83df-ec5535707919.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=c376af46-1bbe-4b9d-8b30-c5cda9c3fc4b</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,c376af46-1bbe-4b9d-8b30-c5cda9c3fc4b.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,c376af46-1bbe-4b9d-8b30-c5cda9c3fc4b.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c376af46-1bbe-4b9d-8b30-c5cda9c3fc4b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Finally!  I have been using some great plugins for VMC that gave me Netflix streaming
support.  However, for the last few weeks all of my computers have been unable
to use Netflix streaming because of DRM issues with the older (non-Silverlight) mechanism. 
I didn't want to upgrade my account to use the Silverlight capability until someone
got it working on VMC.  Now, I finally can.  I can't wait to try it out
- it's the main reason I have Netflix.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=c376af46-1bbe-4b9d-8b30-c5cda9c3fc4b" />
      </body>
      <title>Netflix on Media Center</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,c376af46-1bbe-4b9d-8b30-c5cda9c3fc4b.aspx</guid>
      <link>http://dunnry.com/blog/2009/05/20/NetflixOnMediaCenter.aspx</link>
      <pubDate>Wed, 20 May 2009 16:44:43 GMT</pubDate>
      <description>&lt;p&gt;
Finally!&amp;#160; I have been using some great plugins for VMC that gave me Netflix streaming
support.&amp;#160; However, for the last few weeks all of my computers have been unable
to use Netflix streaming because of DRM issues with the older (non-Silverlight) mechanism.&amp;#160;
I didn't want to upgrade my account to use the Silverlight capability until someone
got it working on VMC.&amp;#160; Now, I finally can.&amp;#160; I can't wait to try it out
- it's the main reason I have Netflix.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=c376af46-1bbe-4b9d-8b30-c5cda9c3fc4b" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,c376af46-1bbe-4b9d-8b30-c5cda9c3fc4b.aspx</comments>
      <category>Media Center</category>
      <category>Personal</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=0126e813-3421-498d-911b-866c86e5b1aa</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,0126e813-3421-498d-911b-866c86e5b1aa.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,0126e813-3421-498d-911b-866c86e5b1aa.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0126e813-3421-498d-911b-866c86e5b1aa</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMC_CA30/image_2.png">
            <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://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMC_CA30/image_thumb.png" width="423" height="82" />
          </a>
        </p>
        <p>
Available immediately from Code Gallery, download the <a href="http://code.msdn.microsoft.com/windowsazuremmc">Windows
Azure MMC</a>. The Windows Azure Management Tool was created to manage your storage
accounts in Windows Azure.
</p>
        <p>
          <a href="http://code.msdn.microsoft.com/windowsazuremmc">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMC_CA30/clip_image003_3.jpg" width="417" height="297" />
          </a>
        </p>
        <p>
Developed as a managed MMC, the tool allows you to create and manage both blobs and
queues. Easily create and manage containers, blobs, and permissions. Add and remove
queues, inspect or add messages or empty queues as well..
</p>
        <h3>Features
</h3>
        <ul>
          <li>
Manage multiple storage accounts 
</li>
          <li>
Easily switch between remote and local storage services 
</li>
          <li>
Manage your blobs 
<ul><li>
Create containers and manage permissions 
</li><li>
Upload files or even entire folders 
</li><li>
Read metadata or preview the blob contents 
</li></ul></li>
          <li>
Manage your queues 
<ul><li>
Create new queues 
</li><li>
Monitor queues 
</li><li>
Read (peek) messages 
</li><li>
Post new messages to the queue 
</li><li>
Purge queues 
</li></ul></li>
        </ul>
        <h3>Known Issues
</h3>
        <p>
The current release does not work with Windows 7 due to a bug in the underlying PowerShell
version. All other OS versions should be unaffected.  We will get this fixed
as soon as possible.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=0126e813-3421-498d-911b-866c86e5b1aa" />
      </body>
      <title>Windows Azure MMC</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,0126e813-3421-498d-911b-866c86e5b1aa.aspx</guid>
      <link>http://dunnry.com/blog/2009/05/14/WindowsAzureMMC.aspx</link>
      <pubDate>Thu, 14 May 2009 21:26:22 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMC_CA30/image_2.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://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMC_CA30/image_thumb.png" width="423" height="82" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Available immediately from Code Gallery, download the &lt;a href="http://code.msdn.microsoft.com/windowsazuremmc"&gt;Windows
Azure MMC&lt;/a&gt;. The Windows Azure Management Tool was created to manage your storage
accounts in Windows Azure.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://code.msdn.microsoft.com/windowsazuremmc"&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="clip_image003" border="0" alt="clip_image003" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/WindowsAzureMMC_CA30/clip_image003_3.jpg" width="417" height="297" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Developed as a managed MMC, the tool allows you to create and manage both blobs and
queues. Easily create and manage containers, blobs, and permissions. Add and remove
queues, inspect or add messages or empty queues as well..
&lt;/p&gt;
&lt;h3&gt;Features
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
Manage multiple storage accounts 
&lt;/li&gt;
&lt;li&gt;
Easily switch between remote and local storage services 
&lt;/li&gt;
&lt;li&gt;
Manage your blobs 
&lt;ul&gt;
&lt;li&gt;
Create containers and manage permissions 
&lt;/li&gt;
&lt;li&gt;
Upload files or even entire folders 
&lt;/li&gt;
&lt;li&gt;
Read metadata or preview the blob contents 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Manage your queues 
&lt;ul&gt;
&lt;li&gt;
Create new queues 
&lt;/li&gt;
&lt;li&gt;
Monitor queues 
&lt;/li&gt;
&lt;li&gt;
Read (peek) messages 
&lt;/li&gt;
&lt;li&gt;
Post new messages to the queue 
&lt;/li&gt;
&lt;li&gt;
Purge queues 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Known Issues
&lt;/h3&gt;
&lt;p&gt;
The current release does not work with Windows 7 due to a bug in the underlying PowerShell
version. All other OS versions should be unaffected.&amp;#160; We will get this fixed
as soon as possible.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=0126e813-3421-498d-911b-866c86e5b1aa" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,0126e813-3421-498d-911b-866c86e5b1aa.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=89d5b584-7299-468e-9ff5-f04a8ac64d12</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,89d5b584-7299-468e-9ff5-f04a8ac64d12.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,89d5b584-7299-468e-9ff5-f04a8ac64d12.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=89d5b584-7299-468e-9ff5-f04a8ac64d12</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://phpazure.codeplex.com/">
            <img style="border-bottom: 0px; border-left: 0px; margin: 0px 20px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/PHPSDKforWindowsAzure_9A1F/image_5.png" width="240" height="57" />
          </a>
        </p>
        <p>
I tweeted this earlier (really never thought I would say that.).  Anyhow, a first
release of the PHP SDK for Windows Azure has been released on CodePlex.  Right
now, it works with blobs and helps with the authentication pieces, but if you look
on the roadmap you will see both queue support and table support coming down the road
this year.
</p>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/PHPSDKforWindowsAzure_9A1F/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; margin: 0px auto; display: block; float: none; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/PHPSDKforWindowsAzure_9A1F/image_thumb.png" width="292" height="278" />
          </a>
        </p>
        <p>
This is a great resource to use if you are a PHP developer looking to host your app
in Windows Azure and leverage the native capabilities of the service (i.e. namely
storage).
</p>
        <p>
          <a href="http://phpazure.codeplex.com/">PHP Azure Project Site</a>
        </p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=89d5b584-7299-468e-9ff5-f04a8ac64d12" />
      </body>
      <title>PHP SDK for Windows Azure</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,89d5b584-7299-468e-9ff5-f04a8ac64d12.aspx</guid>
      <link>http://dunnry.com/blog/2009/05/14/PHPSDKForWindowsAzure.aspx</link>
      <pubDate>Thu, 14 May 2009 17:57:41 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://phpazure.codeplex.com/"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 20px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/PHPSDKforWindowsAzure_9A1F/image_5.png" width="240" height="57" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I tweeted this earlier (really never thought I would say that.).&amp;#160; Anyhow, a first
release of the PHP SDK for Windows Azure has been released on CodePlex.&amp;#160; Right
now, it works with blobs and helps with the authentication pieces, but if you look
on the roadmap you will see both queue support and table support coming down the road
this year.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/PHPSDKforWindowsAzure_9A1F/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px auto; display: block; float: none; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/PHPSDKforWindowsAzure_9A1F/image_thumb.png" width="292" height="278" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This is a great resource to use if you are a PHP developer looking to host your app
in Windows Azure and leverage the native capabilities of the service (i.e. namely
storage).
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://phpazure.codeplex.com/"&gt;PHP Azure Project Site&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=89d5b584-7299-468e-9ff5-f04a8ac64d12" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,89d5b584-7299-468e-9ff5-f04a8ac64d12.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=49e5067b-bd0a-4aef-a2e1-6b8a57c03214</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,49e5067b-bd0a-4aef-a2e1-6b8a57c03214.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,49e5067b-bd0a-4aef-a2e1-6b8a57c03214.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=49e5067b-bd0a-4aef-a2e1-6b8a57c03214</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I use AdBlock Plus and I use NoScript from Firefox (when I am not running IE8). 
I selectively enable ads on sites where I care about the advertising (usually technical
sites).  I absolutely loathe the ads I see on most mainstream sites (usually
some idiotic dancing baby/man/woman/thing hawking predatory loans), so I don't feel
bad in the slightest about blocking them.  That might seem strange given that
I run ads on my blog site.  However, I honestly don't care if folks block them. 
My ads happen to be targeted at technical folks so they should be largely relevant
to the vast majority of my visitors.  Given that a huge proportion of my visits
are via RSS readers, most folks never even see the ads anyway.
</p>
        <p>
Over the last few months I have noticed that NoScript has been updating basically
every time I open and close the browser.  I thought, "wow, these guys must have
found new and interesting exploits almost daily".  Nope, turns out it was <a href="http://arstechnica.com/open-source/news/2009/05/mozilla-ponders-policy-change-after-firefox-extension-battle.ars">a
spat</a> between the author of NoScript and the maintainers of AdBlock Plus.
</p>
        <p>
It seems clear to me that NoScript was in the wrong on this one.  People who
have enabled AdBlock Plus want it because they don't want to see ads.  It really
doesn't matter if NoScript likes it or not.  It is not their settings to mess
with.  Respect your users's choice - end of story.  It also doesn't bode
well for the security architecture of Firefox that these things can mess with each
other, but that is another story.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=49e5067b-bd0a-4aef-a2e1-6b8a57c03214" />
      </body>
      <title>NoScript and the mysterious updates</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,49e5067b-bd0a-4aef-a2e1-6b8a57c03214.aspx</guid>
      <link>http://dunnry.com/blog/2009/05/04/NoScriptAndTheMysteriousUpdates.aspx</link>
      <pubDate>Mon, 04 May 2009 21:21:28 GMT</pubDate>
      <description>&lt;p&gt;
I use AdBlock Plus and I use NoScript from Firefox (when I am not running IE8).&amp;#160;
I selectively enable ads on sites where I care about the advertising (usually technical
sites).&amp;#160; I absolutely loathe the ads I see on most mainstream sites (usually
some idiotic dancing baby/man/woman/thing hawking predatory loans), so I don't feel
bad in the slightest about blocking them.&amp;#160; That might seem strange given that
I run ads on my blog site.&amp;#160; However, I honestly don't care if folks block them.&amp;#160;
My ads happen to be targeted at technical folks so they should be largely relevant
to the vast majority of my visitors.&amp;#160; Given that a huge proportion of my visits
are via RSS readers, most folks never even see the ads anyway.
&lt;/p&gt;
&lt;p&gt;
Over the last few months I have noticed that NoScript has been updating basically
every time I open and close the browser.&amp;#160; I thought, "wow, these guys must have
found new and interesting exploits almost daily".&amp;#160; Nope, turns out it was &lt;a href="http://arstechnica.com/open-source/news/2009/05/mozilla-ponders-policy-change-after-firefox-extension-battle.ars"&gt;a
spat&lt;/a&gt; between the author of NoScript and the maintainers of AdBlock Plus.
&lt;/p&gt;
&lt;p&gt;
It seems clear to me that NoScript was in the wrong on this one.&amp;#160; People who
have enabled AdBlock Plus want it because they don't want to see ads.&amp;#160; It really
doesn't matter if NoScript likes it or not.&amp;#160; It is not their settings to mess
with.&amp;#160; Respect your users's choice - end of story.&amp;#160; It also doesn't bode
well for the security architecture of Firefox that these things can mess with each
other, but that is another story.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=49e5067b-bd0a-4aef-a2e1-6b8a57c03214" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,49e5067b-bd0a-4aef-a2e1-6b8a57c03214.aspx</comments>
      <category>Personal</category>
      <category>Rants</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=1356c5a2-08ee-4a61-9668-1c680d0b5353</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,1356c5a2-08ee-4a61-9668-1c680d0b5353.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,1356c5a2-08ee-4a61-9668-1c680d0b5353.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1356c5a2-08ee-4a61-9668-1c680d0b5353</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was trying to troubleshoot a bug in my worker role in Windows Azure the other day. 
To do this, I have a very cool tool (soon to be released) that lets me peek messages. 
The problem was that I couldn't get ahold of any messages, it was like they were disappearing
right from under my nose.  I would see them in the count, but couldn't get a
single one to open.  I was thinking that I must have a bug in the tool.
</p>
        <p>
Suddenly, the flash of insight came: something was actually popping the messages. 
While I remembered to shut down my local development fabric, I forgot all about the
version I had running in the cloud in the staging environment.  Since I have
been developing against cloud storage, it is actually a shared environment now. 
My staging workers were popping the messages, trying to process them and failing (it
was an older version).  More frustrating, the messages were eventually showing
up again, but getting picked up before I could see them in the tool.
</p>
        <p>
So, what is the lesson here:  when staging, use a different account than your
development accounts.  In fact, this is one of the <a href="http://dunnry.com/blog/WhyDoesWindowsAzureUseACscfgFile.aspx">primary
reasons</a> we have the cscfg file:  don't forget about it.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=1356c5a2-08ee-4a61-9668-1c680d0b5353" />
      </body>
      <title>Overlooking the Obvious</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,1356c5a2-08ee-4a61-9668-1c680d0b5353.aspx</guid>
      <link>http://dunnry.com/blog/2009/04/27/OverlookingTheObvious.aspx</link>
      <pubDate>Mon, 27 Apr 2009 16:49:42 GMT</pubDate>
      <description>&lt;p&gt;
I was trying to troubleshoot a bug in my worker role in Windows Azure the other day.&amp;#160;
To do this, I have a very cool tool (soon to be released) that lets me peek messages.&amp;#160;
The problem was that I couldn't get ahold of any messages, it was like they were disappearing
right from under my nose.&amp;#160; I would see them in the count, but couldn't get a
single one to open.&amp;#160; I was thinking that I must have a bug in the tool.
&lt;/p&gt;
&lt;p&gt;
Suddenly, the flash of insight came: something was actually popping the messages.&amp;#160;
While I remembered to shut down my local development fabric, I forgot all about the
version I had running in the cloud in the staging environment.&amp;#160; Since I have
been developing against cloud storage, it is actually a shared environment now.&amp;#160;
My staging workers were popping the messages, trying to process them and failing (it
was an older version).&amp;#160; More frustrating, the messages were eventually showing
up again, but getting picked up before I could see them in the tool.
&lt;/p&gt;
&lt;p&gt;
So, what is the lesson here:&amp;#160; when staging, use a different account than your
development accounts.&amp;#160; In fact, this is one of the &lt;a href="http://dunnry.com/blog/WhyDoesWindowsAzureUseACscfgFile.aspx"&gt;primary
reasons&lt;/a&gt; we have the cscfg file:&amp;#160; don't forget about it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=1356c5a2-08ee-4a61-9668-1c680d0b5353" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,1356c5a2-08ee-4a61-9668-1c680d0b5353.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Tips</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=2a33fb89-6c57-4ebb-bf1f-a5e1bbf3b320</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,2a33fb89-6c57-4ebb-bf1f-a5e1bbf3b320.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,2a33fb89-6c57-4ebb-bf1f-a5e1bbf3b320.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2a33fb89-6c57-4ebb-bf1f-a5e1bbf3b320</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Or, put another way:  why don't we just use the web.config file?  This question
was recently posed to me and I thought I would share an answer more broadly since
it is a fairly common question.
</p>
        <p>
First, the web.config is part of the deployed package that gets loaded into a diff
disk that in turn is started for you app.  Remember, we are using Hypervisor
VM technology to run your code.  This would mean any change to this file would
require a new diff disk and a restart.  We don't update the actual diff disk
(that would be hard with many instances) without a redeploy. 
</p>
        <p>
Second, the web.config is special only because IIS knows to look for it and restart
when it changes.  If you did that with a standard app.config (think worker roles)
that doesn't work.  We want a mechanism that works for any type of role.
</p>
        <p>
Finally, we have both <strong>staging</strong> and <strong>production</strong>. 
If you wanted to hold different settings (like a different storage account for test
vs. production), you would need to hold these values outside the diff disk again or
you would not be able to promote between environments.
</p>
        <p>
The cscfg file is 'special' and is held outside the diff disk so it can be updated. 
The fabric code (<strong>RoleManager</strong> and its ilk) know when this file is
updated, so it will trigger the app restart for you.  There is some short period
of time between when you update this file and when the fabric notices.  Only
the <strong>RoleManager</strong> and fabric are aware of this file - notice that you
can't get to the values reading it from disk for instance.
</p>
        <p>
And that is why in a nutshell, we have the cscfg file and we don't use web.config
or app.config files.
</p>
        <p>
All that being said, I don't want to give you the impression that you can't use web.config
application settings in Windows Azure - you definitely can.  However, any update
to the web.config file will require a redeploy, so just keep that in mind and choose
the cscfg file when you can.
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=2a33fb89-6c57-4ebb-bf1f-a5e1bbf3b320" />
      </body>
      <title>Why does Windows Azure use a cscfg file?</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,2a33fb89-6c57-4ebb-bf1f-a5e1bbf3b320.aspx</guid>
      <link>http://dunnry.com/blog/2009/04/16/WhyDoesWindowsAzureUseACscfgFile.aspx</link>
      <pubDate>Thu, 16 Apr 2009 18:50:28 GMT</pubDate>
      <description>&lt;p&gt;
Or, put another way:&amp;#160; why don't we just use the web.config file?&amp;#160; This question
was recently posed to me and I thought I would share an answer more broadly since
it is a fairly common question.
&lt;/p&gt;
&lt;p&gt;
First, the web.config is part of the deployed package that gets loaded into a diff
disk that in turn is started for you app.&amp;#160; Remember, we are using Hypervisor
VM technology to run your code.&amp;#160; This would mean any change to this file would
require a new diff disk and a restart.&amp;#160; We don't update the actual diff disk
(that would be hard with many instances) without a redeploy. 
&lt;/p&gt;
&lt;p&gt;
Second, the web.config is special only because IIS knows to look for it and restart
when it changes.&amp;#160; If you did that with a standard app.config (think worker roles)
that doesn't work.&amp;#160; We want a mechanism that works for any type of role.
&lt;/p&gt;
&lt;p&gt;
Finally, we have both &lt;strong&gt;staging&lt;/strong&gt; and &lt;strong&gt;production&lt;/strong&gt;.&amp;#160;
If you wanted to hold different settings (like a different storage account for test
vs. production), you would need to hold these values outside the diff disk again or
you would not be able to promote between environments.
&lt;/p&gt;
&lt;p&gt;
The cscfg file is 'special' and is held outside the diff disk so it can be updated.&amp;#160;
The fabric code (&lt;strong&gt;RoleManager&lt;/strong&gt; and its ilk) know when this file is
updated, so it will trigger the app restart for you.&amp;#160; There is some short period
of time between when you update this file and when the fabric notices.&amp;#160; Only
the &lt;strong&gt;RoleManager&lt;/strong&gt; and fabric are aware of this file - notice that you
can't get to the values reading it from disk for instance.
&lt;/p&gt;
&lt;p&gt;
And that is why in a nutshell, we have the cscfg file and we don't use web.config
or app.config files.
&lt;/p&gt;
&lt;p&gt;
All that being said, I don't want to give you the impression that you can't use web.config
application settings in Windows Azure - you definitely can.&amp;#160; However, any update
to the web.config file will require a redeploy, so just keep that in mind and choose
the cscfg file when you can.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=2a33fb89-6c57-4ebb-bf1f-a5e1bbf3b320" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,2a33fb89-6c57-4ebb-bf1f-a5e1bbf3b320.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://dunnry.com/blog/Trackback.aspx?guid=2ca2ed5d-64aa-4498-b774-5e472c192191</trackback:ping>
      <pingback:server>http://dunnry.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://dunnry.com/blog/PermaLink,guid,2ca2ed5d-64aa-4498-b774-5e472c192191.aspx</pingback:target>
      <dc:creator>Ryan Dunn</dc:creator>
      <wfw:comment>http://dunnry.com/blog/CommentView,guid,2ca2ed5d-64aa-4498-b774-5e472c192191.aspx</wfw:comment>
      <wfw:commentRss>http://dunnry.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2ca2ed5d-64aa-4498-b774-5e472c192191</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Are you looking for more information about Azure Services (Windows Azure, SQL Services,
.NET Services, etc.)?  How about some demos and presentations?  What about
a great little MMC tool to manage all your <strong>.NET Services</strong>?  Great
news - it's here:
</p>
        <h3>Azure Services Training Kit - April Update
</h3>
        <p>
          <a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/AzureTrainingKitandToolsUpdate_BEF5/clip_image001_2.jpg">
            <img style="border-right-width: 0px; margin: 0px 20px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image001" border="0" alt="clip_image001" align="left" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/AzureTrainingKitandToolsUpdate_BEF5/clip_image001_thumb.jpg" width="244" height="170" />
          </a>Today
we released an updated version of the Azure Services Training Kit.   The
first Azure Services Training Kit was released during the week of PDC and it contained
all of the PDC hands-on labs.   Since then, the Azure Services Evangelism
team has been creating new content covering new features in the platform. 
</p>
        <p>
The Azure Services Training Kit April update now includes the following content covering
Windows Azure, .NET Services, SQL Services, and Live Services: 
</p>
        <p>
· <strong>11 hands-on labs</strong> - including new hands-on labs for PHP and Native
Code on Windows Azure. 
</p>
        <p>
· <strong>18 demo scripts</strong> - These demo scripts are designed to provide detailed
walkthroughs of key features so that someone can easily give a demo of a service 
</p>
        <p>
· <strong>9 presentations</strong> - the presentations used for our 3 day training
workshops including speaker notes.
</p>
        <p>
The training kit is available as an installable package on the Microsoft Download
Center. You can download it from <a href="http://go.microsoft.com/fwlink/?LinkID=130354">http://go.microsoft.com/fwlink/?LinkID=130354</a></p>
        <h3>
          <a name="_Azure_Services_Training_1">
          </a>Azure Services Management Tools - April
Update
</h3>
        <p>
The <strong>Azure Services Management Tools</strong> include an MMC SnapIn and Windows
PowerShell cmdlets that enable a user to configure and manage several Azure Services
including <strong>.NET Access Control Services</strong>, and the <strong>.NET Workflow
Service</strong>. These tools can be helpful when developing and testing applications
that use Azure Services. For instance, using these tools you can view and change .NET
Access Control Rules, and deploy and view workflows. 
</p>
        <p>
You can download the latest management tools from <a href="http://code.msdn.microsoft.com/AzureManagementTools">http://code.msdn.microsoft.com/AzureManagementTools</a>. 
</p>
        <img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=2ca2ed5d-64aa-4498-b774-5e472c192191" />
      </body>
      <title>Azure Training Kit and Tools Update</title>
      <guid isPermaLink="false">http://dunnry.com/blog/PermaLink,guid,2ca2ed5d-64aa-4498-b774-5e472c192191.aspx</guid>
      <link>http://dunnry.com/blog/2009/04/09/AzureTrainingKitAndToolsUpdate.aspx</link>
      <pubDate>Thu, 09 Apr 2009 20:35:26 GMT</pubDate>
      <description>&lt;p&gt;
Are you looking for more information about Azure Services (Windows Azure, SQL Services,
.NET Services, etc.)?&amp;#160; How about some demos and presentations?&amp;#160; What about
a great little MMC tool to manage all your &lt;strong&gt;.NET Services&lt;/strong&gt;?&amp;#160; Great
news - it's here:
&lt;/p&gt;
&lt;h3&gt;Azure Services Training Kit - April Update
&lt;/h3&gt;
&lt;p&gt;
&lt;a href="http://dunnry.com/blog/content/binary/WindowsLiveWriter/AzureTrainingKitandToolsUpdate_BEF5/clip_image001_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 20px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image001" border="0" alt="clip_image001" align="left" src="http://dunnry.com/blog/content/binary/WindowsLiveWriter/AzureTrainingKitandToolsUpdate_BEF5/clip_image001_thumb.jpg" width="244" height="170" /&gt;&lt;/a&gt;Today
we released an updated version of the Azure Services Training Kit.&amp;#160;&amp;#160; The
first Azure Services Training Kit was released during the week of PDC and it contained
all of the PDC hands-on labs.&amp;#160;&amp;#160; Since then, the Azure Services Evangelism
team has been creating new content covering new features in the platform. 
&lt;/p&gt;
&lt;p&gt;
The Azure Services Training Kit April update now includes the following content covering
Windows Azure, .NET Services, SQL Services, and Live Services: 
&lt;/p&gt;
&lt;p&gt;
· &lt;strong&gt;11 hands-on labs&lt;/strong&gt; - including new hands-on labs for PHP and Native
Code on Windows Azure. 
&lt;/p&gt;
&lt;p&gt;
· &lt;strong&gt;18 demo scripts&lt;/strong&gt; - These demo scripts are designed to provide detailed
walkthroughs of key features so that someone can easily give a demo of a service 
&lt;/p&gt;
&lt;p&gt;
· &lt;strong&gt;9 presentations&lt;/strong&gt; - the presentations used for our 3 day training
workshops including speaker notes.
&lt;/p&gt;
&lt;p&gt;
The training kit is available as an installable package on the Microsoft Download
Center. You can download it from &lt;a href="http://go.microsoft.com/fwlink/?LinkID=130354"&gt;http://go.microsoft.com/fwlink/?LinkID=130354&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;&lt;a name="_Azure_Services_Training_1"&gt;&lt;/a&gt;Azure Services Management Tools - April
Update
&lt;/h3&gt;
&lt;p&gt;
The &lt;strong&gt;Azure Services Management Tools&lt;/strong&gt; include an MMC SnapIn and Windows
PowerShell cmdlets that enable a user to configure and manage several Azure Services
including &lt;strong&gt;.NET Access Control Services&lt;/strong&gt;, and the &lt;strong&gt;.NET Workflow
Service&lt;/strong&gt;. These tools can be helpful when developing and testing applications
that use Azure Services. For instance, using these tools you can view and change .NET
Access Control Rules, and deploy and view workflows. 
&lt;/p&gt;
&lt;p&gt;
You can download the latest management tools from &lt;a href="http://code.msdn.microsoft.com/AzureManagementTools"&gt;http://code.msdn.microsoft.com/AzureManagementTools&lt;/a&gt;. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://dunnry.com/blog/aggbug.ashx?id=2ca2ed5d-64aa-4498-b774-5e472c192191" /&gt;</description>
      <comments>http://dunnry.com/blog/CommentView,guid,2ca2ed5d-64aa-4498-b774-5e472c192191.aspx</comments>
      <category>Azure</category>
      <category>Cloud Services</category>
    </item>
  </channel>
</rss>