<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Michał Morciniec</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/micham/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/micham/feed.xml</link>
    <description>ISV Partner Support Blog</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:19:42 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Sideloading Store Apps to Windows 8.1 Devices</title>
      <link>https://docs.microsoft.com/archive/blogs/micham/sideloading-store-apps-to-windows-8-1-devices</link>
      <pubDate>Fri, 30 May 2014 13:06:02 GMT</pubDate>
      <dc:creator><![CDATA[micham]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micham/2014/05/30/sideloading-store-apps-to-windows-8-1-devices/</guid>
      <description><![CDATA[The term sideloading refers to the installation of Store Apps by an IT Administrator on a Windows...]]></description>
      <content:encoded><![CDATA[<p>The term <em>sideloading</em> refers to the installation of Store Apps by an IT Administrator on a Windows device. Typically, the App in question is a line of business (LOB)application that is internal to the company. Therefore, the company (maybe your customer if you are and ISV) will want to make it available only to its employees rather than making it publically accessible Windows Store. This is not to say that there are no LOB Store Apps published in the Windows Store. Have a look at the <a href="ms-windows-store:Search?query=SAP" target="_blank">SAP client Apps</a>, for example.</p>  <p>There a three aspects that you may have to deal with when considering LOB sideloading: licensing requirements, technical requirements and management of sideloaded apps. You will want to understand all of them to understand if there is additional cost,&#160; how plan for the best way to enable your devices for sideloading or what are your options for handling new App version updates. Let´s have a look then.</p>  <h1>1. Sideloading Licensing Requirements</h1>  <p>Sideloading functionality is available “out of the box” for Windows 8.1 Professional and Windows 8.1 Enterprise but only if they are domain-joined. The addition of the Professional edition is new and has been announced as recently as April 2014:</p>  <p><font size="2">[1] <a href="http://blogs.windows.com/windows/b/business/archive/2014/04/02/building-the-mobile-workplace-with-windows-and-windows-phone.aspx" target="_blank">Building the Mobile Workplace with Windows and Windows Phone</a></font><em></em></p>  <p><em>&quot;Easier Deployment – Delivering Windows 8.1 Update via Windows Update allows businesses to deploy updates with increased predictability. And, to help businesses develop and deploy modern apps for their workforce, we are enabling sideloading for any domain-joined Windows Pro PC or tablet&quot;</em></p>  <p>The Windows 8.1 Professional, Windows 8.1 Enterprise that are not domain-joined and the Windows 8.1 RT edition (that cannot be domain-joined) still can be enabled for sideloading but will require a sideloading key that has to be installed and activated on the device. It is a multiple activation key (MAK) and you can obtain it from the reseller.</p>  <p>[2]<font size="2"> </font><a href="http://download.microsoft.com/download/9/4/3/9439A928-A0D1-44C2-A099-26A59AE0543B/Windows_8-1_Licensing_Guide.pdf" target="_blank"><font size="2">Volume Licensing reference guide Windows 8.1 and Windows RT 8.1</font></a></p>  <p>page 12 and further has a full detail in section “Windows 8.1 Enterprise Sideloading”.</p>  <p>Typically, the sideloading activation key will have to be acquired by to owner of the operating system license. So how much it is going to cost? Well, the thing to check is if you have existing volume licensing Enterprise Agreement with Microsoft. The licensing guide mentioned above lists all of the programs that include them free of charge as of 1 May. If you are in a qualifying licensing program, just contact your reseller who will make the keys available to you.</p>  <p>If you do not have a qualifying volume licensing program then you can purchase from a reseller unlimited number of sideloading activation keys for approx. $100 through the Open contract as also mentioned by [1]. The best thing is to contact the reseller that you normally work with to check out all these options for your particular case.</p>  <table cellspacing="0" cellpadding="0" border="1"><tbody>     <tr>       <td>         <p><b>PartNumber</b><b></b></p>       </td>        <td>         <p><b>PartDesc</b><b></b></p>       </td>     </tr>      <tr>       <td valign="top">         <p>4UN-00005</p>       </td>        <td valign="top">         <p>WinSideloadingRights SNGL OLP NL Qlfd</p>       </td>     </tr>   </tbody></table>  <p>So in summary, if you are dealing with devices that will not be in domain and you want to install LOB Store App you will need the sideloading activation key. Before you attempt the installation, however, the devices will have to be prepared by your IT pro, so read on.</p>  <h1></h1>  <h1>2. Technical Requirements for Sideloading</h1>  <p>There are three technical requirements that have to be met by the device before you attempt to install Store App on it regardless if you are doing it manually, via Powershell scripts or via Mobile Device Management system such as Windows Intune. You will find them explained in</p>  <p>[3] <a href="http://technet.microsoft.com/en-us/library/hh852635.aspx#SideloadingRequirements" target="_blank"><font size="2">Configure PCs for Sideloading Requirements</font></a></p>  <p>but here they are summarized and I illustrate them with screenshots taken on Windows 8.1 Professional with Update 1 that is not domain joined and therefore requires all the steps.</p>  <p>1. <strong>Enable the Windows Registry key</strong> HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Appx\AllowAllTrustedApps = 1. </p>  <p>If you are dealing with domain joined device you get this key set via group policy <font face="Courier New">Allow all trusted applications to install. </font><font face="Segoe UI">If you are preparing a device that will not domain joined you will most likely find out that the Appx in not present in HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows. In that case: a) create a New Key named Appx b) right click the Appx node you just created and select New-&gt; DWORD (32-Bit) Value, assign it a Name AllowAllTrustedApps c)right click the DWORD you just created and select Modify and type 1 in the Value Data. You should have an entry as per figure below:</font></p>    <p align="center">. <a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8176.AllowAllTrustedApps_518D2D45.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/8176.AllowAllTrustedApps_5F00_518D2D45.png"><img title="AllowAllTrustedApps" style="display: inline; background-image: none;" border="0" alt="AllowAllTrustedApps" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/6787.AllowAllTrustedApps_thumb_79BF6657.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/6787.AllowAllTrustedApps_5F00_thumb_5F00_79BF6657.png" width="697" height="174" /></a></p>  <p align="center">Figure 1. AllowAllTrustedApps Windows Registry Key2. Ensure that the </p>  <p>2. <strong>Ensure that the code signing certificate has been issued by a trusted certification authority</strong>. </p>  <p>All Store App packages are signed with a code signing certificate. If the developer uses an Authenticode code signing certificate that has been purchased from common certificate authority (e.g.: Symantec, VeriSign) then you do not need to take an action because the root certificates for these authorities are already present in the Local Machine\Trusted Root Certification Authority certificate store. However, if the application package has been signed with the certificate emitted by customers own Certification Authority or the developer used the self-signed certificate generated by Visual Studio then you will have to make sure the root certificate is present in the Trusted Root Certification Authority store.</p>  <p>You can locate the code signing certificate in Visual Studio solution by looking up the application manifest as shown in the figure below</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/4667.SigningCert_36E321DD.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/4667.SigningCert_5F00_36E321DD.png"><img title="SigningCert" style="display: inline; background-image: none;" border="0" alt="SigningCert" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/3652.SigningCert_thumb_56948C56.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/3652.SigningCert_5F00_thumb_5F00_56948C56.png" width="840" height="258" /></a></p>  <p align="center">Figure 2. Application Manifest with code signing certificate</p>  <p>Configure Certificate button allows developer to pick existing code signing certificate from the certificate store a file or get Visual Studio to generate a self signed certificate. If you click the View Full Certificate button you can get the full certification path, copy the certificate to a file, etc. When the Store App is packaged (using the Store-&gt;Create App Packages option) the code signing certificate will also be available in the AppPackages solution subfolder. So if you are using self-signed certificate you could just pick it up together with the .appxbundle that contains the application package and take both to your target machine.</p>  <p>On the device that you want to configure simply double click the self signed certificate (.cer) file, select Install Certificate and then in the Certificate import Wizard select Local Machine as the Store Location instead of Current User that will be selected. In the next step select Place all certificates in the following store and browse for the Trusted Root Certification Authorities store to get it installed.</p>  <p>Should you install incorrectly then on Windows 8.1 with Update 1 you will get explicit error message (on Windows 8 you may get more cryptic error HRESULT: 0x80073CFF) as per figure below:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8204.NoCertificateError_4858A417.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/8204.NoCertificateError_5F00_4858A417.png"><img title="NoCertificateError" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="NoCertificateError" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2476.NoCertificateError_thumb_0105DED6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/2476.NoCertificateError_5F00_thumb_5F00_0105DED6.png" width="750" height="199" /></a></p>  <p align="center">Figure 3. Lack of root certificate error</p>  <p align="left">If all is well the command will complete silently and you should be able to locate the application installed. For domain joined machines you would be able to run the app at this stage, however, for cases that require sideloading key you will see the message App can´t open as in the figure below</p>  <p align="left"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2335.AppCantOpen_70213AE5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/2335.AppCantOpen_5F00_70213AE5.png"><img title="AppCantOpen" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="AppCantOpen" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5415.AppCantOpen_thumb_423678DE.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/5415.AppCantOpen_5F00_thumb_5F00_423678DE.png" width="488" height="153" /></a></p>  <p align="center">Figure 4. App can´t open message </p>  <p align="left">This is because we are missing the step 3 described below.</p>  <p>3.&#160; <strong>Install and Activate the sideloading key on the devices that require it</strong> (as described it in previous section). </p>  <p>There are two commands that we have to execute exactly as described in the “To activate a sideloading product key” section of the sideloading requirements: one to install the key and the second to activate it. You need Administrator privilege to execute these commands as per figures below:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2318.SideloadingKeyInstallation_11A2FB26.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/2318.SideloadingKeyInstallation_5F00_11A2FB26.png"><img title="SideloadingKeyInstallation" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="SideloadingKeyInstallation" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5126.SideloadingKeyInstallation_thumb_7600FFE0.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/5126.SideloadingKeyInstallation_5F00_thumb_5F00_7600FFE0.png" width="617" height="265" /></a></p>  <p align="center">Figure 5. Installation of the sideloading key</p>  <p align="left">Note that the key you type here is the sideloading key that you have purchased from your reseller.</p>  <p align="left"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0447.SideloadingKeyActivation_0C56A526.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/0447.SideloadingKeyActivation_5F00_0C56A526.png"><img title="SideloadingKeyActivation" style="margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;" border="0" alt="SideloadingKeyActivation" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0486.SideloadingKeyActivation_thumb_497A60AB.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/0486.SideloadingKeyActivation_5F00_thumb_5F00_497A60AB.png" width="617" height="364" /></a></p>  <p align="center">Figure 6. Activation of the key. </p>  <p>In this second step the string supplied (ec67814b….) is always the same because it is a guid that identifies the sideloading feature that we are enabling. If you are unsure if the device has already the sideloading key activated you can check it with command <font face="Courier New">slmgr / dlv</font> that will display the license information. Then scan it for the section with Name: APPXLOB-Client add-on and ensure that the line License Status is showing Licensed.</p>  <p>With all these steps concluded you can install and launch the Store Application successfully.</p>  <p>I should mention for completeness that in development environment you do not require sideloading key. The store apps can run thanks to the Developer License. This license is temporal and periodically will expire. If you are putting in production the machine that was perhaps previously a test machine you can check if it has developer license installed (<a href="http://technet.microsoft.com/en-us/library/jj657533.aspx">Get-WindowsDeveloperLicense</a>) and remove it (<a href="http://technet.microsoft.com/en-us/library/jj657531.aspx">Unregister-WindowsDeveloperLicense</a>) before configuring production sideloading key using the powershell commands documented in</p>  <p><font size="2">[4] </font><a href="http://technet.microsoft.com/en-us/library/jj657534.aspx" target="_blank"><font size="2">Windows Developer License Cmdlets in Windows PowerShell</font></a></p>  <h1>3. Application Management</h1>  <p>The licensing requirements and the technical requirements mentioned in the two previous sections have to always be met regardless of the actual method you choose for installing the applications. You have already seen that you can install the application using the <a href="http://technet.microsoft.com/en-us/library/hh856048.aspx" target="_blank">Add-AppxPackage</a> command. The command will take an application package (.appx) or the newer application bundle (.appxbundle) as an argument. You can use the <a href="http://technet.microsoft.com/en-us/library/hh856038.aspx" target="_blank">Remove-AppxPackage</a> to remove the application. </p>  <p>However, most customers will require more sophisticated solution to manage the application. They will want to assign specific LOB Apps to users in certain groups (Finance, HR) and will want to have a mechanism to install the new versions of the applications even for users with no access to domain.</p>  <p>Windows Intune offers a complete Mobile Device Management solution. It can help not only manage the applications but also (in case of Windows RT) activate the sideloading keys and install root certificates on devices that user enroll for management. Also Windows Intune integrates with System Center Configuration Manager that many customers already have deployed.</p>  <p>The end user has access to the Company Portal application that lists the applications that the Administrator made available in Windows Intune. The Company Portal is essentially a Store App that communicates with the Windows Intune tenant.</p>  <p>You can view two videos that show Windows Intune capabilities with respect to App sideloading:</p>  <p><font size="2">[5] <a href="https://www.youtube.com/watch?v=KFpaUSWAv9U" target="_blank">The Deployment Sessions - 006 Sideloading to Windows RT from Windows Intune</a></font></p>  <p><font size="2">[6] <a href="https://www.youtube.com/watch?v=TUrEPNLUkio" target="_blank">The Deployment Sessions - 005 Sideloading to RT with Configuration Manager 2012 and Intune</a></font></p>  <p>Also you can see the commercial information in</p>  <p><font size="2">[7] <a href="http://download.microsoft.com/download/C/8/A/C8ACC872-EC51-4915-B408-836849F53F3F/Dec-2012_Windows_Intune_Purchase_Guide.pdf" target="_blank">Windows Intune Purchasing and Support Guide</a></font></p>  <p>The alternative to Windows Intune is to build this capability yourself. This could be as basic as the network share containing the scripts or a more complex application equivalent to the Company Store communicating with your package repository of choice (Azure Storage / SharePoint, etc.) but you would need to decide if the development effort would be worth it.</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Azure Business Models, Discounts and Sales Incentives for Partners</title>
      <link>https://docs.microsoft.com/archive/blogs/micham/windows-azure-business-models-discounts-and-sales-incentives-for-partners</link>
      <pubDate>Wed, 02 Oct 2013 15:00:23 GMT</pubDate>
      <dc:creator><![CDATA[micham]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micham/2013/10/02/windows-azure-business-models-discounts-and-sales-incentives-for-partners/</guid>
      <description><![CDATA[One of the frequently repeating questions from Microsoft Partners new to Windows Azure is about the...]]></description>
      <content:encoded><![CDATA[<p>One of the frequently repeating questions from Microsoft Partners new to Windows Azure is about the business models, discounts and sales incentives. Or to put it bluntly- how Partners can make money and be successful with Azure related projects? In this blog I will give you my personal opinion and point you to the official documentation on Microsoft Partner Network. Cloud transformation is still going on in the industry so by no means I have all the answers but I hope to give you a starting point.</p>  <h1>Business Models</h1>  <p>There are two basic models depending if it is Partner or Customer who purchases the Windows Azure subscription and therefore has a billing relationship with Microsoft. It is common for ISV Partners to own the Azure subscription as they offer to customers their solution(typically a web based application) as a Software as a Service (SaaS). The Customer typically is not aware of where the software is hosted. He pays a subscription fee (typically per user per month) for the service. In this model the Partner has to ensure that the Azure infrastructure costs (virtual machines.) required to run the software and the variable costs derived from the user activity (bandwidth, storage costs) can be recovered from the subscription revenue he receives. It is easier to do that, if it is possible to share parts of the Azure infrastructure to deliver the software to multiple customers. SaaS developed by ISVs as well as multi-tenant services&#160; delivered by hosting partners acting as Service Providers would fall into that category (for a technical example of multitenant hosting see <a href="http://msdn.microsoft.com/en-us/library/windowsazure/dn451351.aspx">Windows Azure Desktop Hosting Reference Architecture Guide</a>).</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8078.image_70048378.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/8078.image_5F00_70048378.png"><img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/7725.image_thumb_437DE443.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/7725.image_5F00_thumb_5F00_437DE443.png" width="606" height="315" /></a></p>  <p> In the second model it is the Customer that owns the Windows Azure subscription and has a billing relationship with Microsoft. This model can typically be found with System Integrators (SI) that help customer to move their infrastructure to the Cloud. Apart from the consultancy fees for the execution of the project there is an opportunity for partner to provide value added services such as: backup and recovery services, reporting, monitoring, capacity planning, disaster recovery, IT outsourcing and management for a recurring revenue. For Partners that commit to this model, Microsoft offers sale incentive (see below) that is a percentage of Azure consumption that his Customers generate during a specific time period. </p>  <p>There is nothing stopping any one Partner to have relationships with various Customers in one or the other model.</p>  <h1>Azure Discounts</h1>  <p>The prices for Windows Azure services published on <a href="http://www.windowsazure.com/en-us/pricing/overview/">Azure portal</a> are for the Pay-As-You go tariff but Partners as well as Customers can obtain discounts in return for commitment to consume Azure services during a fixed period of time (6 or 12 month) or by prepaying. “<a href="http://www.windowsazure.com/en-us/pricing/purchase-options/">Flexible Savings</a>” page has a summary of the various tariffs available for purchase on-line. You can terminate the Pay-As-You go subscription anytime, however with the commitment tariffs you are committed to stay with the subscription for the specified time period so make sure you read the <a href="http://www.windowsazure.com/en-us/offers/commitment-plans">details</a>. </p>  <p>ISV Partners that implement SaaS type services typically will use the same Azure subscription for multiple customers and therefore will reach quickly the minimum $500 Azure consumption per subscription required for commitment tariffs. However, it is very common for Partners to have separate Azure subscriptions for their Customers and may end up for example with 10-20 subscriptions but where none reaches the $500 minimum. In that case Partners can opt for purchasing Azure through Enterprise Agreement (EA).&#160; This allows them to pull together all new (and also existing) subscriptions to get them qualify for a volume discount. The current guidance for EA is that the total Azure consumption is of the order of $24 K/year but it is a guidance and it can be negotiated.&#160; The EA is typically a multiyear contract and you need to commit to certain Azure consumption level each year and prepay it. You can find more information about EA contracts on <a href="http://www.microsoft.com/licensing/licensing-options/enterprise.aspx">Volume Licensing site</a>.</p>  <h1>Azure Sales Incentives</h1>  <p>Because in the SI Model the Customer owns Azure subscription he will get the Azure discounts described above. Partner obtains money for migrating customers infrastructure and for value-added services he may be offering. Microsoft offers a sales incentives in this model where the Partner will receive a percentage of the influenced Customer revenue during a time period of 2 years. You can find all the details and conditions in “<a href="https://mspartner.microsoft.com/en/us/pages/membership/downloads/windows-azure-incentive-guide.aspx">Windows Azure incentive guide</a>” on Microsoft Partner Network site. Starting January 2014 the incentives will require MPN a Cloud competency. You can find out more about the upcoming changes in the Cloud competency, requirement for Silver and Gold Cloud competency levels and the incentives in “<a href="https://mspartner.microsoft.com/en/us/pages/membership/downloads/microsoft-partner-network-competency-roadmap.aspx">Microsoft Partner Network Disclosure of Upcoming Program Changes</a>”.</p>]]></content:encoded>
    </item>
    <item>
      <title>How to Create an ODBC Data Source Name (DSN) on Windows Azure Web/Worker Role</title>
      <link>https://docs.microsoft.com/archive/blogs/micham/how-to-create-an-odbc-data-source-name-dsn-on-windows-azure-webworker-role</link>
      <pubDate>Fri, 20 Apr 2012 05:29:30 GMT</pubDate>
      <dc:creator><![CDATA[micham]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micham/2012/04/20/how-to-create-an-odbc-data-source-name-dsn-on-windows-azure-webworker-role/</guid>
      <description><![CDATA[Legacy applications frequently leverage ODBC connectivity to data sources in general and to the SQL...]]></description>
      <content:encoded><![CDATA[<p>Legacy applications frequently leverage <a href="http://support.microsoft.com/kb/110093">ODBC connectivity</a> to data sources in general and to the SQL Server in particular. <a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee336245.aspx#dlaps">ODBC is supported</a> in Windows Azure with SQL Server 2008 /R2 Native Client ODBC driver. Consequently, it is possible to migrate such applications to Windows Azure Roles. However, if the legacy application uses Data Source Names (DSNs) and the source code is not available you may be faced with the problem of how to automate the creation of a DSN on the Web or Worker Role.</p>  <p>Because the Web and Worker Roles instances can be moved to a different hardware when <a href="http://msdn.microsoft.com/en-us/library/windowsazure/hh543978.aspx">Azure Host OS is updated</a>, we need to ensure that the data source is automatically created for us.</p>  <p>In general, ODBC DSNs are created with the <a href="http://msdn.microsoft.com/en-us/library/ms187039.aspx">ODBC Data Source Administrator</a> that stores information in Windows Registry. You can create System (accessible to all users) and User (accessible by a given user) DSNs. In our case we will focus on System DSNs.</p>  <p>To automate creation of the DSN on Azure Web/Worker Role we will use a <a href="http://msdn.microsoft.com/en-us/library/windowsazure/hh180155.aspx">startup task</a> that will write to the Windows Registry the same information that the ODBC Data Source Administrator creates. </p>  <p>This article contains steps that tell you how to modify the registry. However, serious problems might occur if you modify the registry incorrectly. Therefore, make sure that you follow these steps carefully. For added protection, back up the registry before you modify it. Then, you can restore the registry if a problem occurs. For more information about how to back up and restore the registry, click the following article number to view the article in the Microsoft Knowledge Base: <a href="http://support.microsoft.com/kb/322756">322756</a> “How to back up and restore the registry in Windows”.</p>  <p>On the 64 bit OS ( Azure OS is 64bit) there are two locations where the configuration can take place depending if your code is 64 bit or 32 bit and therefore if it uses a DSN created with 32 bit (%<font size="1" face="cou">SystemRoot%\SysWOW64\odbcad32.exe</font>) or the 64 bit version <font size="1" face="cou">(%windir%\system32\odbcad32.exe</font>) of the ODBC Data Source Administrator.</p>  <p>On the 64 bit machine the former writes to the registry at <font size="1" face="cour">[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI]</font>, whereas the latter writes to the key <font size="1" face="cour">[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI]</font>.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2110.image_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/2110.image_5F00_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/7713.image_thumb.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/7713.image_5F00_thumb.png" width="739" height="154" /></a> </p>  <p>Quick inspection with the Registry Editor (<font size="1" face="cour">regedit.exe</font>) shows that the key <font size="1" face="cour">[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources]</font> holds the mapping from the DSN to the driver name. On the other hand, the key <font size="1" face="cour">[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\DSN_ Name]</font> holds the DSN configuration details.</p>  <p>The keys can be exported from the Registry Editor into a file that we will later use to create a DSN. For example consider the following 32 bit System DSN configuration <font size="1" face="cour">odbc.reg</font> file:</p>  <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">   <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">Windows Registry Editor Version 5.00<br /><br />[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\SQLNativeAzure]<br />&quot;Database&quot;=&quot;CustomerDB&quot;<br />&quot;Description&quot;=&quot;NerdDinner database in SQL Azure server&quot;<br />&quot;Driver&quot;=&quot;%SystemRoot%\\system32\\sqlncli10.dll&quot;<br />&quot;LastUser&quot;=&quot;user@ma9zkyiigg.database.windows.net&quot;<br />&quot;Server&quot;=&quot;ma9zkyiigg.database.windows.net&quot;<br />[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBC.INI\ODBC Data Sources]<br />&quot;SQLNativeAzure&quot;=&quot;SQL Server Native Client 10.0&quot;<br /></pre>

  <br /></div>

<p>Note, that in the <font size="1" face="cour">“Driver”</font> key we cannot use the absolute path to the driver because on the Windows Azure Web or the Worker role we do not know in advance the drive on which operating system files will be installed. Therefore, I use environment variable to work around that problem.</p>

<p>We can test our registry DSN configuration on the development machine running the command </p>

<p><font size="1" face="cour">regedit /s odbc.reg</font></p>

<p>The /s option suppresses informational dialog boxes that would normally be displayed. You should be able to verify with the ODBC Data Source Administrator that the DSN was correctly created.</p>

<p>What is left is to configure in your Visual Studio Azure solution the <a href="http://msdn.microsoft.com/en-us/library/windowsazure/gg456327.aspx">startup task</a> to run the command. </p>

<p>The startup task must run in the elevated <font size="1" face="cour">executionContext</font> to ensure administrative permissions required for registry. Following is the example of the relevant part of the ServiceDefinition .csdef file:</p>

<p><font size="1" face="Courier New"></font></p>

<p></p>

<p></p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">&lt;</span><span style="color: #800000">ServiceDefinition</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">=&quot;MyService&quot;</span> <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">=&quot;http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition&quot;</span><span style="color: #0000ff">&gt;</span><br />   <span style="color: #0000ff">&lt;</span><span style="color: #800000">WebRole</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">=&quot;WebRole1&quot;</span><span style="color: #0000ff">&gt;</span><br />      <span style="color: #0000ff">&lt;</span><span style="color: #800000">Startup</span><span style="color: #0000ff">&gt;</span><br />         <span style="color: #0000ff">&lt;</span><span style="color: #800000">Task</span> <span style="color: #ff0000">commandLine</span><span style="color: #0000ff">=&quot;regedit /s odbc.reg&quot;</span> <span style="color: #ff0000">executionContext</span><span style="color: #0000ff">=&quot;elevated&quot;</span> <span style="color: #ff0000">taskType</span><span style="color: #0000ff">=&quot;simple&quot;</span><span style="color: #0000ff">&gt;</span><br />         <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Task</span><span style="color: #0000ff">&gt;</span><br />      <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Startup</span><span style="color: #0000ff">&gt;</span><br />   <span style="color: #0000ff">&lt;/</span><span style="color: #800000">WebRole</span><span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ServiceDefinition</span><span style="color: #0000ff">&gt;</span><br /></pre>

  <br /></div>

<p></p>

<p>Obviously, you should not forget to add the <font size="1" face="cour">odbc.reg</font> file to the solution and mark the file properties in Visual Studio with<font size="1" face="cour"> Copy To Output Directory=Copy if Newer</font> to ensure it forms part of the package that will be generated.</p>

<p>If you also <a href="https://www.windowsazure.com/en-us/develop/net/common-tasks/remote-desktop/">configure Remote Desktop</a> access to the role instance you can launch the ODBC Data Source Admin on the actual Role instance to confirm that the DSN is set up correctly.</p>

<p>At this stage an application can use the configured DSN in connection string as in the following example:</p>

<p><font size="1" face="cour">&quot;DSN=SQLNativeAzure;uid=user@ma9zkyiigg.database.windows.net;pwd=my_password;&quot;</font></p>

<p>You may be tempted to elaborate a more complex startup task to create the shortcut to the ODBC Data Source Administrator with the idea to use it later in the Remote Desktop (RD) session on the role instance. However, application shortcuts are associated with the user profiles and the Remote Desktop user profile most likely is not created yet when the startup task runs. </p>

<p>What you can do to work around this is to copy a script that creates the shortcut to a well- known folder. After logging to role instance via RD you would then run this script to get shortcuts created for you. But this is a topic for another blog.</p>]]></content:encoded>
    </item>
    <item>
      <title>How to Reduce SQL Server On-Premise Connection Latency from Windows Azure Web Role – First Impressions of Azure Connect</title>
      <link>https://docs.microsoft.com/archive/blogs/micham/how-to-reduce-sql-server-on-premise-connection-latency-from-windows-azure-web-role-first-impressions-of-azure-connect</link>
      <pubDate>Tue, 14 Jun 2011 07:35:21 GMT</pubDate>
      <dc:creator><![CDATA[micham]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micham/2011/06/14/how-to-reduce-sql-server-on-premise-connection-latency-from-windows-azure-web-role-first-impressions-of-azure-connect/</guid>
      <description><![CDATA[In this post I describe my experience from implementing Azure Connect and key findings regarding...]]></description>
      <content:encoded><![CDATA[<p></p>  <p></p>  <p>In this post I describe my experience from implementing Azure Connect and key findings regarding factors that impact connection latency in a scenario where SQL Server uses integrated authentication and the Azure web role instance is domain joined. </p>  <h2>Azure Connect Why Bother?</h2>  <p>We have introduced <a href="http://msdn.microsoft.com/en-us/library/gg432997.aspx">Azure Connect</a> in <a href="http://bit.ly/akeK7Q">PDC 2010</a> Conference. It is currently it is available as a beta (CTP2) technology. You can request access to Azure beta programs on the <a href="https://windows.azure.com/default.aspx">Windows Azure developer</a> portal. After you log in click <strong>Home</strong> and then <strong>Beta Programs</strong> on the left panel. You will see Azure Connect listed there. You can now push the button <strong>Apply for Access</strong> to request participation. It can take some days before you get approval and this feature is enabled for your subscription. </p>  <p>Azure Connect opens the possibility of new scenarios – building hybrid solutions that include Azure virtual machines (role instances) and on-premise machines. You can join the Azure virtual machines to your domain and access them on your local network just as you access your physical servers.</p>  <p>There are some limitations of course. The biggest one is that the Azure roles do not preserve local state. This means that when the Azure host OS is upgraded you will loose any configuration you did manually. Consequently, we need to use Startup task to automate any configuration changes (pre-requisite components, configuration related to IIS, etc). For a scenario where the Azure role instances are domain joined we need to remember that the identity (machine name) of the role instance may change so we cannot really manage the Azure virtual machines as if they local domain resources.</p>  <p>Some customers object to having a solution hosted in Azure because they do not want to move their data to the Cloud because of legal requirements. Azure Connect now enables a scenario where you can keep your SQL server on your corporate network but move to Azure other servers (web servers). Event better, you do not have to compromise on security. You can domain join the Azure web role instances so that they use windows integrated security when accessing a SQL Server!</p>  <h2>Azure Connect Basics</h2>  <p>The latest <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78&amp;displaylang=en">Windows Azure Platform Training Kit</a> contains a lab <a href=" http://msdn.microsoft.com/en-us/wazplatformtrainingcourse_connectingappswithazureconnectlab_topic2">Connecting an Azure Web Role to an External SQL Server Database with Windows Azure Connect</a>. It describes a scenario where the Azure web role instance contains an ASP.Net page configured for anonymous access. When the page loads it connects to the SQL Server that is located in the on-premise network and uses SQL Authentication. The Azure web role instance is not domain joined but rather works in the workgroup. The instructions in this lab are pretty exhaustive there are just two important points to emphasize:</p>  <ul>   <li>The firewall rule to allow incoming traffic on port 1433 on the SQL server machine should be applied not just to Domain or Private but also <strong>Public</strong> profiles because your Azure role instance connects from the internet. </li>    <li>Almost certainly we need to control the <strong>Connection Timeout</strong> property in the SQL connection string. The Azure Connect Relays are now available in US, Europe and Asia so you should select the closes datacenter location.However, there may be cases where so the default connection timeout of 15 seconds is not sufficient and you may need to increase the default value. </li> </ul>  <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">   <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">&lt;</span><span style="color: #800000">connectionStrings</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">add</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">=&quot;NorthwindConnectionString&quot;</span> <span style="color: #ff0000">connectionString</span><span style="color: #0000ff">=&quot;Data Source=SQLServer.CONTOSO.COM,1433;Initial Catalog=Northwind;Persist Security Info=True;User ID=labUser;Password=Passw0rd!;Connection Timeout=60&quot;</span> <span style="color: #ff0000">providerName</span><span style="color: #0000ff">=&quot;System.Data.SqlClient&quot;</span> <span style="color: #0000ff">/&gt;</span><br /><span style="color: #0000ff">&lt;/</span><span style="color: #800000">connectionStrings</span><span style="color: #0000ff">&gt;</span><br /></pre>

  <br /></div>

<p>A more interesting scenario is when the Azure role instance VM is joined to the local, on-premise domain. In this scenario IIS application pool of the Azure web role can be configured with the domain account instead of the Network Service. Consequently, the on-premise SQL server can be locked down with Windows integrated authentication. So lets have a look what would be required. Essentially, there are two parts of the technical solution:</p>

<ol>
  <li>Joining the Azure web role to the domain </li>

  <li>Configuring the IIS application pool </li>
</ol>

<p>I should mention that in my case the on-premise components (SQL Server and Active Directory) were located in Madrid, Spain and that I was deploying Azure web roles to Dublin datacenter.</p>

<p>Lets have a look at these two points in turn.</p>

<p>1. The procedure to join an Azure role to the on-premise domain is well documented in MSDN article <a href="http://msdn.microsoft.com/en-us/library/gg454720.aspx">Overview of Windows Azure Connect When Roles Are Joined to a Domain</a>. and in the product team blog <a href="http://blogs.msdn.com/b/windows_azure_connect_team_blog/archive/2010/12/10/domain-joining-windows-azure-roles.aspx">Domain Joining Azure Roles.</a>&#160; Perhaps the point that is worthwhile to call out some practical points. </p>

<p>The first is regarding the certificate that you need to encrypt the domain password (required to join the VM to domain).&#160; it is possible to use the same certificate you use to secure the Remote Desktop password. Most likely RD access will be enabled anyway so if security policy of the customer allow it we can reuse the certificate we already have configured.&#160; </p>

<p>It is also beneficial to configure a domain account for the <font face="cour">Microsoft.WindowsAzure.Plugins.Connect.Administrators</font> Connect setting. You can then Remote Desktop into your Web role with the domain account rather than local machine account. Obviously, that you give use the access to the domain resources from the RD session.</p>

<p>The second practical point is that although the Connect agent icon may be telling you that there is some issue do not rely on it. For example on my SQL server I see the agent apparently in the eternal connecting state</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8054.image_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/8054.image_5F00_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2021.image_thumb.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/2021.image_5F00_thumb.png" width="237" height="73" /></a> </p>

<p>but actually it is working fine and this is a UI refresh issue that we expect to be corrected. What is worthwhile to do is to open a firewall for ping so that you can test that the communication between the Web Role VM and the SQL server actually works. You can do this using command</p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">netsh advfirewall firewall add rule name=<span style="color: #006080">&quot;ICMPv6&quot;</span> dir=<span style="color: #0000ff">in</span> action=allow enable=yes protocol=icmpv6</pre>

  <br /></div>

<p></p>

<p></p>

<p></p>

<p>For the web role you would put this into a <a href="http://msdn.microsoft.com/en-us/library/gg456327.aspx">startup task</a> of course. Than you can ping your Azure VMs to verify connectivity. Following is a ping from SQL server on-premise to a Web Role VM (in this case the Azure Relay was in US and the solution in Europe hence large latencies for ping here).</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/4670.image_4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/4670.image_5F00_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/3108.image_thumb_1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/3108.image_5F00_thumb_5F00_1.png" width="697" height="211" /></a> </p>

<p>2. What is not documented currently on MSDN is how you can set an account for the IIS application pool programmatically from the Web Role. Because the role instances can be recycled in Azure this has to be automated with code. Fortunately, the product team has just published a blog <a href="http://blogs.msdn.com/b/windows_azure_connect_team_blog/archive/2011/03/16/windows-azure-connect-use-case-enable-windows-authentication-to-sql-server-using-application-pool-credentials.aspx">Windows Azure Connect Use Case: Web Role / Application Pool Access SQL Server using Windows Authentication</a>. This code is incorporated into the OnStart() method of the WebRole and has some nice features.</p>

<ul>
  <li>It will detect if Connect network and DNS are available and if the role is domain joined. If not, it will keep on waiting until they are. Obviously, you will have to manually set up the Connect policy to allow communication between the Connect endpoint on the Web Role and the machines (SQL server, Domain controller) that are on-premise. Once you do so the Connect plug-in will perform the domain join and eventually your role will be in Ready state. </li>

  <li>Only after you are domain joined and have network connectivity will the code set the domain account for the application pool. The code uses AppCmd.exe which is better than other approaches based on writing to the IIS metabase that may require you to configure additional Windows features on the machine. </li>

  <li>The associated IIS application pool password is encrypted with the certificate in the same way as the domain join password and is stored in the configuration file. So it is not being hardcoded into your code. </li>
</ul>

<p>When you deploy the solution to Azure your role will be Busy. This is expected because although the role has the Connect Agent installed the Azure Connect policy does not exist that would allow it to communicate with the domain controller – making the Azure domain join impossible.</p>

<p>We need to click the Virtual Network in the left panel in the Azure management Portal, expand the Connect node , the subscription and lookup the list of activated endpoints:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8308.image_12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/8308.image_5F00_12.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0385.image_thumb_5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/0385.image_5F00_thumb_5F00_5.png" width="778" height="336" /></a></p>

<p>Here you can see the Azure web role instance RD00155D361666 listed confirming that it has an active Connect Agent. We now have to define the Azure Connect policy that will allow it to communicate with Active Directory and the SQLServer machine on-premise.</p>

<p>This is easily done by clicking on the Groups and Roles node and Create Group button</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8802.image_14.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/8802.image_5F00_14.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/1057.image_thumb_6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/1057.image_5F00_thumb_5F00_6.png" width="754" height="510" /></a>&#160; </p>

<p>In the scenario where we use integrated authentication it is important NOT to check “Interconnected:” check box. What is the reason? More about it below in the section “Reduction of Connection Latency”.</p>

<p>When we save this Azure Connect policy, the Azure connect agents will pick up the policy change automatically (it should happen automatically every 5 minutes or you can force the update right clicking on the Azure Connect icon in the systray and selecting “Refresh Policy”.</p>

<p>You also want to make sure that you use the Relay in the datacenter that is closest to your location (in my case it is Europe). You can change the Relay location clicking the Relay Region button.</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0486.image_16.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/0486.image_5F00_16.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/6170.image_thumb_7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/6170.image_5F00_thumb_5F00_7.png" width="755" height="420" /></a> </p>

<p>With the Azure Connect policy in place the solution deployment will proceed to domain join the web role and eventually the deployment status of the solution will be Ready.</p>

<p>So finally we get the result. We can connect to the WebRole and pull the data from the SQL Server on-premise protected with the Windows integrated authentication</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/3058.image_6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/3058.image_5F00_6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/1411.image_thumb_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/1411.image_5F00_thumb_5F00_2.png" width="844" height="631" /></a></p>

<h2>Reduction of Connection Latency</h2>

<p>When I made the initial tests with this Web Role I was disappointed by the initial SQL Server connection latency which was about 20 seconds. Investigation with the help of the product group turned out a number of additional issues (sources of latency) that need attention.</p>

<p><strong>The Obvious Ones</strong></p>

<p>In CTP2 of Azure Connect Azure Connect Relays have been deployed to all Microsoft datacenter locations. In most cases it makes sense select the Relay closes to your intranet geographical location. Also the size of the Azure web role matters with higher spec roles having higher performance.</p>

<p>Below you can see ping times from machine in Spain to Azure web role in Dublin (Relay in Europe):</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8272.image_20.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/8272.image_5F00_20.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2844.image_thumb_9.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/2844.image_5F00_thumb_5F00_9.png" width="718" height="257" /></a> </p>

<p>The same ping times for relay in US take 3 times longer :</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/4670.image_4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/4670.image_5F00_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/3108.image_thumb_1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/3108.image_5F00_thumb_5F00_1.png" width="697" height="211" /></a> </p>

<p><strong>SQL Server Native Client Connection Latency</strong></p>

<p>When I made the initial tests with this Web Role I was disappointed by the latency which for opening the connection first time which was about 20 seconds. After talking to the product group it turns out Azure Connect will assign both the IPv4 as well as IPV6 address to the SQL Server.</p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">Resolving HostName: [sqlserver] ....<br />IP: 2a01:111:f102:140:4099:2a08:7370:e519<br />IP: 10.10.10.3<br /></pre>

  <br /></div>

<p>Because Azure Connect works with IPV6 addresses attempting to contact SQL Server on IPv4 address will lead to a timeout. The SQL Server <a href="http://msdn.microsoft.com/en-us/library/ms345359.aspx">documentation</a> comments that SQL Server Native client will try first to connect on IPv4 and then on IPv6 address if both are configured. The workaround to this problem is to configure Azure web role instance firewall to block IPv4 traffic. With IPv4 traffic blocked by firewall the SQL Server Native client will try the IPv6 address right away.</p>

<p>Because my “intranet” is on 10.X.X.X sub network following rule worked for me – the initial latency dropped from 20 seconds to 3-4 seconds.</p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">netsh advfirewall firewall add rule name=&quot;BlockIPv4SQL&quot; dir=out action=block protocol=tcp remoteport=1433 remoteip=10.0.0.0-10.255.255.255 <span style="color: #0000ff">&gt;&gt;</span> %SystemRoot%\logs\Startup.log<br /></pre>

  <br /></div>

<p>Azure Connect team blog has now published a <a href="http://blogs.msdn.com/b/windows_azure_connect_team_blog/archive/2011/06/03/speeding-up-sql-server-connections.aspx">post</a> that details the configuration required.</p>

<p><strong>SQL Server to Active Directory Latency (Azure Connect Policy induced)</strong></p>

<p>In the scenario where SQL Server uses integrated authentication it is important NOT to check “Interconnected:” check box in Azure Connect policy mentioned previously. What is the reason? If this checkbox is selected then Azure Connect is used for network communication between all endpoints in the group. This means that when Azure web role (WebRole1) attempts to query SQL Server machine then the SQL Server will use Azure Connect to contact Active Directory (rather than local network) to validate the credentials (these are IIS application pool credentials). So your traffic goes from SQL Server machine to Azure Connect Relay (in Europe it may be Dublin) and then to Active Directory-clearly increasing the latency. If the check box in NOT selected then Azure Connect will only be used for communication between WebRole1 and SQL Server and WebRole1 and Active Directory (in both directions). Therefore, SQL Server will contact Active directory using the local intranet. That configuration took off another second from the latency I was experiencing. See following blog from the Azure Connect team to get full understanding.</p>

<p><strong>Web Site Related Latencies</strong></p>

<p>There are additional potential sources of latency. Some of them are located in the web server (Azure web role) itself. One very good source of information is the document <a href="http://developer.yahoo.com/performance/rules.html">“Best Practices for Speeding up Your Website”</a> on Yahoo Developer Network. This document gives a number of tips on speeding up the loading times for the web page ranging from the use of: Content Delivery Network, caching, compression and optimization of java script and CSS. </p>

<p>I used two tips from this document: ” No 404s” and “Make favicon.ico Small and Cacheable” as they are fairly generic and easy to implement. If you Remote Desktop to Azure web role you can look up the IIS log – you will notice the requests browser makes for favicon.ico file. Just aggregate one to your website and it will load a fraction faster.</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/4186.image_8.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/4186.image_5F00_8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2330.image_thumb_3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-69-12-metablogapi/2330.image_5F00_thumb_5F00_3.png" width="678" height="178" /></a></p>

<p></p>

<p></p>

<p></p>

<p></p>

<p></p>

<p></p>

<p></p>

<h2>Summary</h2>

<p>The key experience from my experience with Azure Connect implementation was that additional sometimes, non-trivial configuration required in order to reduce the connection latency. The factors or potentials sources of latency are:</p>

<ol>
  <li>Azure Connect Relay location and Azure web role size</li>

  <li>Physical distance of your intranet machines from the datacenter</li>

  <li>SQL Server Native Client related latency</li>

  <li>SQL Server to Active Directory latency (Azure Connect policy)</li>

  <li>Web site related latencies</li>
</ol>

<p>I commented on how to tackle all of them except for 2 which we cannot do anything about.</p>]]></content:encoded>
    </item>
    <item>
      <title>How to Deploy Azure Role Pre-Requisite Components from Blob Storage</title>
      <link>https://docs.microsoft.com/archive/blogs/micham/how-to-deploy-azure-role-pre-requisite-components-from-blob-storage</link>
      <pubDate>Fri, 03 Jun 2011 03:07:35 GMT</pubDate>
      <dc:creator><![CDATA[micham]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micham/2011/06/03/how-to-deploy-azure-role-pre-requisite-components-from-blob-storage/</guid>
      <description><![CDATA[In Windows Azure SDK1.3 we have introduced the concept of startup tasks that allow us to run...]]></description>
      <content:encoded><![CDATA[<p>In Windows Azure SDK1.3 we have introduced the concept of <a href="http://msdn.microsoft.com/en-us/library/hh124132.aspx">startup tasks</a> that allow us to run commands to configure the role instance, install additional components and so on. However, this functionality requires that all pre-requisite components are part of the Azure solution package.</p>  <p>In practice this has following limitations:</p>  <ul>   <li>if you add or modify pre-requisite component you need to regenerate the Azure solution package </li>    <li>you will have to pay the bandwidth charge of transferring the regenerated solution package (perhaps 100s of MB) even though you actually want to update just one small component </li>    <li>the time to update entire role instance is incremented by the time it takes to transfer the solution package to Azure datacenter </li>    <li>you cannot update individual component rather you update entire package </li> </ul>  <p>Below I describe an alternative approach. It is based on the idea to leverage blob storage to store the pre-requisite components. Decoupling of pre-requisite components (in most cases they have no relationship with the Azure role implementation) has a number of benefits:</p>  <ul>   <li>you do not need to touch Azure solution package, simply upload a new component to blob container with a tool like <a href="http://archive.msdn.microsoft.com/windowsazuremmc">Windows Azure MMC</a> </li>    <li>you can update an individual component </li>    <li>you only pay a bandwidth cost for component you are uploading, not the entire package </li>    <li>your time to update the role instance is shorter because you are not transferring entire solution package&#160; </li> </ul>  <p>Here is how the solution is put together:</p>  <p>When Azure role starts, it downloads the components from a blob container that is defined in the .cscfg configuration file</p>  <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">   <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">&lt;</span><span style="color: #800000">Setting</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">=&quot;DeploymentContainer&quot;</span> <span style="color: #ff0000">value</span><span style="color: #0000ff">=&quot;contoso&quot;</span> <span style="color: #0000ff">/&gt;</span></pre>

  <br /></div>

<p>The components are downloaded to a local disk of the Azure role. Sufficient disk space is reserved for a Local Resource disk defined in the .csdef definition file of the solution – in my case I reserve 2GB of disk space</p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">&lt;</span><span style="color: #800000">LocalStorage</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">=&quot;TempLocalStore&quot;</span> <span style="color: #ff0000">cleanOnRoleRecycle</span><span style="color: #0000ff">=&quot;false&quot;</span> <span style="color: #ff0000">sizeInMB</span><span style="color: #0000ff">=&quot;2048&quot;</span> <span style="color: #0000ff">/&gt;</span></pre>

  <br /></div>

<p>Frequently, the pre-requisite components are installers (self extracting executables or .msi files). In most cases they will use some form of temporary storage to extract the temporary files. Most installers allow you to specify the location for temporary files but in case of legacy or undocumented third party components you may not have this option. Frequently, the default location would the directory indicated by %TEMP% or %TMP% environment variables. There is a 100MB limit on the size of the TEMP target directory that is documented in Windows Azure general troubleshooting <a href="http://msdn.microsoft.com/en-us/library/gg465400.aspx">MSDN documentation</a>.</p>

<p>To avoid this issue I implemented the mapping of the TEMP/TMP environment variables as indicated in this document. These variables point to the local disk we reserved above.</p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> MapTempEnvVariable()<br />       {<br />           <span style="color: #0000ff">string</span> customTempLocalResourcePath =<br />           RoleEnvironment.GetLocalResource(<span style="color: #006080">&quot;TempLocalStore&quot;</span>).RootPath;<br />           Environment.SetEnvironmentVariable(<span style="color: #006080">&quot;TMP&quot;</span>, customTempLocalResourcePath);<br />           Environment.SetEnvironmentVariable(<span style="color: #006080">&quot;TEMP&quot;</span>, customTempLocalResourcePath);<br />       }</pre>

  <br /></div>

<p>The OnStart() method of the role (in my case it is a “mixed Role” - Web Role that also implements a Run() method) starts the download procedure on a different thread and then blocks on a wait handle. </p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> WebRole : RoleEntryPoint<br />    {<br />        <span style="color: #0000ff">private</span> <span style="color: #0000ff">readonly</span> EventWaitHandle statusCheckWaitHandle = <span style="color: #0000ff">new</span> ManualResetEvent(<span style="color: #0000ff">false</span>);<br />        <span style="color: #0000ff">private</span> <span style="color: #0000ff">volatile</span> <span style="color: #0000ff">bool</span> busy = <span style="color: #0000ff">true</span>;<br />        <span style="color: #0000ff">private</span> <span style="color: #0000ff">const</span> <span style="color: #0000ff">int</span> ThreadPollTimeInMilliseconds = 1500;<br />       <br />       <span style="color: #008000">//periodically check if the handle is signalled</span><br />       <span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> WaitForHandle(WaitHandle handle)<br />       {<br />           <span style="color: #0000ff">while</span> (!handle.WaitOne(ThreadPollTimeInMilliseconds))<br />           {<br />               Trace.WriteLine(<span style="color: #006080">&quot;Waiting to complete configuration for this role .&quot;</span>);<br />           }<br />       }<br />[...]<br />         <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> <span style="color: #0000ff">bool</span> OnStart()<br />           {<br />           <span style="color: #008000">//start another thread that will carry would configuration</span><br />            var startThread = <span style="color: #0000ff">new</span> Thread(OnStartInternal);<br />            startThread.Start();<br />         [...]<br />           <span style="color: #008000">//Blocks this thread waiting on a handle </span><br />            WaitForHandle(statusCheckWaitHandle);           <br />            <span style="color: #0000ff">return</span> <span style="color: #0000ff">base</span>.OnStart();<br />        }<br />}</pre>

  <br /></div>

<p>If you block in OnStart() or continue depends on the nature of the pre-requisite components and where they are used. If you need your components to be installed before you enter Run() – you should block because Azure will call this method pretty much immediately after you exit OnStart(). On the other hand if you have a pure Web role than you could choose not to block. Instead, you would handle the <a href="http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleenvironment.statuscheck.aspx">StatusCheck</a> event and indicate that you are still busy configuring they role – the role will be in Busy state and will be taken out of the NLB rotation.</p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> RoleEnvironmentStatusCheck(<span style="color: #0000ff">object</span> sender, RoleInstanceStatusCheckEventArgs e){<br />           <span style="color: #0000ff">if</span> (<span style="color: #0000ff">this</span>.busy)<br />           {<br />               e.SetBusy();<br />               Trace.WriteLine(<span style="color: #006080">&quot;Role status check-telling Azure this role is BUSY configuring, traffic will not be routed to it.&quot;</span>);<br />           }<br />           <span style="color: #008000">// otherwise role is READY</span><br />           <span style="color: #0000ff">return</span>;<br />       }</pre>

  <br /></div>

<p></p>

<p>If you choose to block OnStart() there is little point to implement the StatusCheck event handler because when OnStart() is entered the role is in Busy state and the status check event is not raised until OnStart() exits and role moves to Ready state.</p>

<p>The function OnStartInternal() is where the components are downloaded from the preconfigured Blob container and written to local disk that we allocated above. When downloading the files we look for a file named command.bat. </p>

<p>This command batch file holds commands that we will run after the download completes in the similar way as we do it with startup tasks. Here the sample command.bat </p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">vcredist_x64.exe /q<br />exit /b 0</pre>

  <br /></div>

<p>I should point out that if you are dealing with large files you should definitely specify the Timeout property in the BlobRequestOptions for the DownloadToFile() function. The timeout is calculated as a product of the size of the blob in MB and the max. time that we are prepared to wait to transfer 1MB. You can tweak timeoutInSecForOneMB variable to adjust the code to the network conditions. Any value that works for you when you deploy solution to Compute Emulator and use the Azure blob store will also work when you deploy to Azure Compute because you would use blob storage in the same datacenter and the latencies would be much lower.</p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">foreach</span> (CloudBlob blob <span style="color: #0000ff">in</span> container.ListBlobs(new BlobRequestOptions() { UseFlatBlobListing = true }))<br />                {<br />                    string blobName = blob.Uri.LocalPath.Substring(blob.Parent.Uri.LocalPath.Length);<br />                    <span style="color: #0000ff">if</span> (blobName.Equals(<span style="color: #006080">&quot;command.bat&quot;</span>))<br />                    {<br />                        commandFileExists = true;<br />                    }<br />                    string file = Path.Combine(deployDir, blobName);<br /><br />                    Trace.TraceInformation(System.DateTime.UtcNow.ToUniversalTime() + <span style="color: #006080">&quot; Downloading blob &quot;</span> + blob.Uri.LocalPath + <span style="color: #006080">&quot; from deployment container &quot;</span> + container.Name + <span style="color: #006080">&quot; to file &quot;</span> + file);<br /><br />                    //the time <span style="color: #0000ff">in</span> seconds <span style="color: #0000ff">in</span> which 1 MB of data should be downloaded (otherwise we timeout)<br />                    int timeoutInSecForOneMB = 5;<br />                    double sizeInMB = System.Math.Ceiling((double)blob.Properties.Length / (1024 * 1024));<br /><br />                    // we set large enough timeout to download the blob of the given size<br />                    blob.DownloadToFile(file, new BlobRequestOptions() { Timeout = TimeSpan.FromSeconds(timeoutInSecForOneMB * sizeInMB) });<br />                    FileInfo fi = new FileInfo(file);<br />                    Trace.TraceInformation(System.DateTime.UtcNow.ToUniversalTime() + <span style="color: #006080">&quot; Saved blob to file &quot;</span> + file + <span style="color: #006080">&quot;(&quot;</span> + fi.Length + <span style="color: #006080">&quot; bytes)&quot;</span>);<br />                }</pre>

  <br /></div>

<p>After download has been completed the RunProcess() function spawns a child process to run the batch. The runtime process host WaIISHost.exe is configured to run elevated. This is done in the service definition file using the Runtime element. This is required so that the batch commands have admin rights (the process will run under Local System account)</p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">&lt;</span><span style="color: #800000">Runtime</span> <span style="color: #ff0000">executionContext</span><span style="color: #0000ff">=&quot;elevated&quot;</span><span style="color: #0000ff">&gt;</span>     <br />    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Runtime</span><span style="color: #0000ff">&gt;</span></pre>

  <br /></div>

<p>Then we signal the wait handle (if implemented) and /or set busy flag that is used with the StatusCheck event to indicate configuration has completed and role can move to Ready state.</p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">Trace.WriteLine(<span style="color: #006080">&quot;---------------Starting Deployment Batch Job--------------------&quot;</span>);<br />                <span style="color: #0000ff">if</span> (commandFileExists)<br />                    RunProcess(<span style="color: #006080">&quot;cmd.exe&quot;</span>, <span style="color: #006080">&quot;/C command.bat&quot;</span>);<br />                <span style="color: #0000ff">else</span><br />                    Trace.TraceWarning(<span style="color: #006080">&quot;Command file command.bat was not found in container &quot;</span> + container.Name);<br /><br />                Trace.WriteLine(<span style="color: #006080">&quot; Deployment completed.&quot;</span>);<br /><br />                // signal role is Ready and should be included <span style="color: #0000ff">in</span> the NLB rotation<br />                this.busy = false;<br />                //signal the wait handle to unblock OnStart() thread - <span style="color: #0000ff">if</span> waiting has been implemented.<br />                statusCheckWaitHandle.Set();</pre>

  <br /></div>

<p>The sample solution includes a <a href="http://blogs.msdn.com/b/davidhardin/archive/2011/03/29/configuring-wad-via-the-diagnostics-wadcfg-config-file.aspx">diagnostics.wadcfg</a> file that transfers the traces and events to blob store (you want to delete or rename it once you go to production to avoid associated storage costs) every 60 seconds. </p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet"><span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">=&quot;1.0&quot;</span> <span style="color: #ff0000">encoding</span><span style="color: #0000ff">=&quot;utf-8&quot;</span>?<span style="color: #0000ff">&gt;</span><br /><span style="color: #0000ff">&lt;</span><span style="color: #800000">DiagnosticMonitorConfiguration</span> <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">=&quot;http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration&quot;</span> <span style="color: #ff0000">configurationChangePollInterval</span><span style="color: #0000ff">=&quot;PT5M&quot;</span> <span style="color: #ff0000">overallQuotaInMB</span><span style="color: #0000ff">=&quot;3005&quot;</span><span style="color: #0000ff">&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">Logs</span> <span style="color: #ff0000">bufferQuotaInMB</span><span style="color: #0000ff">=&quot;250&quot;</span> <span style="color: #ff0000">scheduledTransferLogLevelFilter</span><span style="color: #0000ff">=&quot;Verbose&quot;</span> <span style="color: #ff0000">scheduledTransferPeriod</span><span style="color: #0000ff">=&quot;PT01M&quot;</span> <span style="color: #0000ff">/&gt;</span><br />  <span style="color: #0000ff">&lt;</span><span style="color: #800000">WindowsEventLog</span> <span style="color: #ff0000">bufferQuotaInMB</span><span style="color: #0000ff">=&quot;50&quot;</span><br />    <span style="color: #ff0000">scheduledTransferLogLevelFilter</span><span style="color: #0000ff">=&quot;Verbose&quot;</span><br />    <span style="color: #ff0000">scheduledTransferPeriod</span><span style="color: #0000ff">=&quot;PT01M&quot;</span><span style="color: #0000ff">&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">DataSource</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">=&quot;System!*&quot;</span> <span style="color: #0000ff">/&gt;</span><br />    <span style="color: #0000ff">&lt;</span><span style="color: #800000">DataSource</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">=&quot;Application!*&quot;</span> <span style="color: #0000ff">/&gt;</span><br />  <span style="color: #0000ff">&lt;/</span><span style="color: #800000">WindowsEventLog</span><span style="color: #0000ff">&gt;</span>  <br /><span style="color: #0000ff">&lt;/</span><span style="color: #800000">DiagnosticMonitorConfiguration</span><span style="color: #0000ff">&gt;</span></pre>

  <br /></div>

<p>You can then deploy the solution to Azure Compute and look up the traces in the WADLogsTable using any Azure storage access tool such as <a href="http://wapmmc.codeplex.com/">Azure MMC</a>. </p>

<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
  <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px" id="codeSnippet">Entering OnStart() - 03/06/2011 9:09:51<br />Blocking in OnStart() - waiting to be signalled.03/06/2011 9:09:51<br />OnStartInternal() - Started 03/06/2011 9:09:51<br />Waiting to complete configuration for this role .<br />---------------Downloading from Storage--------------------<br />03/06/2011 9:09:53 Downloading blob /contoso/command.bat from deployment container contoso to file C:\Users\micham\AppData\Local\dftmp\s0\deployment(688)\res\deployment(688).StorageDeployment.StorageDeployWebRole.0\directory\TempLocalStore\command.bat; TraceSource 'WaIISHost.exe' event<br />03/06/2011 9:09:53 Saved blob to file C:\Users\micham\AppData\Local\dftmp\s0\deployment(688)\res\deployment(688).StorageDeployment.StorageDeployWebRole.0\directory\TempLocalStore\command.bat(36 bytes); TraceSource 'WaIISHost.exe' event<br />03/06/2011 9:09:53 Downloading blob /contoso/vcredist_x64.exe from deployment container contoso to file C:\Users\micham\AppData\Local\dftmp\s0\deployment(688)\res\deployment(688).StorageDeployment.StorageDeployWebRole.0\directory\TempLocalStore\vcredist_x64.exe; TraceSource 'WaIISHost.exe' event<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />03/06/2011 9:10:01 Saved blob to file C:\Users\micham\AppData\Local\dftmp\s0\deployment(688)\res\deployment(688).StorageDeployment.StorageDeployWebRole.0\directory\TempLocalStore\vcredist_x64.exe(5718872 bytes); TraceSource 'WaIISHost.exe' event<br />---------------Starting Deployment Batch Job--------------------<br />Information: Executing: cmd.exe<br />; TraceSource 'WaIISHost.exe' event<br />C:\Users\micham\AppData\Local\dftmp\s0\deployment(688)\res\deployment(688).StorageDeployment.StorageDeployWebRole.0\directory\TempLocalStore<span style="color: #0000ff">&gt;</span>vcredist_x64.exe /q ; TraceSource 'WaIISHost.exe' event<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />Waiting to complete configuration for this role .<br />; TraceSource 'WaIISHost.exe' event<br />; TraceSource 'WaIISHost.exe' event<br />C:\Users\micham\AppData\Local\dftmp\s0\deployment(688)\res\deployment(688).StorageDeployment.StorageDeployWebRole.0\directory\TempLocalStore<span style="color: #0000ff">&gt;</span>exit /b 0 ; TraceSource 'WaIISHost.exe' event<br />; TraceSource 'WaIISHost.exe' event<br />Information: Process Exit Code: 0<br />Process execution time: 13,151 seconds.<br /> Deployment completed.<br />Exiting OnStart() - 03/06/2011 9:10:14<br />Information: Worker entry point called<br />Information: Working</pre>

  <br /></div>

<p>If you need to redeploy the component you just upload the changed component versions to blob storage and restart your role to pick it up. When you combine this technique with the <a href="http://blogs.msdn.com/b/micham/archive/2011/04/07/how-to-update-web-application-directly-to-windows-azure-web-role-without-redeploying-azure-package.aspx">Web Deploy</a> to update the code of Azure web role you should notice that the whole update process is faster and more flexible. This approach would be most useful in development and testing where otherwise you redeploy the solution multiple times.</p>

<p>You can <a href="http://gpsspainstorage.blob.core.windows.net/msdn-code/StorageDeploymentRole.zip">download the solution here</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>How to Update Web Application Directly to Windows Azure Web Role without Redeploying Azure Package</title>
      <link>https://docs.microsoft.com/archive/blogs/micham/how-to-update-web-application-directly-to-windows-azure-web-role-without-redeploying-azure-package</link>
      <pubDate>Thu, 07 Apr 2011 07:52:43 GMT</pubDate>
      <dc:creator><![CDATA[micham]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micham/2011/04/07/how-to-update-web-application-directly-to-windows-azure-web-role-without-redeploying-azure-package/</guid>
      <description><![CDATA[The deployment of the solution package to Windows Azure is time consuming (I have observed in...]]></description>
      <content:encoded><![CDATA[<p>The deployment of the solution package to Windows Azure is time consuming (I have observed in practice 10-15 minutes). The new features introduced in Azure SDK 1.3 onwards enable alternative for deployment (more precisely update) of the Azure Web Role. Essentially, the idea is to leverage IIS Remote Management feature and <a href="http://learn.iis.net/page.aspx/422/packaging-and-restoring-a-web-site/">Web Deploy</a>. This means that you can update the Web Role within seconds without having to redeploy Azure solution.</p>  <p>Ryan Dunn has packaged the Web Deploy as an Azure plug-in. He also documented the required configuration process in his <a href="http://dunnry.com/blog/2010/12/20/UsingWebDeployWithWindowsAzure.aspx">blog</a>. You simply download the plug-in and configure it with Windows Azure SDK.</p>  <p>I have followed his blog but had difficulty in getting the Web Deploy to work. I have then found <a href="http://www.wadewegner.com/2010/12/web-deploy-with-windows-azure-on-restrictive-networks/">another blog</a> from Wade that explains that some firewalls disallow SSL traffic on any port other than 443. So the solution is to map 443 to the port 8172. Now how to do it and where? – the original source does not make it explicit.</p>  <p>Locate the WebDeploy.csplugin in C:\Program Files\Windows Azure SDK\v1.4\bin\plugins\WebDeploy</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5287.image_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5287.image_5F00_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5125.image_thumb.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5125.image_5F00_thumb.png" width="749" height="280" /></a> </p>  <p>Run the Notepad in elevated mode (as Admin) and open this file. Locate the InputEndpoint element and change port attribute as show below. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/3630.image_4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/3630.image_5F00_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5621.image_thumb_1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5621.image_5F00_thumb_5F00_1.png" width="755" height="189" /></a> </p>  <p>That is it. The next step is to deploy the solution package into the Web Role. Yes it takes still 15 minutes but now because of the Azure WebDeploy plugin we can use update the role once it becomes ready.</p>  <p>From Visual Studio I can now right click the web application project (associated to Web Role project) and select Publish. The configuration varies from the one described in Ryan Dunn <a href="http://dunnry.com/blog/2010/12/20/UsingWebDeployWithWindowsAzure.aspx">blog</a>. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/6786.image_6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/6786.image_5F00_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0755.image_thumb_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0755.image_5F00_thumb_5F00_2.png" width="494" height="712" /></a> </p>  <p>The update of the WebRole with the web site project that Visual Studio created by default is really fast it took in my case less than 2 seconds.</p>  <p>This is great, but I will need to do more tests on more complex projects to see to which extent this approach is practicable.</p>]]></content:encoded>
    </item>
    <item>
      <title>How to Obtain Powered by Azure Logo for your Windows Azure website</title>
      <link>https://docs.microsoft.com/archive/blogs/micham/how-to-obtain-powered-by-azure-logo-for-your-windows-azure-website</link>
      <pubDate>Mon, 28 Mar 2011 14:17:39 GMT</pubDate>
      <dc:creator><![CDATA[micham]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micham/2011/03/28/how-to-obtain-powered-by-azure-logo-for-your-windows-azure-website/</guid>
      <description><![CDATA[To help partners market their applications Microsoft has created a new logo “Powered by Windows...]]></description>
      <content:encoded><![CDATA[<p>To help partners market their applications Microsoft has created a new logo “Powered by Windows Azure”. You can read about the objectives of this co-marketing program in this <a href="http://www.microsoft.com/windowsazure/comarketing/default.aspx">web page</a>. In this blog we will have a look at the process and requirements to obtain this logo assuming that you have already deployed your web site to Azure.</p>  <ol>   <li>The first step is to access the Microsoft Platform Ready website. You click the Sign Up link where you can provide some information about yourself and your company. You can then Sign In with your Live ID to access the portal </li> </ol>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0804.image_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0804.image_5F00_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/3146.image_thumb.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/3146.image_5F00_thumb.png" width="646" height="440" /></a> </p>  <p>2. Now we are redirected to a page that lists in panel My MPR the list of applications registered for certification. The application can be added by clicking as small link <strong>Add an app</strong> below the Application table</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/3542.image_4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/3542.image_5F00_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/7271.image_thumb_1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/7271.image_5F00_thumb_5F00_1.png" width="662" height="281" /></a> </p>  <p>3. The form appears where you provide information about the Windows Azure website that you want to certify. The application name, version, description and the URL to the application are provide.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0434.image_6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0434.image_5F00_6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/4544.image_thumb_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/4544.image_5F00_thumb_5F00_2.png" width="661" height="527" /></a> </p>  <p>4. In the remaining section of the form we indicate the language of the website and our interest in certifying it on Windows Azure. If the application is already working on Azure specify current date for Target Compatibility Date. Press Save &amp; Submit button</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5633.image_8.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5633.image_5F00_8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/3482.image_thumb_3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/3482.image_5F00_thumb_5F00_3.png" width="664" height="664" /></a> </p>  <p>5. We now go back to the main MPR page and can see Windows Azure Platform technology listed when our Azure website is selected in the list of the applications. We can now click the <strong>Download tool</strong> link that appears in the Actions column (it may take a minute or two for this link to become active).</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/3414.image_10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/3414.image_5F00_10.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5141.image_thumb_4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5141.image_5F00_thumb_5F00_4.png" width="661" height="499" /></a> </p>  <p></p>  <p></p>  <p></p>  <p></p>  <p>5. When the link is clicked the tabbed section below list of applications changed to the Test Phase. In that section we can download the certification tool by clicking on the link <strong>Microsoft Platform Ready Test Tool</strong>. This page allows us also to upload the test results generated from this tool for our registered application.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0218.image_12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0218.image_5F00_12.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/6661.image_thumb_5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/6661.image_5F00_thumb_5F00_5.png" width="669" height="536" /></a> </p>  <p>6. Install the Microsoft Platform Ready Test Tool on your computer.</p>  <p><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="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2845.image_thumb_6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/2845.image_5F00_thumb_5F00_6.png" width="664" height="543" /></p>  <p>7.Start the tool by typing Microsoft Platform in the Start-&gt;Search… textbox. In the Microsoft Platform Ready Test Tool click on the button <strong>Start New Test</strong></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5826.image_16.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5826.image_5F00_16.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/6082.image_thumb_7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/6082.image_5F00_thumb_5F00_7.png" width="668" height="494" /></a> </p>  <p>8. In the Test Information screen select Windows Azure checkbox, fill out name of the test and press the Next button</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0654.image_20.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0654.image_5F00_20.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8512.image_thumb_9.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/8512.image_5F00_thumb_5F00_9.png" width="674" height="495" /></a> </p>  <p>9. In the next screen click the Edit link to fill out details required by the test</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8524.image_22.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/8524.image_5F00_22.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8524.image_thumb_10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/8524.image_5F00_thumb_5F00_10.png" width="671" height="496" /></a> </p>  <p>10. The test requires a URL to the Windows Azure website and its IP address</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/7633.image_24.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/7633.image_5F00_24.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2671.image_thumb_11.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/2671.image_5F00_thumb_5F00_11.png" width="675" height="496" /></a> </p>  <p>11. Log in to Windows Azure developer portal to look up these details</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/7484.image_26.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/7484.image_5F00_26.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0537.image_thumb_12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0537.image_5F00_thumb_5F00_12.png" width="773" height="331" /></a> </p>  <p>12. Copy and paste the <strong>DNS name</strong> (without the http:// prefix) and <strong>Input Endpoints</strong> to the test pre-requisites screen and press Verify button. The Configuration Status should be Pass for both items. Press Close button.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5482.image_18.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5482.image_5F00_18.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5811.image_thumb_8.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5811.image_5F00_thumb_5F00_8.png" width="669" height="494" /></a> </p>  <p>13. On the next screen verify that the pre-requisite status is Pass and press the Next button</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/7484.image_28.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/7484.image_5F00_28.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/6013.image_thumb_13.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/6013.image_5F00_thumb_5F00_13.png" width="681" height="500" /></a>&#160; </p>  <p>14. On the next page mark the check box and press the Next button. The status will be Executing tests</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8407.image_32.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/8407.image_5F00_32.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8004.image_thumb_15.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/8004.image_5F00_thumb_5F00_15.png" width="682" height="504" /></a> </p>  <p>15. On next screen you can view the status of the test that should be Pass. Click Next to view the report</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/6431.image_34.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/6431.image_5F00_34.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/7532.image_thumb_16.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/7532.image_5F00_thumb_5F00_16.png" width="693" height="509" /></a> </p>  <p>16. On the final screen you can click Show button to view the report. Then click Reports button to generate the test results package.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/1588.image_36.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/1588.image_5F00_36.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2086.image_thumb_17.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/2086.image_5F00_thumb_5F00_17.png" width="688" height="508" /></a> </p>  <p>17. On this page select the tests that you want to include in the test results package. Press Next button</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/4645.image_42.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/4645.image_5F00_42.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0878.image_thumb_20.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0878.image_5F00_thumb_5F00_20.png" width="695" height="511" /></a> </p>  <p>18. Review the summary of the tests and press the Next button.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/4604.image_44.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/4604.image_5F00_44.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8233.image_thumb_21.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/8233.image_5F00_thumb_5F00_21.png" width="702" height="516" /></a> </p>  <p>19. Provide the application name and version and press Next.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0003.image_46.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0003.image_5F00_46.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0250.image_thumb_22.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0250.image_5F00_thumb_5F00_22.png" width="702" height="516" /></a> </p>  <p>20. Now we need to specify additional information to generate the package. In particular we specify the Application ID from the <a title="http://www.microsoftplatformready.com" href="http://www.microsoftplatformready.com">http://www.microsoftplatformready.com</a> that was assigned in step 5. On this screen we can also review the Logo agreement. Press Next to generate the package.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/4064.image_48.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/4064.image_5F00_48.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5008.image_thumb_23.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5008.image_5F00_thumb_5F00_23.png" width="712" height="526" /></a> </p>  <p>21. On the final screen make good note of the location of the test package</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0726.image_50.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0726.image_5F00_50.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/6518.image_thumb_24.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/6518.image_5F00_thumb_5F00_24.png" width="713" height="527" /></a> </p>  <p>22. Now we go back to the <a title="http://www.microsoftplatformready.com" href="http://www.microsoftplatformready.com">http://www.microsoftplatformready.com</a> and log in. In the Dashboard click the application Name in the application table and then click the Test tab on the horizontal tab bar and Test My Apps tab on the vertical tab bar. You should see a screen as below</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5556.image_38.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5556.image_5F00_38.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/1754.image_thumb_18.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/1754.image_5F00_thumb_5F00_18.png" width="692" height="552" /></a> </p>  <p>23. Now upload the test package – this is a .zip archive located in the Documents folder, in the subfolder of MPR\Results Package. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/7484.image_52.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/7484.image_5F00_52.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8176.image_thumb_25.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/8176.image_5F00_thumb_5F00_25.png" width="752" height="113" /></a> </p>  <p>24. Press Upload button to submit it to the portal.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/6320.image_40.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/6320.image_5F00_40.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5758.image_thumb_19.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5758.image_5F00_thumb_5F00_19.png" width="699" height="265" /></a></p>  <p>25. Press the Refresh link to refresh test result processing state. You should see a page as below</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/1072.image_54.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/1072.image_5F00_54.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2654.image_thumb_26.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/2654.image_5F00_thumb_5F00_26.png" width="704" height="447" /></a> </p>  <p>You can download now the Powered by Windows Azure logo by clicking at the download link.You can also get access to additional marketing material by clicking on the <strong>Verify</strong> vertical tab and then on the <strong>Market</strong> horizontal tab. </p>]]></content:encoded>
    </item>
    <item>
      <title>How to Obtain Windows Azure Subscription with the Cloud Essentials Pack</title>
      <link>https://docs.microsoft.com/archive/blogs/micham/how-to-obtain-windows-azure-subscription-with-the-cloud-essentials-pack</link>
      <pubDate>Mon, 28 Mar 2011 07:31:10 GMT</pubDate>
      <dc:creator><![CDATA[micham]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micham/2011/03/28/how-to-obtain-windows-azure-subscription-with-the-cloud-essentials-pack/</guid>
      <description><![CDATA[The Cloud Essentials Pack has been launched early this year. It allows any partner to access Azure...]]></description>
      <content:encoded><![CDATA[<p>The Cloud Essentials Pack has been launched early this year. It allows any partner to access Azure subscription in addition to other benefits:</p>  <ul>   <li>250 users of <a href="http://www.microsoft.com/online/es-es/business-productivity.mspx">Microsoft Business Productivity Online Standard Suite</a> for internal use. This includes Exchange Online, SharePoint Online, Office Communications Online and Office Live Meeting. </li>    <li>250 users of <a href="http://crm.dynamics.com">Microsoft Dynamics CRM Online</a> for internal use. </li>    <li><a href="http://www.microsoft.com/windows/windowsintune">Windows Intune</a> to administer up to 10 machines </li>    <li><a href="http://www.microsoft.com/windowsazure/">Windows Azure</a> subscription which includes a block of monthly resource consumption which is free: </li> </ul>  <table border="1" cellspacing="0" cellpadding="2" width="804"><tbody>     <tr>       <td valign="top" width="200">&#160;</td>        <td valign="top" width="602"><strong>Windows Azure Platform monthly free resource consumption block</strong></td>     </tr>      <tr>       <td valign="top" width="200">Windows Azure</td>        <td valign="top" width="602">         <ul><li></li>          <li>750 hours of extra small compute instance </li>          <li>25 hours of small compute instance </li>          <li>3GB of storage </li>          <li>250,000 storage transactions </li>       </ul></td>     </tr>      <tr>       <td valign="top" width="200">Microsoft SQL Azure</td>        <td valign="top" width="602">1 GB Web Edition Database</td>     </tr>      <tr>       <td valign="top" width="200">Windows Azure platform AppFabric</td>        <td valign="top" width="602">         <ul><li></li>          <li>100,000 Access Control transactions </li>          <li>2 Service Bus connections </li>       </ul></td>     </tr>      <tr>       <td valign="top" width="200">Data Transfer</td>        <td valign="top" width="602">         <ul><li>3GB in </li>          <li>6GB out </li>       </ul></td>     </tr>   </tbody></table>  <p>You should look up the up-to-date information in this <a href="http://www.microsoft.com/windowsazure/offers/popup/popup.aspx?lang=en&amp;locale=en-US&amp;offer=MS-AZR-0002P">link</a>.</p>  <p>This offer is interesting to companies that are not yet a Microsoft Partner. Microsoft Partners with MSDN subscription should verify if their MSDN subscription level allows them to access Windows Azure subscription under the umbrella of MSDN program because they will get more generous free resource consumption block. You can read about the Windows Azure benefits in this <a href="http://msdn.microsoft.com/en-us/subscriptions/ee461076.aspx">reference</a> and you can look up how to activate this benefit in my <a href="http://blogs.msdn.com/b/micham/archive/2010/09/27/how-to-subscribe-windows-azure-platform-msdn-premium.aspx">previous blog post</a>.</p>  <p>&#160; </p>  <p><strong>Step by Step Guide How to Activate Azure Subscription in Cloud Essentials Pack</strong></p>  <p>The process can be confusing because it requires you to interact with four different portals: Cloud Essentials Program portal, Microsoft Partner Network portal and Microsoft Platform Ready portal and Microsoft Online Services portal. Each of these portals handles a different part of the entitlement. Also, you will need a credit card to complete the subscription activation. This is required in case you exceed the free consumption block specified in the table above. </p>  <p>The following instructions can help you throughout the process.</p>  <p><strong>If you are not Partner of Microsoft:</strong></p>  <ul>   <li>If you do not have Windows Live ID, you need to obtain one in <a href="http://www.passport.net">http://www.passport.net</a> . If you have existing Windows Live ID go to step 2. </li>    <li>Go to the <a href="https://partner.microsoft.com/global/program/memgettingstarted/gsenroll">Microsoft Partner Network</a> (MPN) and enroll. In only three steps you can become MPN member free of charge. </li>    <li>Once you have completed the registration it can take some minutes until your this is reflected in the system. </li>    <li>From now on you can follow the steps below for the Partners of Microsoft. </li> </ul>  <p>If you have problem registering in MPN online please call the Regional Partner Center you can find a telephone list for all countries <a href="https://partner.microsoft.com/global/40032423">here</a>.</p>  <p><strong>If you are already Partner of Microsoft:</strong></p>  <ol>   <li>Go to Cloud Essential portal <a href="http://www.microsoftcloudpartner.com">http://www.microsoftcloudpartner.com</a> </li>    <li>Click the button <strong>Get Cloud Essentials Login Now </strong></li>    <li>If this is first time you are logging in you will be redirected to the page prompting you to log on with your Windows Live ID (the same one you used to enroll in MPN) and afterwards you can push the button to verify your MPN membership.      <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2656.image_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/2656.image_5F00_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2604.image_thumb.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/2604.image_5F00_thumb.png" width="510" height="327" /></a> </p>   </li> </ol>  <p>4. In the My Cloud Partner page you will see progress bar of the Cloud Essentials program showing 50%. To continue you will have to register basic details of the Windows Azure application that you want to develop. You can to this by clicking <strong>Getting Started tab</strong> on this page and <strong>Qualify</strong> and reviewing the requirements. You will see a link to <a href="http://www.microsoftplatformready.com/">Microsoft Platform Ready</a> there. Click this link to continue.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2112.image_14.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/2112.image_5F00_14.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/7827.image_thumb_6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/7827.image_5F00_thumb_5F00_6.png" width="610" height="193" /></a>&#160;</p>  <p>5. When you access <a href="http://www.microsoftplatformready.com/">Microsoft Platform Ready</a> website you will need to push the button <strong>Initiate session</strong> and complete the profile of your company if it is the first time you access it. </p>  <p>6. In the next page you need to register a Windows Azure application. This is accomplished by clicking on the <strong>Add an app</strong> link at the bottom of the table listing all your applications</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/7433.image_4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/7433.image_5F00_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0181.image_thumb_1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0181.image_5F00_thumb_5F00_1.png" width="802" height="236" /></a>&#160;&#160; </p>  <p>7 . In the following dialog you fill out a form that collects basic data about the application. You should select Windows Azure check box for the technology. You also specify the date by which you will certify your application. When you send this form you will see that the application has associated Windows Azure Platform as a technology and that the application is in the Develop stage as in the figure above.</p>  <p>8. When you go back to the <a href="http://www.microsoftcloudpartner.com">http://www.microsoftcloudpartner.com</a>&#160; you will be able to see that the Cloud Essentials progress status will be at 100%. It is possible that you will have to accept additional screen with Terms and Conditions of the program. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/3323.image_6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/3323.image_5F00_6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2677.image_thumb_2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/2677.image_5F00_thumb_5F00_2.png" width="816" height="501" /></a> </p>  <p>9. Now, you can click the Activate Benefits tab on the left </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/5810.image_8.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/5810.image_5F00_8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/6470.image_thumb_3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/6470.image_5F00_thumb_5F00_3.png" width="168" height="244" /></a> </p>  <p>and scroll down to the section Windows Azure Platform. Note the blue arrow to the right. If you click it - you will be redirected to the <a href="https://mocp.microsoftonline.com/">Microsoft Online Services Portal</a>. If the Live ID that you use throughout the process has been used in this portal you should not need enter additional details – otherwise you may be asked again about your company details.     <br />    <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/12/97/metablogapi/3617.CloudEssentialsPaso6_73B79FAA.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-12-97-metablogapi/3617.CloudEssentialsPaso6_5F00_73B79FAA.png"><img title="CloudEssentialsPaso6" border="0" alt="CloudEssentialsPaso6" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/12/97/metablogapi/0576.CloudEssentialsPaso6_thumb_6785FFB6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-01-12-97-metablogapi/0576.CloudEssentialsPaso6_5F00_thumb_5F00_6785FFB6.png" width="685" height="232" /></a> </p>  <p>10. In the <a href="https://mocp.microsoftonline.com/">Microsoft Online Services Portal</a> the shopping cart will already contain the Azure Cloud Essentials subscription. You need to fill out the subscription name, mark the check box after reviewing legal agreement and press Next to continue with the subscription activation.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/0535.image_10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/0535.image_5F00_10.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/2526.image_thumb_4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/2526.image_5F00_thumb_5F00_4.png" width="696" height="379" /></a> </p>  <p>11. What is left is to follow the steps indicated by this simple wizard. You will be asked for your credit card details (this is so that Microsoft can bill you if you exceed your free usage quotas of the Cloud Essentials Pack. Then subscription will be activated. At any point you can return to the <a href="https://mocp.microsoftonline.com/">Microsoft Online Services Portal</a> and edit the service details by entering in the Subscriptions tab and selecting the Edit service details option in Actions list. This allows you to specify a different Live ID (Service Administrator) that will have access to this subscription in the Azure developer portal.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/4274.image_12.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/4274.image_5F00_12.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/69/12/metablogapi/8484.image_thumb_5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-69-12-metablogapi/8484.image_5F00_thumb_5F00_5.png" width="753" height="160" /></a> </p>  <p>12. You can now log in to Windows Azure developer portal <a href="http://windows.azure.com">http://windows.azure.com</a>&#160; logging with the Service Administrator ID (or the Live ID you used to purchase subscription in step 10).</p>]]></content:encoded>
    </item>
    <item>
      <title>How to subscribe Windows Azure Platform MSDN Premium?</title>
      <link>https://docs.microsoft.com/archive/blogs/micham/how-to-subscribe-windows-azure-platform-msdn-premium</link>
      <pubDate>Mon, 27 Sep 2010 01:32:32 GMT</pubDate>
      <dc:creator><![CDATA[micham]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micham/2010/09/27/how-to-subscribe-windows-azure-platform-msdn-premium/</guid>
      <description><![CDATA[Note that you will not see Windows Azure Platform MSDN Premium subscription listed in the list of...]]></description>
      <content:encoded><![CDATA[Note that you will not see Windows Azure Platform MSDN Premium subscription listed in the list of available subscriptions on the Microsoft Online Customer Portal (MOCP) portal. The procedure to get your Windows Azure Platform MSDN Premium subscription is as follows:   <ol>   <li>Go to <a href="http://msdn.microsoft.com/en-us/subscriptions/ee461076.aspx">MSDN Benefits page</a>. In the right top corner, in the MSDN Subscriptions box click the link Sign up now (see below). This link will take you to the MSDN Subscriptions My Account page and you should log in using the Live ID of the MSDN subscription holder.       <p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Azure MSDN Subscription" border="0" alt="Azure MSDN Subscription" src="http://public.bay.livefilestore.com/y1pxGsAEwfN06zWrqFfBimKX_hMlAQFjULoGFQjrCNaPGlLqGEGDEPNzKEeFOAOWdeWcsmS6y-jcyuU593eV9kdDg/Azure%20MSDN.jpg" width="676" height="336" /> </p>      <p>&#160;</p>   </li>    <li>On the MSDN Subscriptions My Account page locate a section Windows Azure Platform As shown below and click the link Windows Azure Platform. This link takes you to the Microsoft Online Customer Portal (MOCP) using the Live ID you are logged in (MSDN subscriber)      <p>&#160;</p>      <p>&#160;</p>   </li>    <li>the MOCP page you can now see that the Shopping Cart contains Windows Azure Platform MSDN Premium subscription. Review the Agreement for this subscription, mark the check box confirming you realize that the variable charges that will apply if you exceed subscription limits and proceed to Check Out to purchase this subscription. You will need the credit card to complete the purchase.      <p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Azure MSDN in MOCP" border="0" alt="Azure MSDN in MOCP" src="http://public.bay.livefilestore.com/y1paLu02g2etkzeXLY4m5FpKLyA_G-6cr5qrb-iCxg9uUaRQIVJ2Mp45gINfK8yGGC0XRmCMSsv0pfazpPPGJFJCQ/Azure%20MSDN%20in%20MOCP.png" width="675" height="356" /> </p>   </li> </ol>]]></content:encoded>
    </item>
    <item>
      <title>Applications Relying on GetProfileString Function or VB.Global.Printers for Printer Enumeration May Experience Performance Issues on Windows Server 2008 Terminal Server</title>
      <link>https://docs.microsoft.com/archive/blogs/micham/applications-relying-on-getprofilestring-function-or-vb-global-printers-for-printer-enumeration-may-experience-performance-issues-on-windows-server-2008-terminal-server</link>
      <pubDate>Mon, 24 Aug 2009 05:26:21 GMT</pubDate>
      <dc:creator><![CDATA[micham]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/micham/2009/08/24/applications-relying-on-getprofilestring-function-or-vb-global-printers-for-printer-enumeration-may-experience-performance-issues-on-windows-server-2008-terminal-server/</guid>
      <description><![CDATA[The VB6.0 Runtime is continued to be supported in Windows Server 2008 and Windows 7. Consequently,...]]></description>
      <content:encoded><![CDATA[<p>The VB6.0 Runtime is <a href="http://msdn.microsoft.com/en-us/vbrun/ms788708.aspx">continued to be supported</a> in Windows Server 2008 and Windows 7. Consequently, many ISVs continue to deploy VB6.0 applications to the new operating systems. I would like to comment possible performance issue that you may encounter in Terminal Server 2008 if you deploy a an application to TS users. The issue here is currently under investigation and treated as a bug. My intention is to give you some more information about it before we have official statement from the product group on it. In particular, if you have source code of the application you could work around the issue. Note, that the information below is based on my practical experience where we could help customers experiencing the issue by pointing them to the recommended API. In a nutshell if possible re-factor the code substituting the GetProfileSeting() call and Printers object with the result of EnumPrinters function call.</p>  <p>I will post an update once product group completes its investigation, for the time being here are the details:</p>  <p><b>Symptoms:</b></p>  <p>If the following conditions hold:</p>  <p>-You have deployed an application that calls GetProfileString or makes use of VB6.0 Printers collection object to Windows Terminal Server 2008 or later</p>  <p><i>and</i></p>  <p>-You have enabled Easy Print feature in the Terminal Server</p>  <p><i>then</i></p>  <p>your application can experience performance issues in the printer enumeration routine because of the increasing size of the Printers collection over time.</p>  <p>Additionally you observe large number of entries accumulating in the <b><i>HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices</i></b><i> </i>registry hive.</p>  <p><b>More Information</b></p>  <p>Some legacy&#160; applications often rely on the <a href="http://msdn.microsoft.com/en-us/library/aa267233(VS.60).aspx">Vb.Global.Printers</a> (PrinterCollection) collection object or GetProfileString() function to enumerate printer objects. The Printers object utilizes a function call <a href="http://msdn.microsoft.com/en-us/library/ms724366(VS.85).aspx">GetProfileString</a>() that in turn reads information from the HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices registry hive. As stated in the documentation GetProfileString() should not be called from server side code.</p>  <p>The registry key accumulation under <b><i>HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices</i></b> that is the root cause of the issue reported there is currently treated as bug and we are working on resolving this issue.</p>  <p><b>Workaround:</b></p>  <p>It is recommended that the Winspool API function <a href="http://msdn.microsoft.com/en-us/library/dd162692(VS.85).aspx">EnumPrinters</a> is used as a mechanism to obtain a list of user printers in terminal session instead of relying on the Printers object. If the source code is available, references to Printers collection should be substituted with the call to the EnumPrinters function. Performance of this function will vary depending on the type PRINTER_INFO structure returned as described in the Remarks section of the referenced document below.</p>  <p><b>References</b></p>  <p><b>EnumPrinters Function</b></p>  <p><a href="http://msdn.microsoft.com/en-us/library/dd162692(VS.85).aspx">http://msdn.microsoft.com/en-us/library/dd162692(VS.85).aspx</a></p>  <p><b>ACC: Enumerating Local and Network Printers</b></p>  <p><a href="http://support.microsoft.com/default.aspx/kb/166008">http://support.microsoft.com/default.aspx/kb/166008</a></p>  <p><b>GetProfileString Function</b></p>  <p><a title="http://msdn.microsoft.com/en-us/library/ms724366(VS.85).aspx" href="http://msdn.microsoft.com/en-us/library/ms724366(VS.85).aspx">http://msdn.microsoft.com/en-us/library/ms724366(VS.85).aspx</a></p>  <p><b>Printer Object, Printers Collection</b></p>  <p><a href="http://msdn.microsoft.com/en-us/library/aa267233(VS.60).aspx">http://msdn.microsoft.com/en-us/library/aa267233(VS.60).aspx</a></p>  <p><b>Introducing Terminal Services Easy Print: Part 2-Per Session Default Printers</b></p>  <p><a href="http://blogs.msdn.com/rds/archive/2007/05/03/introducing-terminal-services-easy-print-part-2.aspx">http://blogs.msdn.com/rds/archive/2007/05/03/introducing-terminal-services-easy-print-part-2.aspx</a></p>  <p><b>Applies to:</b></p>  <p>Windows Server 2008 Terminal Server </p>  <p>Windows Server 2008 R2 Terminal Server</p>  <p>Visual Basic 6.0</p>]]></content:encoded>
    </item>
  </channel>
</rss>