次の方法で共有



August 2012

Volume 27 Number 08

Windows Azure - Windows Azure こそ救いの手

Mark Kromer | August 2012

昨春、マイクロソフトの米国中部大西洋岸地区のマーケティング部門は、Fortune 500 社の約 90 社の経営陣、マイクロソフトのパートナー、およびマイクロソフトの社員を対象にイベントを主催しました。この部門ではイベントの開催にあたり、最新かつ最高のマイクロソフト テクノロジを紹介し、参加者をマイクロソフト最前線のエクスペリエンスに引き付けるための登録システムを必要としていました。以前、私がソリューション アーキテクト兼コンサルタントとしていくつかソリューションを構築し、それらが成功を収めていたことから、彼らは私に支援を求めてきました。しかし、どのテクノロジをどのように展示するかについての明確な方針すらまだ何も決まっていなかったにもかかわらず、イベントの開催は 1 か月後に迫っていました。

マイクロソフトで私が力を注いでいる仕事は、SQL Server と Windows Azure SQL データベース (マイクロソフトのデータ プラットフォームとして知られています) で構築したソリューションを基盤に大規模な事業に取り組むことです。そこで、今回のマーケティング部門の要求に応えられる可能性のある唯一の方法として目を付けたのが、Windows Azure の "サービスとしてのプラットフォーム (PaaS)" の機能でした。マイクロソフトのアプリケーション プラットフォーム (Microsoft .NET Framework、SQL Server、および Windows Server) を基盤に構築したソリューションを迅速に提供できる Windows Azure の機能を活用すれば、このような事態に対処できます。Windows Azure PaaS モデルを使えば、インフラストラクチャ、処理能力、サーバー、メンテナンス、修正プログラムの適用、アップグレードなどは、マイクロソフトが世界規模のマイクロソフト データセンターで処理することになるため、フットプリントやインフラストラクチャが必要なくなり、今回の要件を完全に満たします。

マーケティング部門や私の上司と話し合った結果、このプロジェクトに当てられる時間は、空き時間と週末のみということになりました。そこで、私は自分が迅速に作成できることがわかっている、Silverlight、Windows Communication Foundation (WCF)、SQL Server など、これまで習熟したテクノロジに目を向けることにしました。結果的には、堅牢なソリューションを提供でき、フィードバックも肯定的で、良い結果を生みだすことができました。一般に使われているマイクロソフトのテクノロジを利用し、予算も使わなかったうえ、時間もそれほどかかりませんでした。私は今回の記事で、Windows Azure、Windows Azure SQL データベース、および Windows Phone 開発を活用し、最小限の労力で目的を達成する方法についての指針と洞察力を提供できることを望んでいます。

今回のプロジェクトでは、大きく 2 つの要求に取り組む必要がありました。1 つは、イベントに参加するパートナーがタブレット、スレート、スマートフォンなどの新しいデバイスや機器を簡単に試すことができ、また試してみたくなるようにすることです。もう 1 つは、マイクロソフトがすべてのデバイスに使用している新しい Metro デザイン手法を紹介することです。Windows 8 と Visual Studio 11 のコミュニティ プレビュー版を使用してネイティブの Metro アプリを作成する時間はありません。そこで、数か月にわたって Windows Phone 7.5 の開発に携わってきたことから、このテクノロジを Silverlight のアプローチと組み合わせることにしました。これなら、Windows 8 のデスクトップ モードと Windows Phone のネイティブ アプリのどちらでも機能すると考えたためです。

2 つの要件を満たすため、登録を終えた参加者が受付窓口に到着したときに、最初に操作するチェックイン アプリを作成することにしました。このアプリは、機能的かつ対話型のアプリという要件を満たしています。Metro UI のエクスペリエンスを作成するため、Silverlight 5.0 PivotViewer コントロールを利用します。対話型というテーマと、さまざまなフォームファクターのエクスペリエンスを紹介するという方針に沿って、パノラマ コントロールを基にした Windows Phone アプリを作成しました。イベント会場にいるマイクロソフトの社員はこのアプリを使って、参加者が自分のデバイスを使ってチェックインやイベント写真の表示を可能にします。Windows Phone のユーザーでもある参加者は、Marketplace からアプリをダウンロードすることもできます。Windows Azure のテクノロジを使用するのが簡単でわかりやすいため、データベースには Windows Azure SQL データベース、追跡レポートには Windows Azure SQL レポート、データ交換には Windows Azure WCF サービス、会場でのイベント写真の格納には Windows Azure Binary Large Object (BLOB) ストレージをそれぞれ使用します。

