<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>David L's Blog</title><link>http://blogs.msdn.com/davidlem/default.aspx</link><description> &amp;nbsp;</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Windows Azure Project Attire!</title><link>http://blogs.msdn.com/davidlem/archive/2009/07/10/windows-azure-project-attire.aspx</link><pubDate>Thu, 09 Jul 2009 16:24:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9827068</guid><dc:creator>davidlem</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9827068.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9827068</wfw:commentRss><description>&lt;p&gt;So one of my favorite parts of working in the &lt;a href="http://www.microsoft.com/azure/windowsazure.mspx" target="_blank"&gt;Windows Azure&lt;/a&gt; team is the camaraderie that grows when you take a bunch of really smart people and apply them to a big problem. I’m very fortunate to be part of three extremely interesting Windows Azure v-teams (teams assembled for a particular project or work stream); our &lt;a href="http://msdn.microsoft.com/en-us/isv/bb190413.aspx" target="_blank"&gt;TAP&lt;/a&gt; team (I’ll explain a little more about that in a later post), our &lt;a href="http://www.microsoft.com/azure/faq.mspx#pricing" target="_blank"&gt;billing&lt;/a&gt; team, and our &lt;a href="http://blogs.technet.com/msdatacenters/archive/2009/06/29/microsoft-brings-two-more-mega-data-centers-online-in-july.aspx" target="_blank"&gt;deployments&lt;/a&gt; team.&lt;/p&gt;  &lt;p&gt;One thing that I have noticed during the course of this year as we work towards &lt;a href="https://www.ustechsregister.com/pdc09mailinglist/main.aspx" target="_blank"&gt;PDC2009&lt;/a&gt;, is that each team has it’s own dynamic, it’s own challenges and issues, and most of all, it’s own in-jokes. Along the ship path, as the pressure increases, it’s easy to forget to have fun, so the other day, I jumped onto &lt;a href="http://www.zazzle.com/" target="_blank"&gt;Zazzle&lt;/a&gt;, and captured some of the more interesting moments on our road to PDC09 so far. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Filing Bugs Is Free!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;My first one comes from what we call a &lt;a href="http://www.eweek.com/c/a/Application-Development/A-Peek-Inside-the-Microsoft-Whidbey-Ship-Room/" target="_blank"&gt;ship room&lt;/a&gt;, which essentially is a regular meeting (we hold ours twice a week for an hour) where everyone involved in shipping the next release (in our case, billing) attends to triage bugs from the previous release, and discuss blocking issues for the upcoming release. Everyone attends; developers, testers, program managers, release managers, everyone. As the billing team is relatively new, not everyone had worked together. Now, as every dev/test knows, filing bugs is not a trivial task, there is a tension between overfiling (carelessly filing bugs which adds work to the triage team and can cause wasted effort) and underfiling (not wanting to file bugs because it may make the developer look bad, however has the effect of giving an incorrect representation of how solid the codebase is). It’s a tension that exists in every project, and there is no right or wrong balance, you have to take a position that suits your objective. Entering billing ship room, there was definitely a tendency to underfile, but given the importance of billing, we decided that it was better to overfile, wear the cost of triage, to ensure we didn’t miss any bugs, than underfile to optimize for speed of delivery. Hence, the shirt below!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureProjectAttire_840A/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureProjectAttire_840A/image_thumb.png" width="213" height="214" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureProjectAttire_840A/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureProjectAttire_840A/image_thumb_1.png" width="213" height="214" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My Rack’s Too Fat for Singapore!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The second one comes from my experience in our infrastructure deployments team. This team is responsible for deploying all new Windows Azure capacity to support the cloud, which includes selecting hardware/network gear, designing the deployment topology/config, rolling out and setting up the physical assets, and wiring it all up to the Windows Azure grid, both from a wire and software point of view. As you can imagine, it’s a pretty fast paced environment, and I can only imagine, is akin to landing planes; you need to get lots of iron and copper on the ground, in different countries, very very quickly, in quick succession. The other aspect is that we don’t use your standard enterprise configurations, which means are racks tend to be tall, heavy, and many. So it some times happens that a datacenter location may not be able to support our deployments, which was the case with a location we were looking at in Singapore. I couldn’t resist capturing that little moment, in a very literal way in the shirt I’m wearing today!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureProjectAttire_840A/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureProjectAttire_840A/image_thumb_2.png" width="213" height="214" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureProjectAttire_840A/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureProjectAttire_840A/image_thumb_3.png" width="213" height="214" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So keep this in mind, next time your sitting with your project crew, toiling through the hurdles and issues, and that little moment pops up that makes everyone have a laugh and relax, capture it in some way, shape or form. It’s a great way to remind everyone that we do this stuff because we love it, and it also helps keep those moments alive down the path, where trust me, you’ll need them! ;) &lt;/p&gt;  &lt;p&gt;Enjoy! :)&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ab9c7e92-0902-44f5-b8f8-cdad103a77c4" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Work+Stuff" rel="tag"&gt;Work Stuff&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9827068" width="1" height="1"&gt;</description></item><item><title>Looking Inside Windows Azure!</title><link>http://blogs.msdn.com/davidlem/archive/2009/07/06/looking-inside-windows-azure.aspx</link><pubDate>Mon, 06 Jul 2009 06:59:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9819015</guid><dc:creator>davidlem</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9819015.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9819015</wfw:commentRss><description>&lt;p&gt;So I’ve been working on a proof of concept this past week, and one of the biggest issues I’ve had has been trying to see what has been going on with my “container” when I deploy my app to Windows Azure. It’s not that the logs aren’t good enough, but sometimes I need to try interactive commands to see the state of the environment or test something out.&lt;/p&gt;  &lt;p&gt;First, let’s recap a little Windows Azure 101; when you deploy your application, we spin up a VM and deploy your app into that VM. That VM has some policies set, which restrict what you’re able to do compared to your local machine or dev server.&lt;/p&gt;  &lt;p&gt;So how do you see what your VM is doing? Well, since we don’t really provide any option to TS (remote admin) into your VM instances, I had to come up with a slightly different approach. The first step was to flick on a little known setting, but very powerful one:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/LookingInsideWindowsAzure_14C96/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/LookingInsideWindowsAzure_14C96/image_thumb.png" width="428" height="175" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/Dd135736.aspx"&gt;Enabling Native Code Execution&lt;/a&gt; turns off the partial trust policy in Windows Azure, allowing you to run a bunch of functions that you were previously able to run in the old Nov CTP 2008 days.&lt;/p&gt;  &lt;p&gt;My next task was to code up a little page that would allow me to run commands in the VM environment, kind of like a remote console, so I could see what was happening when I was trying to run my app.&lt;/p&gt;  &lt;p&gt;The main bit of code is quite simple, and uses the &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx"&gt;System.Diagnostics.Process&lt;/a&gt; to create a new command window to run my commands, and capture the output back into my ASP.NET page. Here is the code to create the command process and get the return data:&lt;/p&gt;  &lt;div style="padding-bottom: 5px; padding-left: 5px; width: 429px; padding-right: 5px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 5px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0aa114f5-5517-4ce3-b294-8a840a4ea5bf" class="wlWriterEditableSmartContent"&gt;
&lt;div style="border: #000080 1px solid; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt;
&lt;div style="background: #ddd; max-height: auto; overflow: scroll; padding: 0"&gt;
&lt;ol style="background: #a31515; margin: 0 0 0 35px; white-space: wrap"&gt;
&lt;li&gt;newProc.StartInfo.UseShellExecute = &lt;span style="color:#0000ff"&gt;false&lt;/span&gt;;&lt;/li&gt;&lt;li style="background: #970909"&gt;newProc.StartInfo.RedirectStandardOutput = &lt;span style="color:#0000ff"&gt;true&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;newProc.StartInfo.FileName = &lt;span style="color:#a31515"&gt;"cmd"&lt;/span&gt;;&lt;/li&gt;&lt;li style="background: #970909"&gt;newProc.StartInfo.Arguments = &lt;span style="color:#a31515"&gt;"/c "&lt;/span&gt; + txtCommand.Text;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;li style="background: #970909"&gt;newProc.EnableRaisingEvents = &lt;span style="color:#0000ff"&gt;false&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;newProc.Start();&lt;/li&gt;&lt;li style="background: #970909"&gt;&lt;/li&gt;&lt;li&gt;sr = newProc.StandardOutput;&lt;/li&gt;&lt;li style="background: #970909"&gt;&lt;/li&gt;&lt;li&gt;txtStatus.Text += &lt;span style="color:#2b91af"&gt;String&lt;/span&gt;.Format(&lt;span style="color:#a31515"&gt;"{0}&amp;#92;r&amp;#92;n"&lt;/span&gt;, sr.ReadToEnd());&lt;/li&gt;&lt;li style="background: #970909"&gt;&lt;/li&gt;&lt;li&gt;newProc.Close();&lt;/li&gt;&lt;li style="background: #970909"&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;  &lt;p&gt;So I have a simple page now, where I can enter commands, and see what is returned when run within the VM:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/LookingInsideWindowsAzure_14C96/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/LookingInsideWindowsAzure_14C96/image_thumb_1.png" width="428" height="320" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Oh the things one finds out about their VM! :) For example, I can run commands like:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SET&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/LookingInsideWindowsAzure_14C96/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/LookingInsideWindowsAzure_14C96/image_thumb_2.png" width="431" height="134" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NETSTAT&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/LookingInsideWindowsAzure_14C96/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/LookingInsideWindowsAzure_14C96/image_thumb_3.png" width="430" height="139" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;TASKLIST&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/LookingInsideWindowsAzure_14C96/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/LookingInsideWindowsAzure_14C96/image_thumb_4.png" width="430" height="136" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This type of insight is really important, for example, in my task, I was trying to start a new process (&lt;a href="http://tomcat.apache.org/"&gt;Apache Tomcat&lt;/a&gt;), but couldn’t get a response from the default address that Tomcat binds to (&lt;a href="http://127.0.0.1:8080"&gt;http://127.0.0.1:8080&lt;/a&gt;), and couldn’t work out why it worked on my local dev fabric and not in the cloud. I then ran NETSTAT and saw that the 8080 port was already bound to a virtual address, hence why it wouldn’t work for me. &lt;/p&gt;  &lt;p&gt;Anyway, there is a wealth of information that can help you as a developer, when trying to debug/troubleshoot an issue, that can only be gleaned from the live environment, so tuck in!&lt;/p&gt;  &lt;p&gt;Enjoy! :)&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c0482fa8-fad6-420a-9604-1900bcbf9436" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Windows+Azure" rel="tag"&gt;Windows Azure&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9819015" width="1" height="1"&gt;</description></item><item><title>Process Improvement Starts with a Blank Page!</title><link>http://blogs.msdn.com/davidlem/archive/2009/05/01/process-improvement-starts-with-a-blank-page.aspx</link><pubDate>Thu, 30 Apr 2009 18:08:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9580925</guid><dc:creator>davidlem</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9580925.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9580925</wfw:commentRss><description>&lt;p&gt;So anytime you’re doing something more than once, there is an opportunity to do it better every consecutive time. Over my career, I’ve worked in a number of different project teams; software teams, hardware teams, software/hardware teams, even a marketing team!&lt;/p&gt;  &lt;p&gt;One thing that has been consistent about my experience in teams though, is that if you are trying to get many people to work efficiently on one project, you need a process. Now, I know there are those who don’t favor process, and I agree with them that a bad process is just as destructive as no process, but a good process, that’s a different story. And also, sometimes, there isn’t any process in place whatsoever, and I don’t mean there isn’t any processes in existence, it just that the team and project you’re working on hasn’t adopted one.&lt;/p&gt;  &lt;p&gt;So where do you start? Well, I have some principles I’ve always used to guide me thinking.&lt;/p&gt;  &lt;p&gt;First, start with a blank sheet of paper. I have a philosophy that by even having a blank sheet of paper, that represents your process, you’re already off to a good start, because you now have a process to improve on. But if you don’t even have a blank piece of paper, you haven’t got anything to improve on, so you’re doomed to keep starting from scratch and feeling your way through every project, painful ad-hoc step by painful ad-hoc step.&lt;/p&gt;  &lt;p&gt;Second, think logically about the stages/phases of your process, and the functional groups involved. For example, let’s say your trying to build a new product, you can start simply by saying, what are the big steps we will go through as a team, and what are the functional roles that the team will play. This is important if you want to avoid having everyone involved in every part of the project. This kind of high contact leads to burnout and failure, as everyone is always on, even when they don’t need to be, and your project ends up looking like a rave party than a slow waltz. So an example process sheet would look like (I like to use &lt;a href="http://office.microsoft.com/en-us/visio/HP012076771033.aspx"&gt;Visio Cross Functional Flowcharts&lt;/a&gt;):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/ProcessImprovementStartswithaBlankPage_9C7F/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/ProcessImprovementStartswithaBlankPage_9C7F/image_thumb.png" width="417" height="259" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next, you put a simple box in each intersection where a process activity needs to occur. Now, I never put more than a single box in an intersecting square. The purpose of the chart above is to highlight a work interaction between a functional team and a phase, you can drill down into the actual deliverables and steps later. So my process might look like this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/ProcessImprovementStartswithaBlankPage_9C7F/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/ProcessImprovementStartswithaBlankPage_9C7F/image_thumb_1.png" width="417" height="260" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;So for example, in the Requirements phase, the business team are responsible for building the customer requirements. To start with, you may not have any steps, so at the project kickoff, you would start by defining the steps for this project to satisfy that part of the process. Next time around though, you could look back at the last project and say, “Wow, out of the 3 things we did, the focus groups worked really well, so let’s add that to the best practices list for Customer Requirements tasks”. Again, it’s not about forcing people to follow anything more than the high level process, but you also want to capture the prior learning, and express it in a way where someone can look over the task list for a process stage and say, “This was used to get this outcome, and I think I need that outcome for my project, so I’ll use that task”, but also enable people to add new tasks to the catalog.&lt;/p&gt;  &lt;p&gt;The next step is you have to have a basic communications plan. In too many projects, emails fly around between project members and other connected people, with everything from FYI’s to work items and change requests. It’s dangerous because the wrong people can affect the outcome of your project, and critical items get lost in the email explosion. Set up some basic email aliases for your project, at a basic level, have 3:&lt;/p&gt;  &lt;p&gt;1. A basic project comms alias for general FYI comms&lt;/p&gt;  &lt;p&gt;2. A change request alias where requests can be managed&lt;/p&gt;  &lt;p&gt;3. An oversight/stakeholder alias where critical decisions that need stakeholder approval/review can be sent&lt;/p&gt;  &lt;p&gt;You should also attach a contract to each alias, for example, for the oversight alias, you might say that all the people on that alias commit to responding to any email sent to that list within 24 hours. This way, the alias doesn’t just become an vacuum or black hole, and people don’t lose faith in the alias and start emailing people directly. &lt;/p&gt;  &lt;p&gt;And finally, you should have a clear accountability matrix. This ensures that the right people are involved in the right parts of the process, and more importantly, the wrong people are not involved. You matrix should map to your functional groups from your process chart, and should follow a model such as OARPi (Owner, Approver, Reviewer, Participant, Informed). This way, everyone knows when they are involved, and in what capacity. And also, they know who is not involved, so they can filter those people from the process. It really improves the signal:noise ratio for a project.&lt;/p&gt;  &lt;p&gt;And that’s pretty much it. Each time you runt he process for a project, take the time at the end of the project to reflect, then update the body of knowledge for the process, highlighting tasks that worked really well in a phase for a functional group, and also tasks that didn't’, and include enough information for the next person so they know what you were trying to achieve, and what the outcome was.&lt;/p&gt;  &lt;p&gt;Process is good, process is your friend! :)&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c731bb9b-7a84-4f45-b398-ae516ba98722" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Stuff" rel="tag"&gt;Stuff&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9580925" width="1" height="1"&gt;</description></item><item><title>Build the right feature, build the feature right!</title><link>http://blogs.msdn.com/davidlem/archive/2009/04/26/build-the-right-feature-build-the-feature-right.aspx</link><pubDate>Sun, 26 Apr 2009 06:56:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9568935</guid><dc:creator>davidlem</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9568935.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9568935</wfw:commentRss><description>&lt;p&gt;So one of the key responsibilities of a Program Manager at Microsoft is to drive features. Features are the same as functions in some software nomenclature, and essentially, they map to something the software performs to satisfy a customer need.&lt;/p&gt;  &lt;p&gt;Now, over the course of my career as a software engineer, I’ve seen two major disconnects in product teams. The first is where product teams never seem to be able to pick the right features to build. They have great talent, amazingly smart people, lots of resources, but just no direction, so they end up with awesome software that no one wants. I’ve also seen the opposite, teams with great feature lists, but a lack of diligence and professionalism required to ship quality features, so they build a product everyone wants but no one can use or will pay money for. This has led me to distill a little saying which has always held me in good stead: &lt;em&gt;build the right feature, build the feature right&lt;/em&gt;. What does that even mean?&lt;/p&gt;  &lt;p&gt;Well, knowing what features to build is an art in itself. When building a global product, it’s not easy to simply ask your customers what features you should build. Instead you have to use different techniques to ascertain what features are valuable to them, and which are not. You need to take into account multiple inputs, such as focus groups, customer visits, user feedback, market movements and pressures, and insights into areas of possible innovation. By doing this, you make sure that all the hard work the developers will do to produce your feature, is worthwhile not only to the customer, but to the business too.&lt;/p&gt;  &lt;p&gt;Now once you’ve worked out the right features, you need to work out how to build those features right. See, this is where I’ve seen many a software group come unstuck. Picking a good feature is only half the battle, delivering it with quality and style is another. For example, in order to ship a great feature, many factors need to be considered, such as how the customer intends to use the feature, how the customer would like to use the feature, the best way to design the feature so the customer can be efficient and comfortable in using it, and can leverage existing skills and experience to be productive. It’s not good enough to simply cut some code, there needs to be a quality process from design through to deployment to ensure the feature is rock solid and appealing to the customer.&lt;/p&gt;  &lt;p&gt;Shipping great software is about embracing both of these aspects, not just one of the other. &lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:54554226-a921-405a-8b8c-c765fbe24ee0" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Building+Products" rel="tag"&gt;Building Products&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9568935" width="1" height="1"&gt;</description></item><item><title>What is Software + Services?</title><link>http://blogs.msdn.com/davidlem/archive/2009/04/11/what-is-software-services.aspx</link><pubDate>Fri, 10 Apr 2009 16:02:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9543441</guid><dc:creator>davidlem</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9543441.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9543441</wfw:commentRss><description>&lt;p&gt;I came across this video today and really found it simple yet powerful.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:947acbbb-152e-4bbf-97e6-241f187e155d" class="wlWriterEditableSmartContent"&gt;&lt;div id="24016d99-c98d-4648-aff5-9f3c81bf32a7" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://video.msn.com/video.aspx?vid=0603a1bb-321f-4854-b57c-841a35e51803&amp;amp;from=writer" target="_new"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WhatisSoftwareServices_7F05/video17a08879232a.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('24016d99-c98d-4648-aff5-9f3c81bf32a7'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;embed src=\&amp;quot;http://images.video.msn.com/flash/soapbox1_1.swf\&amp;quot; quality=\&amp;quot;high\&amp;quot; width=\&amp;quot;432\&amp;quot; height=\&amp;quot;364\&amp;quot; wmode=\&amp;quot;transparent\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; pluginspage=\&amp;quot;http://macromedia.com/go/getflashplayer\&amp;quot; flashvars=\&amp;quot;c=v&amp;amp;v=0603a1bb-321f-4854-b57c-841a35e51803&amp;amp;from=writer&amp;amp;mkt=en-US\&amp;quot; &amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;For me, the best part of this video is it puts a real context around the whole S+S story, which to date, has been pretty hard to decipher. &lt;/p&gt;  &lt;p&gt;The main takeaway as I see it, is that you can’t achieve everything you need from just desktop/server software or the cloud, you need a little bit of both. Why not have your cake and eat it too I say! ;)&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8ef37ee8-368b-41a6-b2e3-8f0e7c4ea259" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/S%2bS" rel="tag"&gt;S+S&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9543441" width="1" height="1"&gt;</description></item><item><title>Design for Failure, Growth and Distribution!</title><link>http://blogs.msdn.com/davidlem/archive/2009/03/25/design-for-failure-growth-and-distribution.aspx</link><pubDate>Tue, 24 Mar 2009 14:06:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9504275</guid><dc:creator>davidlem</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9504275.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9504275</wfw:commentRss><description>&lt;p&gt;When designing any piece of software, there are always going to be design tenants that you practice based on the type of software being developed. &lt;/p&gt;  &lt;p&gt;For service software that is designed for a global, business critical audience, there are three key tenets in my opinion. In fact, there not so much tenets as they are assumptions. &lt;/p&gt;  &lt;p&gt;So when you start designing your service(s), you need to design with the assumption that your service is going to do the following, and do it on a regular basis:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Fail      &lt;ul&gt;       &lt;li&gt;This does not only mean your service will fail during runtime execution, but also during upgrades, deployment of new functionality, bug fixes, configuration changes to the environment&lt;/li&gt;        &lt;li&gt;Your operating environment will fail. Power will go out, network appliances will die, hard disks will crash, CPU and Memory will fault, assume it will all happen, and probably all at once&lt;/li&gt;        &lt;li&gt;In a standard data center deployment, you need to work out what your minimum unit of failure is. Is it a rack? Is it a switch? The data center? Knowing this helps you work out how to distribute your service to counter failures.&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Grow &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Your application is going to need to serve lots and lots of requests, so think about the scale of your application. Not only scale out (as in, the ability to serve lots of incoming requests simultaneously) but also scale up (make sure your application can dole out capacity)&lt;/li&gt;      &lt;li&gt;Bandwidth and Ingress/Egress is also a concern, pipes in and out of your service are constrained by physical limitations, so you’re going to have to think about how to deal with heavy load on your network and how your application will deal with this during peak and off-peak periods&lt;/li&gt;      &lt;li&gt;At some point, you service is going to exceed the place its located, as in, there just won’t be any more machines to deploy your service to, and there won’t be any more space to deploy more machines, so you’re going to have to design your service with the goal that you can deploy it across many servers across many data centers &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Distribute      &lt;ul&gt;       &lt;li&gt;Your customers invariably will want your service closest to them, and they will invariably never be located closest to your primary deployment data center, so design your service in a way that it can serve your customers at the point that closest to them. It reduces latency and improves service quality and experience&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Also, designing a service involves thinking through the whole application lifecycle. Traditionally, we think about issues and bugs at the runtime level, but with services, because they are always on, living, breathing systems, you have to design them in a way that they can be changed (upgraded, configured differently, etc) at any time without interrupting its availability (the ability for customers to connect and use your service) and its consistency (the state maintained by the system must always be consistent and correct).&lt;/p&gt;  &lt;p&gt;Now, this is by no means the magna carta of service design, but as you start thinking about designing your always available, highly scalable, geo-distributable service, the tenets above should be good food for thought.&lt;/p&gt;  &lt;p&gt;Enjoy :)&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e02bb99d-3436-4020-80c1-e407e292c276" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Design" rel="tag"&gt;Design&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Services" rel="tag"&gt;Services&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9504275" width="1" height="1"&gt;</description></item><item><title>Windows Azure: March 2009 CTP!!!</title><link>http://blogs.msdn.com/davidlem/archive/2009/03/20/windows-azure-march-2009-ctp.aspx</link><pubDate>Thu, 19 Mar 2009 20:41:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9491091</guid><dc:creator>davidlem</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9491091.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9491091</wfw:commentRss><description>&lt;p&gt;OK folks, so all the &lt;a href="http://blogs.msdn.com/windowsazure/"&gt;announcements have been made for Mix&lt;/a&gt;, so it’s time to get cranking!&lt;/p&gt;  &lt;p&gt;We have a new release of tools and SDK bits.&lt;/p&gt;  &lt;p&gt;First, you’ll need to install some pre-reqs, &lt;strong&gt;&lt;u&gt;but only if you are going to exploit some of the new capabilities&lt;/u&gt;&lt;/strong&gt;:&lt;/p&gt;  &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=145526"&gt;Hotfix: Native Debugging Improvements&lt;/a&gt; (Tools only; and only if you intend to do native debugging) &lt;/li&gt;  &lt;li&gt;&lt;a href="http://support.microsoft.com/kb/967131"&gt;Hotfix: Support for FastCGI on the Development Fabric&lt;/a&gt; (SDK and Tools; but only if you intend to use the FastCGI capabilities)&lt;/li&gt;  &lt;li&gt;&lt;a href="http://www.iis.net/extensions/URLRewrite"&gt;IIS7.0 URL Rewrite Module&lt;/a&gt; (SDK Only; and only if you are using URL rewrite rules)&lt;/li&gt;  &lt;p&gt;If you don’t plan to use native code, FastCGI or URL rewriting, then don’t worry about the pre-reqs above.&lt;/p&gt;  &lt;p&gt;Then, the tools and/or SDK. One big thing to note about the March release is we now have two install options:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;If you don’t use Visual Studio, then you can download the standalone &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=b44c10e8-425c-417f-af10-3d2839a5a362&amp;amp;displaylang=en"&gt;Windows Azure SDK here&lt;/a&gt;, or&lt;/li&gt;    &lt;li&gt;If you use Visual Studio, then you can now get an all up &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=59e8fc0c-c399-4ab7-8a93-882d8e74b67a&amp;amp;displaylang=en"&gt;VS Tools for Windows Azure and Windows Azure SDK installer here&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:effb47c9-5435-4f7a-8759-52b0f4f6eeaa" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Windows+Azure" rel="tag"&gt;Windows Azure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SDK" rel="tag"&gt;SDK&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9491091" width="1" height="1"&gt;</description></item><item><title>Courtoons! See, Lawyers Are Worthwhile!</title><link>http://blogs.msdn.com/davidlem/archive/2009/03/19/courtoons-see-lawyers-are-worthwhile.aspx</link><pubDate>Wed, 18 Mar 2009 18:58:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9487653</guid><dc:creator>davidlem</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9487653.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9487653</wfw:commentRss><description>&lt;p&gt;My colleague and fellow Windows Azure PM Matt Kerner put me on to this site:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://courtoons.wordpress.com/" href="http://courtoons.wordpress.com/"&gt;http://courtoons.wordpress.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Very fun cartoons related to Law/Legal subjects. My favorite (so far):&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://courtoons.wordpress.com/2009/03/12/dream/"&gt;&lt;img title="Dreams Courtoon" alt="Dreams Courtoon" src="http://courtoons.files.wordpress.com/2009/03/dreams.jpg?w=448&amp;amp;h=362" width="448" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;He he :)&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cd484fa4-46fa-49d7-b94f-2d2066b1ff1e" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Funsies" rel="tag"&gt;Funsies&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9487653" width="1" height="1"&gt;</description></item><item><title>Sofa Skirts… What’s the Deal?</title><link>http://blogs.msdn.com/davidlem/archive/2009/03/07/sofa-skirts-what-s-the-deal.aspx</link><pubDate>Fri, 06 Mar 2009 23:31:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9463614</guid><dc:creator>davidlem</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9463614.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9463614</wfw:commentRss><description>&lt;p&gt;So one of the things I’ve noticed since moving to the U.S is the complete obsession American’s (now, I’m being facetious, this observation is based purely on advertising) have with clothing you can wear while on the sofa/couch!&lt;/p&gt;  &lt;p&gt;First I saw the “&lt;a href="https://www.getsnuggie.com/"&gt;Snuggie&lt;/a&gt;”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SofaSkirtsWhatstheDeal_DA53/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SofaSkirtsWhatstheDeal_DA53/image_thumb_1.png" width="244" height="140" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Essentially, it’s a blanket with sleeves, and has raised the ire of other perplexed &lt;a href="http://www.infomercial-hell.com/blog/2008/09/16/snuggie-blanket-with-sleeves-another-candidate-for-the-stupid-products-hall-of-fame/"&gt;consumers&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;But then Yil sent me this today!&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.pantalaine.com/dress.html"&gt;Pantalaine “Couch Dress”&lt;/a&gt;! WTF!?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SofaSkirtsWhatstheDeal_DA53/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SofaSkirtsWhatstheDeal_DA53/image_thumb.png" width="244" height="166" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To be honest, if I’m going to get out and about with a piece of clothing that seconds as a coverlet, I’m going with the Pantalaine, I mean, just look how hot the model looks! Smoking!&lt;/p&gt;  &lt;p&gt;Enjoy :)&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:de34b5ce-bac5-45ac-b3d0-ff75cb86a617" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Wearable+Blankets" rel="tag"&gt;Wearable Blankets&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Crazy+Stuff" rel="tag"&gt;Crazy Stuff&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9463614" width="1" height="1"&gt;</description></item><item><title>Windows Azure: Settings Are Settings Are Settings..? Maybe Not!</title><link>http://blogs.msdn.com/davidlem/archive/2009/03/06/windows-azure-settings-are-settings-are-settings-maybe-not.aspx</link><pubDate>Thu, 05 Mar 2009 23:41:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9461029</guid><dc:creator>davidlem</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9461029.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9461029</wfw:commentRss><description>&lt;p&gt;So I’m back from Oz and have been tinkering with a small worker role app that grabs my Twitter feed and aggregates how many posts my friends have been doing as a scoreboard (I’ll post that tomorrow).&lt;/p&gt;  &lt;p&gt;One of the design decisions I’ve had to make has been where to store the configuration settings.&lt;/p&gt;  &lt;p&gt;See, in &lt;a href="http://msdn.microsoft.com/en-us/library/dd179367.aspx"&gt;Windows Azure&lt;/a&gt;, you can either:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Store your configuration settings using the App.config file for your project, then use the standard libraries from .NET to read those, or &lt;/li&gt;    &lt;li&gt;Use the ConfigurationSettings element within your &lt;a href="http://msdn.microsoft.com/en-us/library/dd179447.aspx"&gt;Service Configuration&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/dd179359.aspx"&gt;Service Definition&lt;/a&gt; files, and use the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.servicehosting.serviceruntime.rolemanager.getconfigurationsetting.aspx"&gt;RoleManager.GetConfigurationSetting()&lt;/a&gt; method to read the setting &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What’s the diff?&lt;/p&gt;  &lt;p&gt;Well, when you store your settings in your Service Configuration and Definition files, you are able to change those settings without having to redeploy your application. If you use the App.config file, any change you make won’t be picked up until you redeploy your app.&lt;/p&gt;  &lt;p&gt;Allow me to demonstrate.&lt;/p&gt;  &lt;p&gt;So, first you need to define your setting in your ServiceDefinition file:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/image_thumb.png" width="230" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And add the ConfigurationSetting section into it:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ServiceDefinition&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SettingsExample&amp;quot;&lt;/span&gt; &lt;br /&gt;                   &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/_&lt;br /&gt;                   ServiceHosting/2008/10/ServiceDefinition&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;WebRole&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;WebRole&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;InputEndpoints&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="rem"&gt;&amp;lt;!-- Must use port 80 for http and port 443 &lt;br /&gt;      for https when running in the cloud --&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;InputEndpoint&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;HttpIn&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;protocol&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;port&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;80&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;InputEndpoints&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ConfigurationSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Setting&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;DefaultWelcome&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ConfigurationSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;WebRole&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ServiceDefinition&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Next, define some values in the ServiceConfiguration file:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/image_thumb_1.png" width="233" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;And set the values:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ServiceConfiguration&lt;/span&gt; &lt;span class="attr"&gt;serviceName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SettingsExample&amp;quot;&lt;/span&gt; &lt;br /&gt;                      &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://schemas.microsoft.com/_&lt;br /&gt;                      ServiceHosting/2008/10/ServiceConfiguration&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Role&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;WebRole&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Instances&lt;/span&gt; &lt;span class="attr"&gt;count&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ConfigurationSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Setting&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;DefaultWelcome&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;value&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Manishkta&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ConfigurationSettings&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Role&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ServiceConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;Next, you need to access your setting in your app, so you use the RoleManager.GetConfigurationSetting() to read it, like so:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.ServiceHosting.ServiceRuntime;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; SettingsExample_WebRole
{
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; _Default : System.Web.UI.Page
    {
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Button1_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            lblGreeting.Text = &lt;br /&gt;            RoleManager.GetConfigurationSetting(&lt;span class="str"&gt;&amp;quot;DefaultWelcome&amp;quot;&lt;/span&gt;) + &lt;br /&gt;            &lt;span class="str"&gt;&amp;quot; &amp;quot;&lt;/span&gt; + txtName.Text;
        }
    }
}&lt;/pre&gt;

