• Cloudy in Seattle

    Would you like to give input to Microsoft?

    • 0 Comments

    Would you be willing to provide input & feedback that will help us make Visual Studio better for you?

    As Satya presented on 3/27, we're not uniquely focused on Windows, but on all devices. If you are building internal mobile (Phone/Tablet)  business apps for any device, using any set of technologies and tools, we’re interested in talking with you.

    If this matches your development please fill out a quick questionnaire and we will contact you to schedule a phone call.

    Click here to start the questionnaire

    Thank you!

  • Cloudy in Seattle

    Requesting feedback from business app developers and IT decision makers

    • 0 Comments

    I'm doing research for the Visual Studio team at Microsoft to better understand the needs and problems faced by developers that build business apps that are internal to their company (apps for their employees) – we want to help them build their apps faster and more reliably.

     

    My goal is to chat with this set of developers to better understand their world and to evaluate whether we should be pursuing various ideas.  The technologies they are using or the devices they are targeting don’t matter, just that they are building internal apps for the company’s employees.

     

    If you are building internal business apps, I’d like to ask for 30 minutes of your time for a discussion over the phone.  Please send me an email at "jnak" @ Microsoft.com.  Your time would be greatly appreciated and hopefully it’ll result in us building products to support you better.

     

    If this isn’t you and you know someone who would be appropriate, please forward this along.

     

    Thanks so much!

  • Cloudy in Seattle

    Rapid Developer Deploy to Windows Azure

    • 11 Comments

    At PDC10, I did a session Building, Deploying and Managing Windows Azure Applications that covered the end to end experience of using Windows Azure.

    To watch the recording, go to http://player.microsoftpdc.com/session click on “Guide”, my session is at 1130 on Thursday.

    As part of the session I was able to show some of the cool new features we have coming in our next release (coming sometime in November or December of 2010) and I’m following up with a series of blog posts.

    The first in this series is showing the rapid developer develop feature.

    As part of developing a web site that runs on Windows Azure, it is really common for the developer not only to iterate on F5 but also to iterate in the cloud.

    Today, iterating on the cloud requires a full redeployment which can be a lengthy operation.  We set out to make this scenario better.

    I’ll start with a Cloud Service that has a single Web role and I’ll just use the default ASP.NET template.

    image

    To enable rapid developer deploy, right click on the Cloud Service node in Solution Explorer, select publish and on the publish dialog, enable remote desktop (post coming soon) and select the checkbox to “Enable Web Deploy”:

    image

    Once the deployment has completed, view the web page in IE:

    image

    and you’ll see the standard ASP.NET template.  Since at the time of this writing, this is not live, you’ll see that I’m showing this in one of our test clusters, cloudapp-preview.net.

    image 

    From here, I can go back and make any changes I want to my web site. In this case, I’ll just update the text on that main page.

    image

    Hit “save” and right click on the WebRole1 project this time and select publish.

    image

    This will bring up a dialog where the settings to deploy to the web role are already setup.  Make sure you fill out the username/pass at the bottom of the dialog.

    image 

    Note: The settings for this profile are saved to the project folder, in my sample they are saved in a file called WebRole1.Publish.xml.  The tools created this file on your behalf.

    After the web deploy publish completes – really in the matter of seconds (depends on the extent of the changes and payload of course) – I can go back to IE, refresh the browser and…

    image

    The changes were deployed to the Windows Azure.  Yes, in the matter of seconds.  As someone that iterates a lot on the cloud, I’m really happy we have this feature coming in v1.3.

    What’s Going On?

    The checkbox on the cloud service deploy dialog sets up MS deploy on the web role instance which we then use the standard VS tools for MS deploy to deploy to that instance. 

    We need to have Remote Desktop enabled, not because it uses remote desktop but because it needs a user account.  This requirement is likely to be removed over time.

    Why Developer Deploy?

    The reason why this is supported only for a single instance developer scenario is because we’re only modifying the instance, we’re not modifying the package that Windows Azure will use to create new instances.

    Additionally, because Windows Azure instances are stateless (to support scale out) an OS update or other management operation can result in that instance being replaced by a different instance which means that the changes you made through web deploy will be lost.

    As you can imagine, those behaviors are not acceptable for production but are totally fine for the developer scenario.

    We’ll eventually get a full story around this but didn’t want to wait to solve the developer case first.

    Finally

    This will be coming between now and the end of the year (2010) – let me know what you think.

  • Cloudy in Seattle

    Hope to see you at PDC – live or online

    • 2 Comments

    Next week, I’ll be speaking at PDC.  The sessions were published recently and I’ll be speaking on Thursday at 11:30AM PST.

    Building, Deploying, and Managing Windows Azure Applications

    In order to take full advantage of Windows Azure and SQL Azure, you need to know more than just how to write the code. You need to know how to incorporate your application in a team environment, deploy, monitor, manage and retrieve diagnostic information back from the cloud. In this session, you will learn everything you need to know to be successful with a project that utilizes Windows Azure and SQL Azure including setting up your development environment, automating build, unit test and deployments to different deployment environments from staging to production, and managing credentials and user roles using the Windows Azure Portal.

    I’ll frame the talk a little differently.  My talk has 3 sections, Setting up the cloud, Deploying to the cloud and Viewing into the cloud and I’ll be covering a mix of what’s there today and some cool new features we have coming sometime before the end of the year.

    What’s unique about this PDC is that all of the sessions will be broadcast live online at: http://player.microsoftpdc.com/ so if you couldn’t make it live, I hope that you can watch online and twitter along @jnakashima.

    I’m pretty jazzed, looking forward to seeing you there – live or online.

    image

  • Cloudy in Seattle

    Windows Azure Tools featured on Cloud Cover

    • 2 Comments

    Aside from the fact that I was setup and they took every opportunity they could to give me a hard time, I had a lot of fun as a guest on Cloud Cover with Ryan Dunn and Steve Marx.

    image

    I showed the new features in our latest June 2010 release of the Windows Azure Tools.

    I am also scheming on how I’ll get my revenge on a future episode of Cloud Cover, feel free to send me some ideas :)

  • Cloudy in Seattle

    VerificationException from Windows Azure IntelliTrace

    • 2 Comments

    Kyle has posted about a problem you may see if you use IntelliTrace in the Cloud to debug your RIA Services on Windows Azure.

    In a nutshell, if you see these exceptions:

    and the client, this will appear as the standard “Not Found” CommunicationException when looking through an IntelliTrace log downloaded from the Cloud then you are running into the issue.

    Kyle goes over 3 options, the least impactful is to simply add the following line to the modules to exclude: *System.ServiceModel.DomainServices.*

    Let’s talk about the underlying issue and when you might see this in your own code.

    The issue is that IntelliTrace itself has a bug where methods that have a boolean out parameter in an assembly that is marked as SecurityTransparent will fail when IntelliTrace collection is set to “high” which is the default in the Cloud IntelliTrace scenario.

    You will see this in your own code if you have a method whose signature includes a boolean out parameter and you have set your assembly security to SecurityTransparent.

    For example:

    protected void Button1_Click(object sender, EventArgs e)
    {
        bool val = true;
        DummyBoolOut(out val);
    
        Label1.Text = "Clicked the button";
    }
    
    private void DummyBoolOut(out bool retBool)
    {
        retBool = false;
    }

    and in the assembly level attributes:

    [assembly: System.Security.SecurityTransparent()]

    When I run this on Windows Azure, I get a VerficiationException on the call to DummyBoolOut().

    image

    image

    You can continue to use IntelliTrace but would need to exclude your module (i.e. assembly) from being instrumented and you would do so by clicking on the IntelliTrace settings on the Windows Azure deploy dialog:

    image

    And adding your assembly to the module exclusion list.

    image

  • Cloudy in Seattle

    Windows Azure Tools Goes International

    • 0 Comments

    We’re happy to announce that the June 2010 release of the Windows Azure Tools for Microsoft Visual Studio 2010 is now available in German, French, Japanese, Chinese, Spanish, Italian, Russian and Korean.

    On the download page select the language you want to install if it isn’t set to the right default:

    image

    image

    A couple of notes:

    • In order for the Windows Azure Tools to show up as localized in Visual Studio, the Visual Studio language has to match.
    • The localization of the Windows Azure Platform, Developer Portal and SDK is still in the works.  Stay tuned.
  • Cloudy in Seattle

    Windows Azure Storage Browser in the Visual Studio Server Explorer

    • 5 Comments

    As part of the June 2010 release of the Windows Azure Tools, we now have a Windows Azure Storage browser in the Visual Studio Server Explorer:

    image

    It is our first cut at this feature and we've been iterating fairly quickly on the Windows Azure Tools so I'm excited about having this feature not only for what it delivers today but also because it lays the foundation for the future.  In this post, I'll go over what you can and can’t do with the Windows Azure Storage browser and how added some features to hopefully make it easier for you to handle navigating through large data sets.

    Connecting to a Storage Account

    The development storage node is always available under the Windows Azure Storage node and when opened will also start up the development storage if it isn’t already running.

    To add a storage account in the cloud, right click on the Windows Azure Storage node and select “Add New Account…”

    image

    This will pop up a dialog that allows you to enter your storage account credentials:

    image

    This corresponds to the account name and key that you set up on the Windows Azure Developer Portal, for example:

    image

    In this case “serverexplorer” is the account name and you can use either the primary or secondary access keys as the account key.

    That said, one of our design principles is not to ask the user to enter the same information more than once.  So if you’ve entered storage connection strings in your cloud service, specifically if you've added connection strings as configuration settings in the roles of your Cloud Service, we find those and show them in the combo box.  If you select one, we'll fill out the name and key so that you don't have to re-enter that same information.

    image

    Once you hit ok that new storage account will be shown in the Server Explorer:

    image

    Browsing Blob Storage

    To browse blobs, you can open up the storage account and then open up the “Blobs” node to see a list of the containers in that storage account.

    image 

    By double clicking on a container, you can see all of the blobs that are in that container. 

    One of the things we did to help you to handle large data sets, we get the blob list 200 at a time.  As the blob list is downloading, you can click to pause or resume the download.

    image

    If you click to pause, it gives you the ability to download a blob, see blob properties (right click on a row and select “Properties”) or enter a filter by blob prefix.

    image

    Filtering by blob prefix occurs on the server side so only the filtered list is returned and shown.

    image

    Our thought is that by supporting both filtering and pause/resume, you will be able to use the Windows Azure Storage browser with containers that contain a large number of blobs.

    We also support downloading blobs by double clicking on them.  This will add a line item into the Windows Azure Activity Log window in Visual Studio which we use to track long running processes that relate to our Windows Azure Tools.

    After downloading is complete, the blob will be opened in Visual Studio if the file type is supported.

    image 

    One of the hard cuts for this release was the edit/write support.  We really hoped to add the ability to delete blobs and containers because viewing and deleting really covers the core developer scenario.  Unfortunately, we’ll have to wait for a future release to add that in... but again, I'm excited about the foundation that this feature provides and it's integration into Visual Studio makes it really convenient.

    Browsing Table Storage

    Browsing Table Storage works in a very similar way. 

    image

    When you open up a table, we download 200 rows at a time and allow you to pause/resume.  If you pause you can filter using a WCF Data Services $filter query option.

    What you can put in the text box to filter is anything you would put after ‘$filter=’ in a WCF Data Services.  For example, “Address gt ‘989 Redmond Way, Redmond WA’”

    image

    Having a table viewer right in Visual Studio now allows you to view Windows Azure Diagnostic trace messages without having to leave Visual Studio.

    image

    Similar to the blob storage viewer, we also had to cut the edit/write capabilities for table storage. 

    Finally

    We are really dying to get the edit/write capability and Queue capability into the product.  Hopefully we’ll be able to schedule it soon!

    We the Windows Azure Storage browser for you so let me know what you like, don’t like and what features you want to see next!

  • Cloudy in Seattle

    TechEd Session Takeaways - Using Visual Studio to build Windows Azure Applications

    • 3 Comments

    Thank you to all of you who attended my session at TechEd 2010 - COS307 | Using Microsoft Visual Studio 2010 to Build Applications That Run on Windows Azure

    Here are some of the key takeaways and links from the session:

    Lots of New Tools

    The June 2010 release of the Windows Azure Tools has now includes:

    • Support for .NET 4
    • Deploy from Visual Studio
    • IntelliTrace debugging in the cloud
    • Windows Azure Storage and Compute integration in the Server Explorer
    • Windows Azure Activity Log window in VS to watch long running operations

    Getting Started

    The Web Platform Installer automates a number of the steps to install Windows Azure or to install IIS prior to installing the Windows Azure Tools for VS 2010.

    Get the patches - http://msdn.microsoft.com/en-us/azure/cc974146.aspx

    Samples

    http://code.msdn.microsoft.com/windowsazuresamples

    ASP.NET Web Roles vs ASP.NET Web Applications

    The 3 differences are:

    • References to the Windows Azure specific assemblies: Microsoft.WindowsAzure.Diagnostics, Microsoft.WindowsAzure.ServiceRuntime, and Microsoft.WindowsAzure.StorageClient
    • Bootstrap code in the WebRole.cs/vb file that starts the DiagnosticMonitor as well as defines a default behavior of recycling the role when a configuration setting change occurs.
    • The addition of a trace listener in the web.config file: Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener.

    NerdDinner

    The NerdDinner sample code can be found at: http://nerddinner.codeplex.com/

    ASP.NET Provider scripts for SQL Azure

    To use the ASP.NET providers with SQL Azure, you can use these scripts: http://support.microsoft.com/default.aspx/kb/2006191 to setup the database.

    Using IntelliTrace

    Using IntelliTrace to debug services / applications that are running in the Cloud

  • Cloudy in Seattle

    Using IntelliTrace to debug Windows Azure Cloud Services

    • 9 Comments

    One of the cool new features of the June 2010 Windows Azure Tools + SDK is the integration of IntelliTrace to allow you to debug issues that occur in the cloud.

    IntelliTrace support requires .NET 4, Visual Studio 2010 Ultimate and the cloud service has to be deployed with IntelliTrace enabled. If you are using a 32-Bit OS, you need this patch/QFE.

    To enable IntelliTrace, right click on the cloud service project and select “Publish”.

    image

    At the bottom of our publish dialog, click to select “Enable IntelliTrace for .NET 4 roles”.

    image

    You can also configure IntelliTrace for the cloud settings (these are separate from the settings in Tools | Options which are used for the debug (F5) scenario which we currently do not support with Cloud Services/Development Fabric.  

    A couple of notes about IntelliTrace settings. 

    We default to high mode which is different from the F5 IntelliTrace settings in Visual Studio.  The reason is that F5 IntelliTrace includes both debugger and IntelliTrace data while in the cloud, you are only able to get back IntelliTrace data.

    Additionally, we exclude Microsoft.WindowsAzure.StorageClient.dll as we found that the slow down caused by IntelliTrace instrumenting resulted in time outs to storage.  You may find you will want to remove the storage client assembly from the exclusion list.

    To reset the IntelliTrace settings back to the default, you can delete “collectionplan.xml” from %AppData%\Roaming\Microsoft\VisualStudio\10.0\Cloud Tools

    Click “OK” to package up everything you need to IntelliTrace the web and worker host processes in the cloud and start the deployment process.

    Note: There is a current limitation that child processes cannot be IntelliTrace debugged.

    The deployment process is completely asynchronous so you can continue to work while you wait for deployment the to complete and you can track the progress through the Windows Azure Activity Log tool window.

    image

     

    After the deployment has completed, open up the Windows Azure Compute node in Server Explorer to browse hosted services deployed to Windows Azure.

    You can add a hosted service by right clicking on the Windows Azure Compute node and selecting “Add Slot…”

    image

    This will bring up a dialog you can use to choose a slot or add/manage your credentials.

    image

    The Server Explorer will show you which Hosted Services have IntelliTrace enabled.  They are the ones that have “(IntelliTrace)” beside the slot name.

    image

    Expand open the nodes and navigate to an instance, you can get the IntelliTrace logs for that instance by right clicking on the instance node and selected “View IntelliTrace Logs”.

    image

     

    Note: When a role process exits, it automatically gets restarted by the fabric, which causes the cycling role state behavior that some of you are familiar with.  When IntelliTrace is enabled, when a role process exits, it is not restarted and it is put into the “Unresponsive” state instead.  This allows you to get the IntelliTrace logs for the failure.

    Similar to how you can track the progress of deployment from the Windows Azure Activity Log, you can also track the the download of the IntelliTrace logs asynchronously.

    image

     

    You’ll then see the IntelliTrace files open in Visual Studio. 

    image

    You can now browse the Exception Data on the summary page or put Visual Studio into debug mode by clicking and exception and clicking the “Start Debugging” button or by double clicking on one of the threads in the thread list.

    Being in debug mode will bring up the IntelliTrace tools window which will show you all of the IntelliTrace events.  You can filter between different categories and “Switch to Calls View” which will show you the call stack that you can drill in and out of various methods.

    You can also open up your source code and right click on a line and select “Search for this line in IntelliTrace”.

    image

    When the search is complete, you can click on the navigation buttons at the top of the file to select one of the instances in which this code was called and use the historical debugging buttons on the left to debug forward and backward through the code looking at the call stack and locals as step through the control flow.

    image

    Debugging Common Issues Using IntelliTrace

     

    Missing an Assembly in the Service Package:

    This is by far one of the most common "works on the devfabric, fails in the cloud" issues. View the IntelliTrace log and look for FileNotFoundExceptions in the exception list or IntelliTrace events.

    clip_image001

    In the IntelliTrace events window:

    clip_image002

    Using an incorrect Windows Azure storage connection string:

    This one is a little tougher as there isn’t a top level exception you can look at.  Search for the methods in IntelliTrace where you use connection strings and see the input and return values.  For example the CloudStorageAccount and DiagnosticMonitor calls.

    clip_image004

    Missing a CRT library in the Cloud:

    For the scenario where you are calling into a native dll but did not xcopy deploy the CRT along with his Service Package, an exception will surface in the IntelliTrace summary naming the native dll that could not be loaded.

    clip_image005

    clip_image006

    Using a 32 Bit Native Library in the Cloud:

    This issue is very similar to the missing CRT example above, in this scenario you’ve been successfully developing with a 32 bit machine and but get a failure in the cloud when the 32 bit dll is loaded in a 64 bit process.

    With IntelliTrace, an exception showing which native library failed to load is surfaced in the IntelliTrace summary screen.

    clip_image007

    In the case where the loading of the assembly is triggered by a method call that is outside of the startup code, you can double click the exception to get to the line of their code that made the call to native that loaded up the dll.

    clip_image008

    Using code that requires admin access:

    If you are running into this issue, you should be testing against the Development Fabric before deploying to the cloud.  That said, our support data shows that this is one of the issues you run into.

    I tried to do a registry write to HKLM, which fails in the following way:

    An exception is shown in the IntelliTrace summary and when double clicked, will navigate to the line of code that is causing the exception.

    clip_image009

    clip_image010

    Using an ASP.NET provider with the default SQL Server connection string in the cloud:

    In this scenario, you are using the ASP.NET providers, the default MVC and ASP.NET Web Application templates both use these. In the devfabric, they work fine as they use SQL Express under the hood by default. When you deploy to the cloud, they no longer work. (An exception web page is shown after a wait)

    In opening the IntelliTrace summary, you will see the exception "Unable to connect to SQL Server database" with a stack trace that points to one of the providers, in my example, it was the SqlMembershipProvider.

    clip_image011

    clip_image012

    Using a Diagnostics connection string with a connection string that uses HTTP endpoints:

    In this scenario, you’ve deployed to the cloud but forgot to change your Windows Azure storage connection strings. If you incorrectly select to use HTTP endpoints for the storage account and didn't try running your app with the new connection strings on the devfabric  before deploying, you can run into this problem.

    When opening the IntelliTrace log, you will see an exception in the summary indicating that the endpoint is not a secure connection.

    clip_image013

    To sum up, I’m really excited about this feature, I hope it will really help a lot of people see into the cloud and diagnose issues saving both time and frustration.

  • Cloudy in Seattle

    June 2010 Release of the Windows Azure Tools + SDK

    • 10 Comments

    I’m pleased to announce the release of the June 2010 Windows Azure Tools + SDK.

    The Windows Azure Tools for Microsoft Visual Studio extend Visual Studio 2010 and Visual Studio 2008 to enable the creation, configuration, building, debugging, running, packaging and deployment of scalable web applications and services on Windows Azure.

    Lots of new features for this release:

    • Visual Studio 2010 RTM Support: Full support for Visual Studio 2010 RTM.
    • .NET 4 support: Choose to build services targeting either the .NET 3.5 or .NET 4 framework.
    • Cloud storage explorer: Displays a read-only view of Windows Azure tables and blob containers through Server Explorer.

    clip_image001

    • Integrated deployment: Deploy services directly from Visual Studio by selecting ‘Publish’ from Solution Explorer.

    clip_image002

    • Service monitoring: Keep track of the state of your services through the ‘compute’ node in Server Explorer.

    clip_image003

    • IntelliTrace support for services running in the cloud: Adds support for debugging services in the cloud by using the Visual Studio 2010 IntelliTrace feature. This is enabled by using the deployment feature, and logs are retrieved through Server Explorer. Note: Requires Visual Studio Ultimate and .NET 4 roles.

    QFE to enable IntelliTrace on 32-Bit OS.

    clip_image004

    clip_image005

    We’re really excited about this release as it gave us the opportunity to be a more tool focused than we’ve been able to be in the past.

    Hope you like it and as always – please send me feedback.

  • Cloudy in Seattle

    Hope to see you at TechEd

    • 0 Comments

    If you are attending TechEd 2010 next week, I really hope to see you there.  I’ll be at the Windows Azure booth and speaking on Wednesday June 9th at 5:00 in Room 356. 

    I’ll be speaking about the end to end development experience for Windows Azure and have about 3-4 cool new things to show that I’m really excited about. 

    COS307 | Using Microsoft Visual Studio 2010 to Build Applications That Run on Windows Azure

    A platform is only as powerful as the tools that let you build applications for it. This session focuses on using demos, not slides, to show the best way to use Visual Studio 2010 to develop Windows Azure applications. Learn tips, tricks and solutions to common problems when creating or moving an existing application to run on Windows Azure. Come see how Visual Studio 2010 supports all parts of the development cycle as we show how to take an ASP.NET application running on IIS and make it a scalable cloud application running on Windows Azure.

    If you can’t make it, stay tuned, I’ll be posting links to all of the Windows Azure videos and I have some blog posts coming on those cool new things :)

    image

  • Cloudy in Seattle

    WCF on Windows Azure

    • 1 Comments

    One thing we’ve had for a while but I wanted to bring some attention to is our “wcfazure” code gallery page that has a useful set of known issues and a number of samples on using WCF on Windows Azure.

    It’s been updated recently to be more clear and to use all of the latest tools and such so even if you knew about it before, I recommend taking another look.

    For the most part, WCF on Windows Azure just works.  That said, there are a couple of issues to be aware of that are covered on the wcfazure code gallery page.  That said, by in large, the most common issue I get asked about around WCF and Windows Azure is Generating Proxies so let me walk through this scenario.

    First, I’m using Visual Studio 2010, but I’ll be using .NET 3.5 instead of .NET 4 because at this point in time (end of May 2010) we only support .NET 3.5 on Windows Azure.  That will be changing with our next release. 

    The other reason to use .NET 3.5 is that the scenario in .NET 4 pretty much works out of the box.  I’ll talk more about that after I explain how this works on .NET 3.5.

    Create a new .NET 3.5 Cloud Service by clicking on File | New | Project… and select the Windows Azure Cloud Service template under the Cloud category in Visual C# or Visual Basic. Click to continue.

    image

    In the Feb 2010 release of the Windows Azure Tools 1.1, even if you select .NET Framework 4, you’ll still get .NET 3.5 roles but that won’t be the case when .NET 4 support comes online.

    Add a WCF Service WebRole to the solution and click OK.

    image

    Hit F5.

    Two things to notice.  First, the browser will open to http://127.0.0.1:81/Service1.svc and you’ll see that even though the service is running on port 81, the page says to click on a link that is pointing to port 5100 which if you click the link will fail.

    image

    If you navigate to the Common7\IDE directory inside of the Visual Studio install directory and run WcfTestClient.exe, right click on “My Service Projects” and select “Add Service…”:

    image

    It too, will fail:

    image

    Add Service Reference and Svcutil will also not success in generating proxies.  This is true not only in the devfabric but also on the cloud.

    In order to fix this problem, we have a patch that can be found at the following locations:

    OS Download Support Page
    Vista/Server 2008 http://code.msdn.microsoft.com/KB971842 http://support.microsoft.com/kb/971842
    Win7/Server 2008 R2 http://code.msdn.microsoft.com/KB981002 http://support.microsoft.com/kb/981002

    The problem is not specific to Windows Azure per se, it is specific to using WCF from behind a load balancer which is how your service runs on Windows Azure.

    After installing the patch, there is still one more step you need to take in order to make the scenario work.  You have to make a modification to your web.config.

    I added a useRequestHeadersForMetadataAddress element under the behavior for my service.

    <behavior name="WCFServiceWebRole1.Service1Behavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    
      <useRequestHeadersForMetadataAddress>
        <defaultPorts>
          <add scheme="http" port="81" />
          <add scheme="https" port="444" />
        </defaultPorts>
      </useRequestHeadersForMetadataAddress>
    
    </behavior>

    The port attribute has to match the port for the endpoint that gets used. 

    On the devfabric, you’ll notice that even though your service asks for port 80, it gets port 81.  That is because ports are dynamic and a port is in use, the devfabric increments the port number and tries again.

    This isn’t a problem in the cloud, in the cloud if you declare your endpoint to use port 80, it’ll get port 80 and that’s what you should set the port attribute to in your web.config.

    Hit F5. Browse to http://127.0.0.1:81/service1.svc if necessary.

    This time you’ll see the URL on the web page looks right and clicking on it does indeed surface the WSDL.

    image

    Additionally, going back to the WCF Test Client and selecting to “Add Service…” this time it will work.

    image

    You can even use the test tool to invoke methods if you want.

    Because this patch is installed in the Windows Azure cloud, if you followed the steps to update your web.config, you can also generate metadata against a WCF service hosted on Windows Azure.

    Here's the really good news:

    The patch is included as part of .NET 4 and for most scenarios only requires that enableMultipleSiteBindings must be set to true (the default in the template).

    In other words, the default scenario for generating proxies for .NET 4 WCF services will work as expected for Windows Azure Cloud Services - on both the local DevFabric and in the Cloud.

  • Cloudy in Seattle

    MSDN Magazine Article on Windows Azure Development

    • 0 Comments

    I’m really jazzed because not only did I get an article published in Visual Studio Magazine a little while ago, I also published a similar article in MSDN Magazine.

    http://msdn.microsoft.com/en-us/magazine/ee336122.aspx

    Here’s an excerpt from the introduction:

    Developers are the heart and soul of any platform release—the very definition of a successful release is the large number of developers deploying applications and services on it. Microsoft has always focused on providing the best development experience for a range of platforms—whether established or emerging—with Visual Studio, and that continues for cloud computing. Microsoft added direct support for building Windows Azure applications to Visual Studio 2010 and Visual Web Developer 2010 Express.

    This article will walk you through using Visual Studio 2010 for the entirety of the Windows Azure application development lifecycle. Note that even if you aren’t a Visual Studio user today, you can still evaluate Windows Azure development for free, using the Windows Azure support in Visual Web Developer 2010 Express.

  • Cloudy in Seattle

    Visual Studio Magazine Article on Cloud Development

    • 1 Comments

    I recently co-authored an article for Visual Studio Magazine titled Cloud Development in Visual Studio 2010 which in now online!

    The article covers the end to end experience of building and running an application on Windows Azure using Visual Studio 2010.  Check it out and let me know what you think!

  • Cloudy in Seattle

    “OutputPath Property is not set for Project” Error when building a Windows Azure Cloud Service in VS 2010

    • 4 Comments

    If you’ve even seen the following error when trying to build a Windows Azure Cloud Service Visual Studio 2010:

    OutputPath property is not set for project 'CloudService1.ccproj'.  Please check to make sure that you have specified a valid combination of Configuration and Platform for this project.  Configuration='Debug'  Platform='HPD'. 

    The solution is to delete the Platform environment variable that may have been added to your machine as it conflicts with an environment variable of the same name that MSBUILD uses. (more info here)

    image

    This environment variable is added on HP machines and does impact a number of different scenarios with Visual Studio and Expression Blend.

  • Cloudy in Seattle

    Fixing the Silverlight Design Time in a Windows Azure Cloud Service

    • 1 Comments

    This is a workaround for the following configuration:

    • Visual Studio 2008 (works fine on VS 2010)
    • Windows Azure Tools for Microsoft Visual Studio February 2010 Release
    • Silverlight 3 Tools for Visual Studio 2008
    • Building a Silverlight application in a Windows Azure Cloud Service

    This is the issue reported in this forum thread.

    To reproduce the issue:

    1. Create a new Windows Azure Cloud Service project. (File | New Project)

    image

    2. Add a Web Role to the project, this will be the web application for the Silverlight application.

    image

    3. Right click on the Solution in Solution Explorer and select “Add |New Project…” Select, a Silverlight Application

    image

    4. Use an existing web site in the solution to host the Silverlight application.

    image 

    5. Open up MainPage.xaml and notice that 1. there are no controls on the Toolbox, 2. Intellisense no longer works and 3. pasting in to the XAML editor results in an “Object reference not set to an instance of an object.” error.

    image

    image

    Fixing the issue:

    1. Close Visual Studio

    2. Save the attached file (Microsoft.CloudService.targets) to your local machine

    3. Copy the file to:

    • C:\Program Files (x86)\MSBuild\Microsoft\Cloud Service\v1.0 (64-Bit OS)
    • C:\Program Files\MSBuild\Microsoft\Cloud Service\v1.0  (32-Bit OS)

    overwriting the existing file

    4. Open Visual Studio, open your Cloud Service and you’ll find you will have the controls on the Toolbox, Intellisense and you can paste in XAML without hitting the Object reference error dialog.

    image

    This issue will be fixed in our post February 2010 release.

  • Cloudy in Seattle

    Viewing GAC’d Assemblies in the Windows Azure OS

    • 3 Comments

    One of the main issues you can run into when deploying is that one of your dependent assemblies is not available in the cloud. 

    This will result in your cloud service never hitting the running state, instead it will cycle between the initializing, busy and stopping states.

    (the other main reason is that a storage account, especially the one included in the default template, is pointing to development storage – see this post about running the app on the devfabric with devstorage turned off to weed that issue out)

    To help you understand what assemblies are available in the cloud and which are not, this post goes through the steps of building a cloud service that will output the assemblies in the GAC – a view into the cloud, similar to my certificate viewing app.  (Download the Source Code)

    Here’s the final product showing the canonical example of how System.Web.Mvc is not a part of the .NET Framework 3.5 install and needs to be XCOPY deployed to Windows Azure as part of the service package:

    image

    Since the GAC APIs are all native, I figured the easiest way to do what I want and leverage a bunch of existing functionality is to simply include gacutil as part my cloud service, run it and show the output in a web page.

    1. Create a new cloud service with a web role

    2. Add gacutil.exe and gacutil.exe.config to the project.  Right click on WebRole1 in Solution Explorer and select Add | Existing Item.

    image

    Navigate to C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64 and add both gacutil.exe and gacutil.exe.config to the web role project.

    image

    3. Right click on each of the gacutil files and double check that the build action is set to content.  This will ensure the two files we added are included as part of the Service Package.  (see this post on adding files to the service package for more info)

    image 

    4. Add some UI to Default.aspx – a couple of TextBoxes and Buttons.  I added the following to the <div/> tag.

    <asp:TextBox runat="server" Width="200" ID="assemblyName" />
    <asp:Button runat="server" OnClick="OnViewAssemblyButtonClick" ID="viewAssemblyButton" Text="Look up Assembly"  />
    <asp:Button runat="server" OnClick="OnViewAllButtonClick" ID="viewAllButton" Text="View all Assemblies"/>
    <br />
    <asp:TextBox runat="server" ID="ressultsBox" Width="600" Height="800" TextMode="MultiLine"/>

    5. Add some event handlers for the buttons that will call gacutil.  “View all Assemblies” simply calls gacutil with the “/l” parameter whereas the “Look up Assembly” button will append the assembly name to that parameter causing gacutil only to list the assemblies that match that assembly name (no ".dll").

    protected void OnViewAllButtonClick(object sender, EventArgs e)
    {
        string path = MapPath("gacutil.exe");
        string command = "/l";
    
        ressultsBox.Text = RunCommandLineTool(path, command);
    }
    
    protected void OnViewAssemblyButtonClick(object sender, EventArgs e)
    {
        string path = MapPath("gacutil.exe");
        string command = "/l " + assemblyName.Text;
    
        ressultsBox.Text = RunCommandLineTool(path, command);
    }

    6. The meat of the call to gacutil is contained in a method called “RunCommandLineTool”:

    private string RunCommandLineTool(string path, string parameters)
    {
        ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo(path, parameters);
        info.UseShellExecute = false;
        info.ErrorDialog = false;
        info.CreateNoWindow = true;
        info.RedirectStandardOutput = true;
    
        Process p = Process.Start(info);
    
        StreamReader sr = p.StandardOutput;
        string output = sr.ReadToEnd();
        sr.Close();
    
        return output;
    }

    The code is pretty straightforward, launches gacutil and redirects standard output to a stream which is eventually converted to a string and set on one of the TextBoxes in the UI.

    And that’s about it, when you deploy and then run this application in the Windows Azure cloud, you’ll be able to see what assemblies are in the GAC!  Note that this is useful as the actual assemblies can vary for different OS versions.

    image

    Here’s the listing for Windows Azure Guest OS 1.1 (Release 201001-01). (in reality, even though there are changes in different OS versions, what you need to deploy and what’s available really isn’t going to change)

    Once you figure out you need to add some dependent assemblies to you service package you can see this post to help you, and this post to see what assemblies are in the service package.

    One final tip – in a new Cloud Service, we add references to Microsoft.WindowsAzure.Diagnostics, Microsoft.WindowsAzure.ServiceRuntime and Microsoft.WindowsAzure.StorageClient.

    image

    The Copy Local property for Microsoft.WindowsAzure.Diagnostics and Microsoft.WindowsAzure.StorageClient should be set to True and for Microsoft.WindowsAzure.ServiceRuntime, it should be set to False. (important to not if you add the reference yoursefl)

    The reason is that Microsoft.WindowsAzure.ServiceRuntime is a bit of a special assembly so we treat it a little differently.

  • Cloudy in Seattle

    GAC Listing for Windows Azure Guest OS 1.1

    • 0 Comments

    The following is a list of the contents of the GAC for Windows Azure Guest OS 1.1 (Release 201001-01)

    Please see this post: http://blogs.msdn.com/jnak/archive/2010/03/21/viewing-gac-d-assemblies-in-the-windows-azure-os.aspx for a walkthrough of how this listing was obtained and how you can obtain the listing for any Windows Azure OS you choose.

    Microsoft (R) .NET Global Assembly Cache Utility.  Version 3.5.30729.1
    Copyright (c) Microsoft Corporation.  All rights reserved.

    The Global Assembly Cache contains the following assemblies:
      blbproxy, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      CustomMarshalers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=AMD64
      ISymWrapper, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=AMD64
      Microsoft.CertificateServices.Setup.Interop, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      Microsoft.GroupPolicy.Interop, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      Microsoft.Interop.Security.AzRoles, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      Microsoft.Transactions.Bridge.Dtc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=AMD64
      mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=AMD64
      msshrtmi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      mswacdmi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      napcrypt, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      naphlpr, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      Policy.1.0.Microsoft.Interop.Security.AzRoles, Version=6.0.6001.18000, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      Policy.1.2.Microsoft.Interop.Security.AzRoles, Version=6.0.6001.18000, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      srmlib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=AMD64
      System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=AMD64
      System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=AMD64
      System.Printing, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=AMD64
      System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=AMD64
      System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=AMD64
      CustomMarshalers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
      ISymWrapper, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
      Microsoft.CertificateServices.Setup.Interop, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86
      Microsoft.GroupPolicy.Interop, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86
      Microsoft.Interop.Security.AzRoles, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86
      Microsoft.Transactions.Bridge.Dtc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
      mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
      msshrtmi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86
      napcrypt, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86
      naphlpr, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86
      Policy.1.0.Microsoft.Interop.Security.AzRoles, Version=6.0.6001.18000, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86
      Policy.1.2.Microsoft.Interop.Security.AzRoles, Version=6.0.6001.18000, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86
      PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86
      srmlib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86
      System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
      System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
      System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
      System.Printing, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86
      System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
      System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
      Accessibility, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      blbmmc, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      blbmmc.resources, Version=6.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      blbproxy.resources, Version=6.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      blbwizfx, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      blbwizfx.resources, Version=6.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      CfsCommonUIFx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      CfsCommonUIFx.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      ComSvcConfig, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      cscompmgd, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      DfsMgmt, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      DfsMgmt.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      DfsObjectModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      DfsObjectModel.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      dfsvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      EventViewer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      EventViewer.Resources, Version=6.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      IEExecRemote, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      IEHost, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      IIEHost, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Build.Conversion.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Build.Engine, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Build.Engine, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Build.Framework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Build.Framework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Build.Tasks, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Build.Utilities, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Build.Utilities.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.GroupPolicy.Reporting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.GroupPolicy.Reporting.Resources, Version=2.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.JScript, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.ManagementConsole, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.ManagementConsole.Resources, Version=3.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.PowerShell.Commands.Management, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.PowerShell.Commands.Management.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.PowerShell.Commands.Utility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.PowerShell.Commands.Utility.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.PowerShell.ConsoleHost, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.PowerShell.ConsoleHost.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.PowerShell.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.PowerShell.Security.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Storage.NfsCommon, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Storage.NfsCommon.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Storage.SanCommon, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Storage.SanCommon.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Storage.SanCommon.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Storage.SanCommon.UI.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Storage.Vds, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Tpm, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Tpm.Resources, Version=6.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Transactions.Bridge, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.VisualBasic.Compatibility, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.VisualBasic.Compatibility.Data, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.VisualBasic.Vsa, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.VisualC, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.VisualC.STLCLR, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Vsa, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Vsa.Vb.CodeDOMProcessor, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      Microsoft.Web.Administration, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Administration.Resources, Version=7.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management.Aspnet, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management.Aspnet.Resources, Version=7.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management.AspnetClient, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management.AspnetClient.Resources, Version=7.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management.Iis, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management.Iis.Resources, Version=7.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management.IisClient, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management.IisClient.Resources, Version=7.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management.Remoting, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management.Remoting.Resources, Version=7.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Web.Management.Resources, Version=7.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Windows.ServerManager, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.Windows.ServerManager.Resources, Version=6.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft.WindowsAzure.ServiceRuntime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Microsoft_VsaVb, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      MiguiControls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      MiguiControls.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      MMCEx, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      MMCEx.Resources, Version=3.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      MMCFxCommon, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      MMCFxCommon.Resources, Version=3.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      napinit, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      napinit.resources, Version=6.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      napsnap, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      napsnap.resources, Version=6.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Narrator, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      NfsConfigGuide, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      NfsConfigGuide.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      PresentationBuildTasks, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      PresentationCFFRasterizer, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      PresentationFontCache, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      PresentationFramework.Classic, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      PresentationFramework.Luna, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      PresentationFramework.Royale, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      PresentationUI, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      ReachFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      rmConfigHelper, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      rmConfigHelper.Resources, Version=6.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Sentinel.v3.5Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      ServerManagerCmd.Resources, Version=6.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      ServiceModelReg, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      SetupNfsIdMap, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      SMDiagnostics, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      SMSvcHost, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      srmgui, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      srmgui.resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      srmreports, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      srmreports.resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      StorageMgmt, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      Storagemgmt.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      sysglobl, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.AddIn, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.AddIn.Contract, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.ComponentModel.DataAnnotations, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Data.Entity.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Data.Services, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Data.Services.Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Data.Services.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Data.SqlXml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.DirectoryServices.AccountManagement, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.DirectoryServices.Protocols, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Drawing.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.IdentityModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.IdentityModel.Selectors, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.IO.Log, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Management.Automation.Resources, Version=1.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Management.Instrumentation, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Messaging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Net, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Runtime.Serialization.Formatters.Soap, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Security, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.ServiceModel.Install, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.ServiceModel.WasHosting, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Speech, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Web.DynamicData, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Web.DynamicData.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Web.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Web.Entity.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Web.Extensions.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Web.Mobile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Web.RegularExpressions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Web.Services, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
      System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Windows.Presentation, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Workflow.Activities, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Workflow.ComponentModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
      TaskScheduler, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      TaskScheduler.Resources, Version=6.0.0.0, Culture=en, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      UIAutomationClient, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      UIAutomationClientsideProviders, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      UIAutomationProvider, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      UIAutomationTypes, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      WindowsFormsIntegration, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL
      WsatConfig, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL

    Number of items = 227

  • Cloudy in Seattle

    Channel9 Show - Cloud Cover

    • 0 Comments

    Since Steve and Ryan listed my blog as one of the daily tips and just interviewed me for their Cloud Cover show, I felt compelled to plug the show :)

    In all honesty, it’s a good show, lots of good Windows Azure Platform information in very consumable pieces (i.e. not too long, not too short).  New episodes will be available on a weekly basis.

    Check it out: http://channel9.msdn.com/shows/Cloud+Cover/

    image

  • Cloudy in Seattle

    Videos of the Windows Azure Sessions at MIX10

    • 1 Comments

    Had a great time at MIX10 this year, talked to a lot of customers and got a lot of great feedback – thank you.

    If you weren’t able to attend and are interested in Windows Azure, here are links to the Windows Azure sessions.  Videos of all of the sessions are available at: http://live.visitmix.com/Videos (some of the sessions will come online toward the end of the day)

    My session: Building and Deploying Windows Azure based Applications with Microsoft Visual Studio 2010.

    Day 1 Keynote - Scott Guthrie and Joe Belfiore

    Day 2 Keynote – Scott Guthrie, Dean Hachamovitch, Bill Buxton and Doug Purdy

    All Windows Azure sessions:

  • Cloudy in Seattle

    Mix ‘10 Session - Building Windows Azure Applications is now online

    • 0 Comments

    My session at Mix ‘10 is now online: http://live.visitmix.com/MIX10/Sessions/SVC09

    If you want to get a solid understanding of what a developer needs to know in order to successfully build Windows Azure applications using Visual Studio both in terms of a new application or migrating an existing application (including the use of SQL Azure) this is the session for you.

    image

    Links, resources and some summary information is available in this post: http://blogs.msdn.com/jnak/archive/2010/03/16/mix-10-building-and-deploying-windows-azure-based-applications-with-microsoft-visual-studio-2010.aspx

  • Cloudy in Seattle

    Mix ‘10: Building and Deploying Windows Azure-Based Applications with Microsoft Visual Studio 2010

    • 0 Comments

    Thank you to all of you who attended my session at Mix ‘10 on Building and Deploying Windows Azure-Based Applications with Microsoft Visual Studio 2010.  The video will be available within the next couple of days.

    Here are some of the key takeaways and links from the session:

    Getting Started

    The Web Platform Installer automates a number of the steps to install the Windows Azure Tools for VS 2008 or to install IIS prior to installing the Windows Azure Tools for VS 2010.

    Get the patches - http://msdn.microsoft.com/en-us/azure/cc974146.aspx

    Samples

    http://code.msdn.microsoft.com/windowsazuresamples

    Using WCF on Windows Azure

    http://code.msdn.microsoft.com/wcfazure

    ASP.NET Web Roles vs ASP.NET Web Applications

    The 3 differences are:

    • References to the Windows Azure specific assemblies: Microsoft.WindowsAzure.Diagnostics, Microsoft.WindowsAzure.ServiceRuntime, and Microsoft.WindowsAzure.StorageClient
    • Bootstrap code in the WebRole.cs/vb file that starts the DiagnosticMonitor as well as defines a default behavior of recycling the role when a configuration setting change occurs.
    • The addition of a trace listener in the web.config file: Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener.

    NerdDinner

    The NerdDinner sample code can be found at: http://nerddinner.codeplex.com/

    ASP.NET Provider scripts for SQL Azure

    To use the ASP.NET providers with SQL Azure, you can use these scripts: http://support.microsoft.com/default.aspx/kb/2006191 to setup the database.

    Unzipping the Service Package

    To be able to unzip the Service Package the environment variable you need is _CSPACK_FORCE_NOENCRYPT_. See this post for more information.

    Run you app on the devfabric with cloud storage before deploying to Windows Azure

    Do this to weed out potential problems with connection strings including deploying with a connection string pointing to the development storage.

    Right click on the Cloud Service project and select Properties:

    image

    Select the “Development” tab and change “Start Development Storage services” to “False”.

    image

    Shut down the development storage service:

    image

    Change your connection strings.  Do this for every role.  Right click on the role under the Roles node in Solution Explorer and select Properties.

    image 

    Switch to the “Settings” tab and for each connection string, bring up the connection string dialog and enter your cloud storage credentials.

    image

    Run your Cloud Service on the Development Fabric and make sure that everything works as expected.

    Service Management

    Windows Azure has a the Service Management APIs and Powershell cmdlets you can use to automate deployment and service management.  See this post for more information.

    The script I used to deploy the service was:

    $cert = Get-Item cert:\CurrentUser\My\<enter cert>
    $sub = "<enter subscription ID>"
    $servicename = <enter service name>'
    $package = "<enter url to service package in blob storage or local file path>"
    $config = "<enter path to service configuration file>"

    Add-PSSnapin AzureManagementToolsSnapIn

    Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub |
        New-Deployment Staging $package $config -Label 'PDC09Staging' |
        Get-OperationStatus –WaitToComplete

    Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub |
        Get-Deployment -Slot Staging |
        Set-DeploymentStatus 'Running' |
        Get-OperationStatus –WaitToComplete

    If you pass in a local file for the $package variable, you must have a storage account with the same name as the hosted service account you are deploying to.

    csmanage (tool that exercises the Service Management APIs) and other samples that aren't included in the Windows Azure SDK can be found here: http://code.msdn.microsoft.com/windowsazuresamples

  • Cloudy in Seattle

    Hope to see you at my Mix ‘10 Windows Azure session

    • 0 Comments

    image 

    I’m really excited about Mix ‘10 this year.  There’s going to be a lot of cool announcements and sessions.

    One of the sessions I’d love to see you at is my session on building Windows Azure applications with Visual Studio (Tuesday right after the keynote at 11:30 in Breakers L):

    Building and Deploying Windows Azure-Based Applications with Microsoft Visual Studio 2010

    My goal for the talk is to have you walk away with enough nuts and bolts developer info to feel comfortable opening Visual Studio and begin writing new Windows Azure Cloud Service or migrate an existing ASP.NET Web Application to be a scalable Cloud Service.

  • Cloudy in Seattle

    Windows Azure RoleEntryPoint Method Call Order

    • 3 Comments

    I saw an internal discussion that had some information I thought would be useful to share.  It’s about how some of the methods in RoleEntryPoint get called.

    In the case of a Worker Role, the RoleEntryPoint class is the class you derive to write your code.  When you create a new Worker Role project in Visual Studio, you’ll see that the project contains one code file and in that code file there is a class called WorkerRole that derives from RoleEntryPoint.

    Worker Role Call Order:

    WaWorkerHost process is started.

    1. Worker Role assembly is loaded and surfed for a class that derives from RoleEntryPoint.  This class is instantiated.
    2. RoleEntryPoint.OnStart() is called.
    3. RoleEntryPoint.Run() is called. 
    4. If the RoleEntryPoint.Run() method exits, the RoleEntryPoint.OnStop() method is called .
    5. WaWorkerHost process is stopped. The role will recycle and startup again.

    For step 1 above, Windows Azure only loads one assembly and takes the first class that derives from RoleEntryPoint that it finds.  Visual Studio knows which assembly implements RoleEntryPoint based on the reference to the project under the Roles node.

    image

    That reference is a project to project reference that is passed through to packaging.  This puts a file called __entrypoint.txt in the Service Package than contains the name of the assembly that has a class that derives from RoleEntryPoint. 

    image 

    In the case of a Web role, a RoleEntryPoint derived class is actually not required.  That said, in the Visual Studio web role templates, we add a file called WebRole.cs that includes an implementation of OnStart() specifically to add template code to show you how to startup the the Diagnostic Monitor and to show you how to hook into configuration setting changes. (i.e. when a new serviceconfiguration.cscfg file is uploaded to the cloud)

    Web Role Call Order:

    1. WaWebHost process is started.
    2. Hostable Web Core is activated.
    3. Web role assembly is loaded and RoleEntryPoint.OnStart() is called.
    4. Global.Application_Start() is called.
    5. The web application runs…
    6. Global.Application_End() is called.
    7. RoleEntryPoint.OnStop() is called.
    8. Hostable Web Core is deactivated.
    9. WaWebHost process is stopped.

    You can implement a RoleEntryPoint.Run() method in a WebRole, it’ll get called on a new foreground thread that executes in parallel with RoleEntryPoint.OnStart().

    Thing is, if you exit from the RoleEntryPoint.Run() method, (the default implementation just waits on an infinite Thread.Sleep()) your role is going to recycle – so just be aware of that consequence, almost certainly not what you want in a web role (the role will be offline while it starts up again).

Page 1 of 9 (202 items) 12345»