ソリューションの概要

今回の記事では、ソリューション アーキテクチャを Windows Azure Web アプリ、Windows Azure SQL データベースとレポート、および Windows Phone アプリという 3 つの主要領域に分けます。完成したソリューションには、あると便利なアプリや機能をほかにもいくつか含めましたが、今回はスペースの都合でこの領域の詳しい説明は割愛します。ただし、同程度の規模 (参加者 300 人未満) のカンファレンスやイベント用にカスタムのソリューションを構築する際は、こうした追加領域も考慮することが重要です。

  1. 写真のアップロードと共有: Windows Azure Toolkit の画像アップロード ツールを利用して、ローカル ストレージから画像を取得して Windows Azure BLOB ストレージにアップロードします。このツールは、手を加えなくても適切に機能します。Windows Azure ストレージのキーを接続し、Default.aspx ファイルを独自の設計に合わせて変更するだけです。画像がアップロードされ、ユーザーはイベント会場やデモのテーブルにある大画面のフォト ギャラリーを使用してイベントの写真を共有できます。ツールをダウンロードして自身の Windows Azure ストレージにあるファイルを使用できるようにし、アップロード後に簡単にファイルを管理できるようにすることを勧めました。そうしたツールの 1 つに Azure ストレージ エクスプローラーがあり、CodePlex (bit.ly/H3rOC、英語) から入手できます。
  2. ソーシャル ネットワーキング: この種のアプリには必須です。公開カンファレンスや公開イベントでは、写真に加え、参加者のコメント、ツイート、更新情報、会話などを共有する手段を提供するようにします。この Windows Phone アプリでは、私が作成した Facebook のグループに単純にリンクします。Web アプリ (後で説明します) では、ASP.NET 用の Facebook C# SDK を使用しました。この SDK は bit.ly/J5D2zI (英語) から入手できます。
  3. Silverlight フォト ギャラリー ビューアー: 今回は詳しく説明しませんが、メイン会場の天井に取り付けられた画面に画像を表示するという要件に応えるために使用しています。画像を Windows Azure ストレージに格納するときに、このページを手動で更新し、無限ループで表示するか、ラップトップでユーザーが表示を操作できるようにします。コントロールと XML の構成情報は CodePlex (slideshow.codeplex.com、英語) から入手できます。ほかにも利用できるフォト ビューアーはたくさんあります。Windows Azure ストレージを経由して表示する場合、このコンポーネントは Web URL から画像をレンダリングできる必要があるというのが重要な基準です。以前 Windows Azure ストレージを使用したとき、プレーンな "http://" の形式を使用して JPG と PNG のグラフィック ファイルに直接リンクしました。

作成に当てられる時間は限られていましたが、Windows Azure により、これらすべてをパズルのさまざまなピースのようにすばやく組み立てることができました。これは PaaS サービスが .NET、Windows Server、Windows Azure ストレージ、および Windows Azure SQL データベースから構成されているためです。いったん Visual Studio 2010 ソリューションに Windows Azure プロジェクトを追加するこつをつかむと、.NET、SQL Server、および Windows Server における経験が基本的には同じように役立ちます。このいくつかは、後でソリューションを説明しながら取り上げます。最後に、今回は 1 回限りのイベントだったため、インフラストラクチャを購入する必要がありませんでした。代わりに、自身の Windows Azure のアカウントにコンポーネントを配置し、イベント終了後に無効にしました。この夏、SQL Saturday イベントを予定しており、このカンファレンス イベント システムを再利用する機会が来たら、これらのコンポーネントを再び使用するかもしれません。Windows Azure は電気料金と同じように使用量に応じて毎月請求されるため、最悪の事態に備えてインフラストラクチャを余分に準備しておく必要なくユーザーの要件を満たすことができます。

Windows Azure Web アプリ