&lt;p&gt;Then &lt;a href="http://lx.azure.microsoft.com/"&gt;deploy&lt;/a&gt; your app:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/image_thumb_2.png" width="233" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, when I run my app, it pulls the setting from my Windows Azure app deployment:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/image_thumb_4.png" width="244" height="110" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Next, let’s go change the setting live without messing with our deployment, to start, click the configure button:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/image_thumb_3.png" width="244" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Then change and save the setting:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/image_14.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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/image_thumb_6.png" width="244" height="234" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Windows Azure will reconfig your app:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/image_thumb_5.png" width="244" height="228" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;And it will now use the new setting:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/image_16.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://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/SettingsAreSettingsAreSettings.MaybeNot_D1DB/image_thumb_7.png" width="244" height="114" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;This saves you from having to completely package up and redeploy your app every time you want to change a setting (due to changes in business rules or between production and staging environments for example).&lt;/p&gt;

&lt;p&gt;Also, if you want to know how to paste code into your posts, check out this &lt;a href="http://gallery.live.com/liveItemDetail.aspx?li=1f57bd9b-a692-4593-9e9e-e2962d9c0eee&amp;amp;bt=9&amp;amp;pl=8"&gt;Live Writer Add-in&lt;/a&gt;! It rocks!&lt;/p&gt;

