normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Windows Azure SDK for .NET の Management Library を利用して Webサイト の構成を変更する

前回の記事である Windows Azure SDK for .NET の Management Library を利用して Webサイト を動的に作成してみる で疎通までの簡単な手順とWebサイトの作成までを紹介したが、今回は Web サイトの設定情報を更新する方法を紹介する。

サンプルコードを実行する

ダラダラと文章を書いても仕方ないので、以下に試したコードと実行結果を記載する。作成済みの Web サイトの情報を取得する際に、GetAync() メソッドと GetConfigurationAsync() メソッドで取得できる情報が異なる点に注意が必要だ*1

  • サンプルコード
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Management;
using Microsoft.WindowsAzure.Management.WebSites.Models;
using System;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
using System.Threading;

namespace AzureManagementConsoleApp
{
    public class Program
    {
        static void Main()
        {
            ChangeWebSiteStatus();
            Console.ReadLine();
        }

        public static async void ChangeWebSiteStatus()
        {
            const string webSiteName = "createfromcode";
            const string webSpaceName = "eastasiawebspace";

            var cert = new X509Certificate2(@"Assets\ManagementTestCert.pfx", "<パスワード>");
            var credentials = new CertificateCloudCredentials("<サブスクリプションID>", cert);

            using (var client = CloudContext.Clients.CreateWebSiteManagementClient(credentials))
            {
                // まず Web サイトの状態を取得
                {
                    var parameters = new WebSiteGetParameters();
                    //以下を試したけど取れなかった。これなんだろ?
                    //{
                    //    PropertiesToInclude = new string[] { "WebSocketsEnabled", "PhpVersion" }
                    //};
                    var response = await client.WebSites.GetAsync(webSpaceName, webSiteName, parameters, CancellationToken.None);
                    Console.WriteLine("変更前, {0} のサイトモード    = {1} ", webSiteName, response.WebSite.SiteMode);
                    //以下二つは取れない(key がないので例外が出る)
                    //Console.WriteLine("変更前, {0} のWebScoketモード = {1} ", webSiteName, response.WebSite.SiteProperties.AppSettings["WebSocketsEnabled"]);
                    //Console.WriteLine("変更前, {0} のPHPバージョン   = {1} ", webSiteName, response.WebSite.SiteProperties.AppSettings["PhpVersion"]);
                }

                // Web サイトの構成情報を取るのはこっち
                {
                    var response = await client.WebSites.GetConfigurationAsync(webSpaceName, webSiteName, CancellationToken.None);
                    Console.WriteLine("変更前, {0} のWebScoketモード = {1} ", webSiteName, response.WebSocketsEnabled);
                    Console.WriteLine("変更前, {0} のPHPバージョン   = {1} ", webSiteName, response.PhpVersion);
                }

                // 構成を更新
                {
                    // PHP バージョンを 5.4-> 5.5, WebSocket を Enabled -> Disabled へ
                    var parameters = new WebSiteUpdateConfigurationParameters
                    {
                        PhpVersion = "5.5",
                        WebSocketsEnabled = false
                    };
                    var updateConfigurationResponse = await client.WebSites.UpdateConfigurationAsync(webSpaceName, webSiteName, parameters, CancellationToken.None);
                    //こっちには WebSite プロパティがない
                    Console.WriteLine("RequestId = {0}, StatusCode= {1} ", updateConfigurationResponse.RequestId, updateConfigurationResponse.StatusCode);
                }

                // Web サイトの状態を 無料 -> 共有 へ変更
                {
                    var parameters = new WebSiteUpdateParameters
                    {
                        SiteMode = WebSiteMode.Basic,
                    };
                    var response = await client.WebSites.UpdateAsync(webSpaceName, webSiteName, parameters, CancellationToken.None);
                    Console.WriteLine("変更後, {0} のサイトモード    = {1} ", webSiteName, response.WebSite.SiteMode);
                }
                // もっかい Web サイトの構成情報を取る
                {
                    var response = await client.WebSites.GetConfigurationAsync(webSpaceName, webSiteName, CancellationToken.None);
                    Console.WriteLine("変更前, {0} のWebScoketモード = {1} ", webSiteName, response.WebSocketsEnabled);
                    Console.WriteLine("変更前, {0} のPHPバージョン   = {1} ", webSiteName, response.PhpVersion);
                }
            }
        }
    }
}
  • 実行結果
変更前, createfromcode のサイトモード    = Limited
変更前, createfromcode のWebScoketモード = True
変更前, createfromcode のPHPバージョン   = 5.4
RequestId = a4f9803ff1a75c2db950db5d938b1ec6, StatusCode= OK
変更後, createfromcode のサイトモード    = Basic
変更前, createfromcode のWebScoketモード = False
変更前, createfromcode のPHPバージョン   = 5.5

*1:この辺はパケットキャプチャで確認したいところ