まず、登録アプリの主要入力画面から説明します。このアプリは、Windows Azure でホストされ、Silverlight 5.0 XAML コントロールをホストする C# .NET Web アプリです。従来の .NET プロジェクトではなく Windows Azure 向けに Visual Studio で開発を行うときに、WCF サービスと Web アプリをホストする Windows Azure のホスティング サービス用のフレームワークに違いがあることに気付くでしょう。トップレベルの名前空間の C# クラスにはカスタム クラスがあり、Windows Azure SQL データベースのデータを Silverlight プロパティに変換します。Web 層には従来の XML ファイル (crossdomain.xml など) があり、Web 層 (つまり、Silverlight) からバックエンドのデータ サービスへのドメイン間呼び出しを可能にします。プロジェクトの Web ロールとしてこの Web アプリを選択したため、この Web アプリが Windows Azure サービスのプライマリ ロールになります。

このアプリ用に、Windows Live ラボ (現在では Silverlight 5.0 の一部になっています) でお気に入りの Silverlight コントロールの 1 つである PivotViewer コントロールを利用しました。

PivotViewer コントロールは簡単なナビゲーションを可能にすることが求められるアプリ シナリオに一般に利用でき、エンド ユーザーが簡単に分類、並べ替え、および移動を実行できる大量データ用の対話型 UI です (図 1 参照)。

登録済み参加者のタイル インターフェイスとして使用する PivotViewer コントロール
図 1 登録済み参加者のタイル インターフェイスとして使用する PivotViewer コントロール

また、PivotViewer はユーザー操作のカスタマイズを可能にし、参加者が自分の名前が書かれたタイルを見つけたとき、そのタイルをクリックすることでチェックインできるようにします (図 2 参照)。PivotViewer 用の色分けしたタイル UI は、Windows 8 Metro インターフェイスや Windows Phone タイル インターフェイスに似たテーマを表現していることから、マイクロソフト カンファレンスの主催者が選びました。このユーザー エクスペリエンスはイベントの参加者登録窓口で適切に機能し、タイルは大型タッチスクリーン モニターで自分でチェックインするすばらしい対話型のタッチ メカニズムになりました。さらに、このコントロールにはデータのプロパティに基づいて並べ替え順を変更する機能が組み込まれているため、名前を名字で簡単に並べ替えることができます。

名前を選択してユーザーがチェックインできる PivotViewer を拡大したようす
図 2 名前を選択してユーザーがチェックインできる PivotViewer を拡大したようす

PivotViewer のタイルの外観を変更するには、PivotViewerItemTemplate に属性を追加する必要があります。カラー コンバーターを追加し、参加者の名前に "ShortName" 属性を設定している方法に注目してください。

<conv:TextToSolidColorConverter x:Key="colorConverter"/>
<pivot:PivotViewerItemTemplate x:Key="DemoTemplate">
  <Border Width="300" Height="300" 
    Background="{Binding Color,
    Converter={StaticResource colorConverter}}">
  <TextBlock Text="{Binding ShortName}" 
    FontWeight="ExtraBold"
    FontSize="42"HorizontalAlignment="Center" 
    VerticalAlignment="Center"
    TextWrapping="Wrap" />
 </Border>           
</pivot:PivotViewerItemTemplate>

色の設定は、参加者の一覧をループして項目番号のプロパティを変更するだけです。色を処理する XAML は、次のようにコンバーター クラスで設定されます。

var xaml = "<LinearGradientBrush xmlns='https://schemas.microsoft.com/client/2007' 
  StartPoint=\"0.5,0\" EndPoint=\"0.5,1\">" +
  "<GradientStop Color=\"Black\" Offset=\"0.0\" />" +
  "<GradientStop Color=\""+value.ToString()+"\" Offset=\"0.15\" />" +
  "<GradientStop Color=\"SlateGray\" Offset=\"0.85\" />" +
  "</LinearGradientBrush>";

Windows Azure SQL データベースのデータを Silverlight フロント エンドにバインドするため、Windows Azure でホストされる WCF サービスを作成します。Windows Azure で Web アプリを開発する際、自分の Windows Azure アカウントに WCF Web サービスを格納できます。ソリューションの中間層として機能するという特定の目的のために WCF サービスを作成し、Windows Azure SQL データベースのデータベース データを公開します。図 3 は、Visual Studio 2010 で Windows Azure 用に新しい WCF サービスを作成する際に選択するロールを示しています。

図 3 Windows Azure における WCF サービスの Web ロール