&lt;p&gt;Chau :)&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:becc6d6e-9794-47eb-b6e0-765cc4dff70c" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Windows+Azure" rel="tag"&gt;Windows Azure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Settings" rel="tag"&gt;Settings&lt;/a&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9461029" width="1" height="1"&gt;</description></item><item><title>Windows Azure - Accessing the Request.Url Property!</title><link>http://blogs.msdn.com/davidlem/archive/2009/01/27/windows-azure-accessing-the-request-url-property.aspx</link><pubDate>Mon, 26 Jan 2009 23:00:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9376461</guid><dc:creator>davidlem</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9376461.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9376461</wfw:commentRss><description>&lt;p&gt;So I've blogged previously about a &lt;a href="http://blogs.msdn.com/davidlem/archive/2009/01/07/windows-azure-and-web-services.aspx" target="_blank"&gt;known issue regarding port translation/mapping in Windows Azure&lt;/a&gt;, and today (well, today and a few weeks ago) I came across an interesting side effect of this issue when accessing the Request.Url property within a Windows Azure web role.&lt;/p&gt;  &lt;p&gt;Now, anytime you access the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httpcontext.request.aspx" target="_blank"&gt;HttpContext.Request&lt;/a&gt;.&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httprequest.url.aspx" target="_blank"&gt;Url&lt;/a&gt; property (or any derivation of that), you will be unknowingly getting some extra info you may not want.&lt;/p&gt;  &lt;p&gt;For example (and as it happens, the piece of code at the center of today's investigation), if you are building a new URL in your Windows Azure application by calling:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;string RootUri = &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httpcontext.current.aspx" target="_blank"&gt;HttpContext.Current&lt;/a&gt;.&lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httprequest.url.aspx" target="_blank"&gt;Request.Url&lt;/a&gt;.&lt;a href="http://msdn.microsoft.com/en-us/library/system.uri.getcomponents.aspx" target="_blank"&gt;GetComponents&lt;/a&gt;(&lt;a href="http://msdn.microsoft.com/en-us/library/7767559y.aspx" target="_blank"&gt;UriComponents&lt;/a&gt;.SchemeAndServer, UriFormat.Unescaped); &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You're going to get something along the lines of:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Scheme:&lt;/strong&gt; Http&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Server:&lt;/strong&gt; x.cloudapp.net&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Port:&lt;/strong&gt; 20000 &lt;font color="#ff0000"&gt;&amp;lt;-- Aha!&lt;/font&gt; (I added the &lt;font color="#ff0000"&gt;&amp;lt;-- Aha!&lt;/font&gt; for dramatic effect)&lt;/p&gt;  &lt;p&gt;This is going to cause your app issues if you are then trying to use that in a dynamic link or web request.&lt;/p&gt;  &lt;p&gt;The solution is simple, anytime you call something that returns a &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.httprequest.url.aspx" target="_blank"&gt;Request.Url&lt;/a&gt; object, make sure you ensure any calls you make on that Url object do not explicitly return the port (this gets tricky when doing local testing where you need the port, so you'll need to manage that). Construct your new URL with only host or path details, otherwise you'll make mischief for yourself!&lt;/p&gt;  &lt;p&gt;Enjoy :)&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dbe0b85f-0460-4f63-8181-bded7dc1414e" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Windows%20Azure" rel="tag"&gt;Windows Azure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Request.Url" rel="tag"&gt;Request.Url&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9376461" width="1" height="1"&gt;</description></item><item><title>Windows Azure SDK on Windows 7 Beta!</title><link>http://blogs.msdn.com/davidlem/archive/2009/01/16/windows-azure-sdk-on-windows-7-beta.aspx</link><pubDate>Thu, 15 Jan 2009 21:12:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9321575</guid><dc:creator>davidlem</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9321575.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9321575</wfw:commentRss><description>&lt;p&gt;So with the new release of our &lt;a href="http://blogs.msdn.com/davidlem/archive/2009/01/15/windows-azure-sdk-and-tools-refresh.aspx" target="_blank"&gt;SDK and VS Tools&lt;/a&gt; and the recent release of &lt;a href="http://technet.microsoft.com/en-us/evalcenter/dd353205.aspx" target="_blank"&gt;Windows 7 Beta&lt;/a&gt;, some folks may have tried to run one on the other...&lt;/p&gt;  &lt;p&gt;Well, in case you have and are wondering why some parts don't work, or in case you haven't and were thinking of trying to, or haven't and were thinking you might look good in mauve stretchy velour pants (like I did that one time at last years MSFT Christmas party), I have some info for you.&lt;/p&gt;  &lt;p&gt;First, there is an issue with running the SDK (not the tools) on Windows 7 Beta. Essentially, you can install the SDK, but when you try to run your project on the local developer fabric, it will fall over. &lt;/p&gt;  &lt;p&gt;Second, we're actively working on the problem, both us and the Windows 7 team, so as soon as we work out a solution we'll get it out to folks.&lt;/p&gt;  &lt;p&gt;&lt;strike&gt;So what do you do in the meantime? My personal approach was to download the &lt;/strike&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c7a809d8-8c9f-439f-8147-948bc6957812&amp;amp;displaylang=en" target="_blank"&gt;&lt;strike&gt;VSTS 2008 SP1/TFS SP1 free trial&lt;/strike&gt;&lt;/a&gt;&lt;strike&gt; VPC (it expires on the 31st of December, 2009, which should give us enough time to sort the issue out ;)), install the SDK on that, then run that inside &lt;/strike&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=28C97D22-6EB8-4A09-A7F7-F6C7A1F000B5&amp;amp;displaylang=en" target="_blank"&gt;&lt;strike&gt;Virtual PC 2007 SP1&lt;/strike&gt;&lt;/a&gt;&lt;strike&gt;.&lt;/strike&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;Update:&lt;/font&gt;&lt;/strong&gt; So as usual, I rushed through my post, made a bunch of bad assumptions, and ended up costing some folks a lot of wasted time... I'm sooo sorry! What happened? Well, to get past the Win7/Windows Azure SDK issue, &lt;strong&gt;I&lt;/strong&gt; run a VPC environment on my laptop for demos. &lt;strong&gt;I &lt;/strong&gt;actually got this VPC from an internal location, and thought it was VSTS 2008 running on Windows Server 2003. I installed the SDK, it runs great, so I then posted the above, pointing folks to a publicly available VPC that I thought/assumed was the same as mine. :( It wasn't. Turns out the one I have is actually Windows Server 2008, not Windows Server 2003. And as I'm not able to post the one I have, I have a work around. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; Grab a base &lt;a href="http://technet.microsoft.com/en-us/bb738372.aspx" target="_blank"&gt;VHD&lt;/a&gt; from here, either the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c2c27337-d4d1-4b9b-926d-86493c7da1aa" target="_blank"&gt;Vista&lt;/a&gt; or &lt;a href="http://www.microsoft.com/windowsserver2008/en/us/virtual-hard-drive.aspx" target="_blank"&gt;Windows Server 2008&lt;/a&gt; one.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; Download and install one of the &lt;a href="http://msdn.microsoft.com/en-us/visualc/aa700831.aspx" target="_blank"&gt;VS 2008 trials&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; Install the Windows Azure SDK and VS Tools for Windows Azure on that.&lt;/p&gt;  &lt;p&gt;Again, so sorry for the muck-up.&lt;/p&gt;  &lt;p&gt;Enjoy :)&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:494807f9-1f2f-478c-8748-b8a97ca2bdaa" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Windows%20Azure%20SDK" rel="tag"&gt;Windows Azure SDK&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows%207%20Beta" rel="tag"&gt;Windows 7 Beta&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9321575" width="1" height="1"&gt;</description></item><item><title>Windows Azure SDK and Tools Refresh!</title><link>http://blogs.msdn.com/davidlem/archive/2009/01/15/windows-azure-sdk-and-tools-refresh.aspx</link><pubDate>Thu, 15 Jan 2009 02:03:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9319863</guid><dc:creator>davidlem</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9319863.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9319863</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/windowsazure/archive/2009/01/14/ser.aspx" target="_blank"&gt;Today we released refreshes to both the Windows Azure SDK and the VS Tools for Windows Azure&lt;/a&gt;! &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=80e3eabf-0507-4560-aeb6-d31e9a70a0a6" target="_blank"&gt;Windows Azure SDK&lt;/a&gt; (this has the dev fabric and local storage stuff)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8e90b639-1ef0-4e21-bb73-fc22662911bc" target="_blank"&gt;VS Tools for Windows Azure&lt;/a&gt; (this has the templates and integration functionality to connect to the local and live environments for developing Windows Azure applications using Visual Studio)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What's hot in the new refresh?&lt;/p&gt;  &lt;p&gt;Well, first we fixed a pesky little problem with VS hanging when you hit F5. For some customers, this ended up locking up the environment and you had to kill VS to get it all sorted, this is a huge fix.&lt;/p&gt;  &lt;p&gt;We also fixed the limitation of using special characters in entities, which affected some update or delete operations.&lt;/p&gt;  &lt;p&gt;There have also been a bunch of performance fixes, so the overall user experience feels a lot nicer compared to the PDC release.&lt;/p&gt;  &lt;p&gt;There's quite a bit more in this release, however I only mentioned the issues that affected me most, I'm selfish like that (I'm sorry, please don't judge me).&lt;/p&gt;  &lt;p&gt;So get cranking and download the new version, you won't be disappointed (especially me, since tonight is pizza night too!!).&lt;/p&gt;  &lt;p&gt;Enjoy :)&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b6844af5-f363-4906-99f6-9dfb55d3c434" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Windows%20Azure%20Samples" rel="tag"&gt;Windows Azure Samples&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows%20Azure%20SDK" rel="tag"&gt;Windows Azure SDK&lt;/a&gt;,&lt;a href="http://technorati.com/tags/VS%20Tools%20for%20Windows%20Azure" rel="tag"&gt;VS Tools for Windows Azure&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9319863" width="1" height="1"&gt;</description></item><item><title>Windows Azure - Sending SMTP Emails!</title><link>http://blogs.msdn.com/davidlem/archive/2009/01/08/windows-azure-sending-smtp-emails.aspx</link><pubDate>Thu, 08 Jan 2009 02:52:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9292927</guid><dc:creator>davidlem</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9292927.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9292927</wfw:commentRss><description>&lt;p&gt;A question popped up today about sending emails from within the Windows Azure environment, specifically using &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx" target="_blank"&gt;SmtpClient&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;So, to cover off some basics:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;The Windows Azure environment itself does not currently provide a SMTP relay or mail relay service&lt;/li&gt; &lt;li&gt;.NET applications run under a variation of the standard ASP.NET medium trust policy called &lt;a href="http://msdn.microsoft.com/en-us/library/dd179369.aspx" target="_blank"&gt;Windows Azure Trust policy&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Port 25 is open (well, all ports are open actually) to outbound traffic for Windows Azure applications&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;As we don't provide a host for sending or relaying SMTP mail messages, you'll need to find one that will. Your ISP or free mail provider will do providing they are setup to enable SMTP relaying.&lt;/p&gt; &lt;p&gt;Next, there is an issue with using the SmtpClient class with its &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.port.aspx" target="_blank"&gt;Port&lt;/a&gt; property set to something other than 25 and its trust election, see this forum thread:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/409f1c6b-ba7a-4efa-aecf-51900d7f8c64/" href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/409f1c6b-ba7a-4efa-aecf-51900d7f8c64/"&gt;http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/409f1c6b-ba7a-4efa-aecf-51900d7f8c64/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;So to demo this, I whipped up a quick sample app that sends STMP emails through a relay host as a web role:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureSendingSMTPEmails_10983/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="385" alt="image" src="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureSendingSMTPEmails_10983/image_thumb.png" width="431" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The code is here:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="http://davidlem.svn.beanstalkapp.com/windowsazure/trunk/Windows%20Azure%20Hacking/AzureMail/" href="http://davidlem.svn.beanstalkapp.com/windowsazure/trunk/Windows%20Azure%20Hacking/AzureMail/"&gt;http://davidlem.svn.beanstalkapp.com/windowsazure/trunk/Windows%20Azure%20Hacking/AzureMail/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;And the app is deployed here:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="http://196ac97b-025f-46e8-9216-c573a28590f5.cloudapp.net/Default.aspx" href="http://196ac97b-025f-46e8-9216-c573a28590f5.cloudapp.net/Default.aspx"&gt;http://196ac97b-025f-46e8-9216-c573a28590f5.cloudapp.net/Default.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Enjoy :)&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ca68d74a-f11d-4515-aa9b-5464338d36e8" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Windows%20Azure%20Samples" rel="tag"&gt;Windows Azure Samples&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SmtpMail" rel="tag"&gt;SmtpMail&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Medium%20Trust" rel="tag"&gt;Medium Trust&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9292927" width="1" height="1"&gt;</description></item><item><title>Windows Azure and Web Services!</title><link>http://blogs.msdn.com/davidlem/archive/2009/01/07/windows-azure-and-web-services.aspx</link><pubDate>Wed, 07 Jan 2009 01:54:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9286643</guid><dc:creator>davidlem</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/davidlem/comments/9286643.aspx</comments><wfw:commentRss>http://blogs.msdn.com/davidlem/commentrss.aspx?PostID=9286643</wfw:commentRss><description>&lt;p&gt;So I've had a couple of questions about hosting web services (SOAP style services in the form of *.aspx pages in a Web Role or *.svc files in the form of WCF services) in Windows Azure, specifically, how to get them to work?&lt;/p&gt;  &lt;p&gt;Now, &lt;a href="http://blogs.msdn.com/davidlem/archive/2008/12/16/windows-azure-what-happens-in-the-data-center.aspx" target="_blank"&gt;as I've mentioned before&lt;/a&gt;, Windows Azure uses a design where the executing environment that your hosted service is running in is actually just a pre-configured VM running Windows Server 2008 x64 with .NET 3.5 Fx installed amongst other things. So technically, running an ASP.NET web service or a WCF service should be nothing more than adding the required components (pages) to your web role. But before you get to your VM, there is some infrastructure that you need to step across, and this is what is currently providing some challenges to running hosted web services on Windows Azure.&lt;/p&gt;  &lt;p&gt;So right now, if you create a new web role project, add an asmx page to it, publish it to the cloud, and run the page, it will work a treat. If you then add that web reference to a client project, you will get an error. The error happens because of the way we currently configure the internal Windows Azure environment to handle internal and external comms pathways (how your external URI maps to your internal machine URI). &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureandWebServices_D599/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="326" alt="image" src="http://blogs.msdn.com/blogfiles/davidlem/WindowsLiveWriter/WindowsAzureandWebServices_D599/image_thumb.png" width="436" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Now this is a known issue but until we release a fix, the workaround is:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Create your web role and add your service definition (asmx or svc component)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Run the project using the local development fabric&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; While the service is running, add the local reference to your client project which will generate a compliant wrapper. This is important, because if you try to add a reference to your published service, you will run into the issue above. By adding the reference against the local service, you get the service definition added to your project.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Now publish the service, and record the URI (should be something like &lt;a href="http://guidforstaging_or_accountnameforlive.cloudapp.net/service.asmx_or_svc"&gt;http://guidforstaging_or_accountnameforlive.cloudapp.net/service.asmx_or_svc&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; Go into your client project, and update the web service reference URI from the local address to your live address&lt;/p&gt;  &lt;p&gt;Your service will now be able to connect to your live service and have all the information it needs to communicate without having to do the discovery process against the live environment.&lt;/p&gt;  &lt;p&gt;Here is a quick screen cast that demonstrates the work around process.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:6630b1f4-8815-49b6-9236-76fee290ea67" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 430px; padding-top: 0px"&gt;&lt;div&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="430" height="336"&gt; &lt;param name="movie" value="http://content.screencast.com/users/Davidlem/folders/Windows%20Azure%20Clips/media/a09db710-a7fb-434f-bb29-5b7f50f993e8/PortMapping_controller.swf"&gt;&lt;/param&gt; &lt;param name="quality" value="high"&gt;&lt;/param&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;/param&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/Davidlem/folders/Windows%20Azure%20Clips/media/a09db710-a7fb-434f-bb29-5b7f50f993e8/FirstFrame.png&amp;amp;width=430&amp;amp;height=336&amp;amp;showstartscreen=true&amp;amp;showendscreen=true&amp;amp;loop=false&amp;amp;autostart=false&amp;amp;color=000000,000000&amp;amp;thumbscale=45&amp;amp;content=http://content.screencast.com/users/Davidlem/folders/Windows Azure Clips/media/a09db710-a7fb-434f-bb29-5b7f50f993e8/PortMapping.mp4"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt; &lt;param name="scale" value="showall"&gt;&lt;/param&gt; &lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt; &lt;param name="base" value="http://content.screencast.com/users/Davidlem/folders/Windows%20Azure%20Clips/media/a09db710-a7fb-434f-bb29-5b7f50f993e8/"&gt;&lt;/param&gt;  &lt;embed src="http://content.screencast.com/users/Davidlem/folders/Windows%20Azure%20Clips/media/a09db710-a7fb-434f-bb29-5b7f50f993e8/PortMapping_controller.swf" quality="high" bgcolor="#FFFFFF" width="430" height="336" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/Davidlem/folders/Windows%20Azure%20Clips/media/a09db710-a7fb-434f-bb29-5b7f50f993e8/FirstFrame.png&amp;width=430&amp;height=336&amp;showstartscreen=true&amp;showendscreen=true&amp;loop=false&amp;autostart=false&amp;color=000000,000000&amp;thumbscale=45&amp;content=http://content.screencast.com/users/Davidlem/folders/Windows Azure Clips/media/a09db710-a7fb-434f-bb29-5b7f50f993e8/PortMapping.mp4" allowFullScreen="true" base="http://content.screencast.com/users/Davidlem/folders/Windows%20Azure%20Clips/media/a09db710-a7fb-434f-bb29-5b7f50f993e8/" scale="showall"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;/div&gt;&lt;label style="font-size:.8em;"&gt;Screencast&lt;/label&gt;&lt;/div&gt;  &lt;p&gt;Also, check out the following links for more info:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/0be800f9-f7b3-4b27-bd85-10e81c5ef669/" href="http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/0be800f9-f7b3-4b27-bd85-10e81c5ef669/"&gt;http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/0be800f9-f7b3-4b27-bd85-10e81c5ef669/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jnak/archive/2008/11/10/asp-net-mvc-on-windows-azure-with-providers.aspx"&gt;http://blogs.msdn.com/jnak/archive/2008/11/10/asp-net-mvc-on-windows-azure-with-providers.aspx&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Enjoy :)&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:bb2f9bef-f559-43b6-bb00-7a978acf6f39" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Windows%20Azure%20Samples" rel="tag"&gt;Windows Azure Samples&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Web%20Services" rel="tag"&gt;Web Services&lt;/a&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9286643" width="1" height="1"&gt;</description></item></channel></rss>