Windows Azure にソリューションを配置する際、Windows Azure 管理コンソールのさまざまな領域にアクセスする必要があります (図 4 参照)。PivotViewer Web アプリ、WCF サービス、およびチェックイン Web アプリの場合、すべてのコンポーネントは "ホステッド サービス" のセクションに配置、格納されます。記事の後半で、データベース、レポート、およびストレージの各セクションも使用します。Web アプリのデプロイ (Windows Azure の用語) とは、ASP.NET Web ロールを指定してホステッド サービスを作成することです。一方、Windows Azure SQL データベースにアクセスするために作成する WCF データ サービスもホステッド サービスですが、こちらは WCF Service Web ロールを指定して作成されます。どちらの場合も、URL の前にカスタム サービス名を付けた cloudapp.net ドメイン名を受け取ります。独自のドメイン名を使用するには、ドメイン名を Windows Azure 対応の DNS 名にマップする必要があります。この方法は MSDN ライブラリの記事「Windows Azure ホステッド サービスに対するカスタム ドメインの構成方法」で説明されています (bit.ly/MfSBaD、参照)。

図 4 Windows Azure 管理コンソール

WCF サービスは簡単な Web サービスで、Windows Azure SQL データベースにデータを照会して、参加者の情報を報告します。参加者の状態を更新するメソッドもあります。ユーザーが PivotViewer タイルで名前を選択すると、チェックインやチェックアウトに状態が切り替わります。

Windows Azure SQL データベースのデータベースにアクセスするには、従来の SQL Server データベースにアクセスするのとまったく同じ接続文字列を使用します。接続の種類やしくみが同じなので、コード、スニペット、および以前のコードを Windows Azure に移行するのは非常に簡単です。図 5のコード (Windows Azure SQL データベースのデータベースにアクセスする WCF サービスのコード) で、Entity Framework Register クラスを利用して、他の SQL Server データベースに接続するのと同じ方法で Windows Azure SQL データベースに接続します。

図 5 WCF サービスを使用して Windows Azure SQL データベースを操作する

namespace WCFServiceConference
{
  public class Service1 : IService1
  {
    // MyData is used to retrieve the attendee list      
    public List<String> MyData(int value)
    {       
      List<String> results = new List<String>();
      using (retreatEntities context = new retreatEntities())
      {
        IQueryable<Register> sortedContacts = context.registers
          .OrderBy(c => c.lastname)
          .ThenBy(c => c.org);
        // Register is the EF class
        foreach (Register sortedContact in sortedContacts)
        {
          results.Add(sortedContact.lastname + ", " + 
            sortedContact.email +
            "    (" + sortedContact.firstname + ") : " + 
            sortedContact.org);
        }
      }
      return results;
    }
    // Use this method to check in attendees and check out
    public void ToggleRegister(String lname, String fname)
    {           
      using (retreatEntities context = new retreatEntities())
      {
        IQueryable<register> sortedContacts = context.registers;
        try
        {
          Register qry = (from register in context.Registers
                          where Register.lastname == @lname &&
                          Register.firstname == @fname
                          select Register).First();
          // checkinis a binary SQL Server field, so I’m using byte array to set it
          byte[] s1 = qry.checkin;
          // We’re going to toggle the checkin value where 1 == checked-in
          if (s1[0] == 0)
          {
            s1[0] = 1;
            // Set the check-in date/time field in SQL
            qry.checkdate = DateTime.Now.ToString();
          }
          else
          {
            s1[0] = 0;
            qry.checkdate = null;
          }
          qry.checkin = s1;
          // Now let’s save our changes
          context.SaveChanges();
        }
        catch (Exception) { }
      }
    }
  }
}

サービスを Windows Azure に公開すると、通常サービス参照で行うのと同様に Visual Studio プロジェクトでサービスを参照できるため (図 6 参照)、Windows Azure は Web サービスを公開するのに最適な場所になります。

Web アプリで Windows Azure でホストされる WCF サービスを参照する
図 6 Web アプリで Windows Azure でホストされる WCF サービスを参照する

これで、クラウド データベース (およびデータを操作するクラウド サービス) が完成して公開され、非同期サービスを使用して Silverlight PivotViewer アプリからサービスを操作できます。データ サービスの操作が非同期のため、データが到着してクライアント コンポーネントに設定するときに、対応するローカル イベント メソッドをセットアップしてデータを取得する必要があります。今回は、単なる文字列の一覧です。クラスの snames プロパティが更新されるとき、Silverlight コンポーネントはデータ バインドを通じて更新を受け取ります (図 7 参照)。

図 7 WCF サービスで Silverlight コンポーネントのデータ バインドにより更新を受け取る

public static Service1Client _sc;
// This init method is in my MainPage.xaml file
// and is called right after InitializeComponent()
public static void init()
{
  _sc = new Service1Client();
  _sc.MyDataCompleted +=
    new EventHandler<MyDataCompletedEventArgs>(_sc_MyDataCompleted);
  _sc.MyDataAsync(1);
}
public static void _sc_MyDataCompleted(object sender, 
  MyDataCompletedEventArgs e)
{
  // How many rows were returned?
  snamescnt = e.Result.Count;
  snames = new List<string>();
  for (int i = 0; i < snamescnt-1; i++)
  {
    snames.Add(e.Result[i].ToString());
  }
}

ソリューションには小さな ASP.NET Web アプリも含まれており、確認を表示し、チェックイン要求を発行し、Facebook にリンクして参加者が Facebook グループを通じて互いにリンクできるようにします。ASP.NET には Silverlight には含まれていないサーバー側の機能が含まれているため、WCF サービスを呼び出してデータベースを更新するのは非常に簡単です。次のコードは、このサービスを非常に簡単に使用できることを示しています。

String lname = Request["lname"];
String fname = Request["fname"];
// No need to use async event calls from ASP.NET // Just reference the Web service and call the method directly
Service1Client sc = new Service1Client();
sc.ToggleRegister(lname, fname);
Label1.Text = "CHECKING IN " + fname.ToUpper() + " " + lname.ToUpper();

この ASP.NET ページは、その後 Windows Azure アカウントに Web ロールとして直接配置されます (図 8 参照)。

シンプルな Web ページ用に ASP.NET Web ロールを追加する
図 8 シンプルな Web ページ用に ASP.NET Web ロールを追加する

Windows Phone アプリ

Windows Phone アプリは、Visual Studio 2010 の Silverlight for Windows Phone プロジェクト テンプレートを利用して、Silverlight を使って構築します (図 9 参照)。このアプリは Silverlight なので、Windows Phone で 2 つ目のフォームファクター アプリをすばやく生成して、前述の Web アプリを補完することができます。これは、XAML で Silverlight クライアント コントロールをバインドするのに使用したのと同じ手法を、Web アプリ用に使用した (Windows Azure でホストされる) WCF サービスに接続するのにも使用するためです。これにより、サービスが非常に再利用しやすくなります。

Windows Phone の Silverlight アプリ プロジェクト テンプレート
図 9 Windows Phone の Silverlight アプリ プロジェクト テンプレート

Windows Phone アプリをイベント用に完璧に機能するようにしました。つまり、登録した参加者をすべて確認でき、参加者についてのレポートを実行し、Facebook とメールによる交流を可能にしました。次に、チェックインを可能にするには、前に説明した ASP.NET のアプローチとは反対に、Windows Azure からのデータの取得と行の更新の両方を行うための非同期のイベント コールバック メソッドが必要です。

public MainViewModel() {
  this.Items = new ObservableCollection<ItemViewModel>();
  _sc = new Service1Client();
  // Same as earlier in the Silverlight PivotViewer app
  _sc.MyDataCompleted +=
    new EventHandler<MyDataCompletedEventArgs>(_sc_MyDataCompleted);
  // Used to update the row
  _sc.CheckInCompleted +=
    new EventHandler<CheckInCompletedEventArgs>(_sc_CheckInCompleted);
  // Get the data
  _sc.MyDataAsync(1);         
}

既に例を示したように、これは Silverlight Windows アプリで使用したのと同じ方法です。ただし、この場合は ViewModel クラスを利用しています。

MainPage として Windows Phone Portrait Page で ListBox コントロールを使用します (図 10 参照)。このページは Windows Phone にアプリが読み込まれるときに読み込まれます (図 11 参照)。

Silverlight アプリと同じ方法で Windows Phone アプリの Silverlight にデータをバインドする XAML
図 10 Silverlight アプリと同じ方法で Windows Phone アプリの Silverlight にデータをバインドする XAML

Windows Phone アプリの参加者一覧とメニュー ボタン ナビゲーション
図 11 Windows Phone アプリの参加者一覧とメニュー ボタン ナビゲーション

次のように、クエリの結果として Windows Azure WCF サービスから返される各行を反復処理して、Windows Azure SQL データベースからデータを取得し、ViewModel から ListBox にデータを設定します。

public void _sc_MyDataCompleted(object sender, MyDataCompletedEventArgs e)
{           
  for (int i = 0; i < e.Result.Count - 1; i++)
            {
  // Parse the incoming text for attendee name, e-mail address and company name
  string strMain = e.Result[i].ToString();
  string strName = strMain.Substring(0, strMain.IndexOf('(') - 1);
  string strEmail = strMain.Substring(
    strName.Length + 2, strMain.IndexOf(')')-strName.Length-2);
  string strCompany = strMain.Substring(strMain.IndexOf(':') + 2);
  this.Items.Add(new ItemViewModel()
    {LineOne=strName, LineTwo=strCompany, LineThree=strEmail });
}

カンファレンスのイベントで公開したこの Windows Phone アプリの代表的な機能の 1 つが、フォト ビューアーです。記事の冒頭で、画像を取得して Windows Azure BLOB ストレージに格納する画像アップロード ツールを提供すると述べました。これらを Windows Phone に表示するため、単に別のページを追加し (Windows Phone ナビゲーションは Web ベースのページ パラダイムを採用します)、ユーザーがメイン ページの下部のメニュー ボタンから移動できるようにしました (図 11 参照)。これは非常に単純で、メニュー項目のボタン クリック イベントに次のようなコードを追加するだけです。

NavigationService.Navigate(new Uri("/PivotPage1.xaml", UriKind.Relative));

フォト ギャラリー ページには、Windows Phone の Pivot というページの種類を使用しました。このページでは、ユーザーが項目の一覧をなめらかにスクロールできます。Pivot コントロールは XAML で PivotItem の一覧を受け取り、水平方法にスクロールする際になめらかなユーザー エクスペリエンスを生み出すのに使用します。ここでは、Photo1、Photo2、Photo3 というように、単に一連の Web ブラウザー コントロールを追加するだけで済みました (図 12 参照)。

図 12 一連の Web ブラウザー コントロールを追加する

<controls:Pivot Title="Microsoft Executive Technology Retreat">
  <controls:PivotItem Header="Photo 1">
    <Grid>
      <phone:WebBrowser HorizontalAlignment="Left" Margin="6,3,0,0"
        Name="MyWebBrowserControl" VerticalAlignment="Top" Height="605"
        Width="452" />
    </Grid>
  </controls:PivotItem>
  <controls:PivotItem Header="Photo2">
    <Grid>
      <phone:WebBrowser HorizontalAlignment="Left" Margin="6,3,0,0"
        Name="MyWebBrowserControl1" VerticalAlignment="Top" Height="605"
        Width="452" />
    </Grid>
  </controls:PivotItem>
...
  <controls:PivotItem Header="Photo10">
    <Grid>
      <phone:WebBrowser HorizontalAlignment="Left" Margin="6,3,0,0"
        Name="MyWebBrowserControl9" VerticalAlignment="Top" Height="605"
        Width="452" />
    </Grid>
  </controls:PivotItem>
</controls:Pivot>

プロジェクトにかけられる時間とリソースが限られていたため、シンプルにとどめ、写真ごとに Windows Phone ブラウザー コントロールが Windows Azure BLOB ストレージの URI を指すようにしました。これにより、ユーザー操作にサイズ変更を含めることができます。Windows Phone の Image コントロールにはサイズ変更が組み込まれていません。

参加者にメール メッセージを送信するコードの作成もシンプルです。ここでは、Windows Phone に組み込みの EmailComposeTask API を使用しました。

private void ApplicationBarEmailButton_Click(object sender, 
  EventArgs e)
{
  EmailComposeTask emailComposeTask = new EmailComposeTask();
  emailComposeTask.To = ContentText.Text;
  emailComposeTask.Body = "Hi There!";
  emailComposeTask.Subject = 
    "Microsoft Executive Technology Retreat";
  emailComposeTask.Show();
}

この API は、ユーザーの携帯電話の既存の連絡先リストを使用します (図 13 参照)。

Windows Phone のメールの連絡先リスト
図 13 Windows Phone のメールの連絡先リスト

Windows Azure SQL データベースおよび Windows Azure SQL レポート サービス

この間に合わせのソリューション用に、シンプルなデータベースを作成しました。Windows Azure SQL データベースを使用したため、SQL Server Management Studio、SQL Server Data Tools、および Business Intelligence Development Studio など、従来の SQL Server のオンプレミス ツールで直接スキーマを構築できました。

このソリューションにはまだ完成していない側面があります。それは、オンライン登録のサインアップ部分で、これはマイクロソフトがホストするソリューションで処理しました。テクノロジ企業にとって興味深いのは、参加者用のオンサイトの対話型エクスペリエンスとして使用可能なものは特に提供されていないことです。ここで、それを作成する方法を説明します。さて、このプロジェクトのために Windows Azure SQL データベースでデータベースを生成するのに、SQL Server Integration Services (SSIS) を使用しました (図 14 参照)。これはシンプルでわかりやすい SSIS パッケージで、登録ユーザーの Excel ダンプを取得し、Windows Azure SQL データベースのデータベース スキーマのフィールドにマップします。ここでは派生列の変換を使用し、スキーマで完全に一致しない場合があるいくつかのフィールドのデータを修正しました。この種のソリューションでは、この部分はここで紹介しているよりやや複雑になるかもしれません。ただ、ここで参考にしてほしいのは、Windows Azure イベント システムなどのクラウドベースのソリューションでは、SSIS などの一般的なツールが完璧に機能するので、新しいツールを学習する必要はないことです。

SQL Server Integration Services を使用する
図 14 SQL Server Integration Services を使用する

ここからわかることは、Windows Azure 用の現在の開発ツールやデータ管理ツールは、ここで示したようなソリューションを混合ソリューションにするということです。マイクロソフトがクラウド コンピューティングに移行したことを示すもう 1 つの領域は、Windows Azure SQL レポートで、ここではイベントにチェックインした参加者の最新情報をタイムスタンプと連絡先情報と共に報告するために利用しました (図 15 参照)。これまでになんらかの SQL Server Reporting Services (SSRS) レポートを作成したことのある方は、この形式になじみがあるでしょう。基本的には、Windows Azure SQL レポートはクラウド上の SSRS で、Windows Azure プラットフォームで実行されます。Windows Azure SQL レポートは純粋に Web ベースで、Silverlight が必要ないということが本当に気に入っています。これは、モバイル アプリでレポートを再作成する必要なく、Windows Phone にまったく同じレポートをレンダリングできるということでもあります。次のように、Web ブラウザー コントロールから参照するだけです。

 

webBrowser1.Navigate(new 
  Uri("https://fxnxxajmxx.reporting.windows.net/ReportServer?%2fAttendees&rs:
  Command=Render&rc:Toolbar=false", UriKind.Absolute));

Windows Azure SQL レポートを使用して参加者のチェックインに関するレポートを提供する
図 15 Windows Azure SQL レポートを使用して参加者のチェックインに関するレポートを提供する

Windows Azure SQL レポート用の Web サービスはオンプレミスの SSRS サービスと同様、レポートの外観を変更するのに URL パラメーターを使用できます。図 15 に示すのは、イベントの際にチェックイン受付のボランティア スタッフがラップトップまたは Windows Phone で確認する Web ページです。参加者が到着してチェックインしたら、このレポートを確認して、チェックイン デスクの後ろから各参加者の正しいステッカーとバッチを見つけることができます。

だいたいこんなところです。できるだけ迅速に構成できる既存のテクノロジを使用し、ごくわずかなインフラストラクチャで、短期間でソリューションを完成させる必要があったため、少なからず不確定要素がありました。これはクラウド コンピューティングを使用する最適なユース ケースになりました。Web ページを格納およびホストするのに Windows Azure を使用することで、ASP.NET、WCF サービス、および Windows Azure SQL レポート (オンプレミスのエクスペリエンスから既によく知っていました) を利用するクラウド データベースを一貫して使用できました。Web ページの UI テクノロジとして Silverlight にこだわることで、複数のフォームファクターに同じ方法を迅速かつ容易に再利用できました。

Mark Kromer はフィラデルフィアを拠点とする Microsoft SQL Server テクノロジのスペシャリストです。以前、マイクロソフトおよび Oracle Corp. で Microsoft BI 製品マネージャーを、AT&T および Agilent Technologies Inc. でソフトウェア エンジニアとデータベース コンサルタントを務めていました。

この記事のレビューに協力してくれた技術スタッフの David Ateek に心より感謝いたします。