次の方法で共有



November 2010

Volume 25 Number 11

クラウド コラボレーション - Silverlight Web パーツを使用して SharePoint を Windows Azure に結び付ける

Steve Fox | November 2010

Microsoft SharePoint 2010 は、堅固な開発プラットフォームであるという非常にもっともな賞賛を浴びています。新しいサービス、API、データ プログラマビリティ、およびダイアログ フレームワークと Silverlight を通じた UI サポートで強化されたこの進化したプラットフォームには、開発者がこのプラットフォームに本当に真剣に取り組むための多くのオプションが存在します。

ですが、クラウド コンピューティングへの関心の高まりに伴い、私は、開発者が SharePoint アプリケーションをクラウド ベースのテクノロジと統合する方法についてますます多くの質問を受けるようになりました。プラットフォームとしては、前述の機能の多くをなんらかの形で Windows Azure と統合することができます。さらに、他の多くのテクノロジ (OData、REST、Twitter や Facebook などのアプリケーション用の Web 2.0 ソーシャル API など) を通じて、SharePoint をクラウドと統合することができます。そしてもちろん、SOAP サービスや Windows Communication Foundation (WCF) サービスを使用したサービス指向アーキテクチャを通じて統合することも可能です。

クラウドと SharePoint の間にも幅広い統合の可能性がありますが、この記事では、SharePoint と Windows Azure の間の特定のいくつかの統合ポイントについて考察します。その過程で、初めての統合を行う手順について説明します。

プラットフォームの基礎

Windows Azure プラットフォームは、3 つの部分で構成されています。第 1 に、Windows Azure 自体が、データと管理の機能を提供します。第 2 に、SQL Azure は、可用性が高いトランザクション データをクラウドで提供します。第 3 に、Windows Azure AppFabric は、より高度な直接のサービス呼び出しシナリオのためのサービス バスを提供します。

Windows Azure を使用すると、いくつかの異なる種類の統合をサポートできます。たとえば、WCF サービスを構築してクラウドに配置してから、そのサービスを SharePoint に統合することができます。また、Windows Azure のデータを SharePoint 内でモデル化して、Windows Azure のデータを利用することもできます。さらに、Windows Azure AppFabric サービス バスを使用して、より複雑な、SharePoint Online を内部設置型の SharePoint と結び付けるサービス シナリオを作り出すこともできます。

どのような統合に関しても、考えられる選択肢を理解する必要があります。図 1 は、出発点として、SharePoint を Windows Azure と統合するさまざまな方法を示しています。この表は SharePoint 2010 固有のもので、必要となるコーディングの量には方法によって差があります。

図 1 一般的な統合ポイント

Azure との統合 方法
SharePoint クライアント オブジェクト モデル リスト内の Windows Azure データを操作します。
Business Connectivity Services (BCS) Windows Azure のデータをモデル化するか、SQL Azure に外部リストを作成します。
Silverlight Windows Azure のサービスやデータに基づいて UI を作成します。
サンドボックス ソリューション/
SharePoint Online サイト コレクションに配置された、Windows Azure を利用する Silverlight アプリケーションを使用します。
Office カスタム クライアント Windows Azure、またはデータを公開する BCS リストから直接データを利用します。
標準/視覚的 Web パーツ Windows Azure のサービスとデータを利用します。
Open XML Windows Azure データをドキュメントで管理します。
REST REST を使用して、SharePoint と統合する Windows Azure データを操作します。
Office Server サービス Open XML と組み合わされて、サーバーでドキュメント (PDF など) を自動生成します。
ワークフロー/イベント レシーバー Windows Azure のサービス、ワークフロー、またはデータと結び付く状態やイベントを使用します。
LINQ Windows Azure データ オブジェクトの照会に使用します。
検索 Windows Azure データが含まれるように統合検索を行います。

どのような統合を選択したとしても、この記事では、Windows Azure との統合において、SharePoint は利用側でありホストされないことに注意してください。つまり、SharePoint は Windows Azure によってホストされるサービスではなく、Windows Azure のデータやサービスを利用するアプリケーションだということです。Windows Azure は、Web パーツや Silverlight アプリケーションなどの SharePoint 成果物によって利用されるアプリケーションやリソースを提供します。この記事では、Windows Azure に配置されたカスタム WCF サービスを利用する Silverlight アプリケーションを SharePoint に統合する方法の具体例を紹介します。

この作業を初めて行う場合は、適切な開発環境がセットアップされていることを確認する必要があります。開発環境には、少なくとも次のものが含まれます。

  • Visual Studio 2010
  • Windows Azure の SDK およびツール
  • SharePoint Server 2010
  • Office Professional Plus 2010
  • SQL Server 2008 R2
  • Silverlight のランタイム、SDK、およびツール

Windows Azure を使用するにあたって、クラウド アプリケーション、データ、およびサービスを管理するための開発者ポータルを作成できるように開発者アカウントが設定されていることを確認する必要があります。こうしたアプリケーションやサービスを構築するために使用する Windows Azure ツールはすべて microsoft.com/japan/windowsazure/getstarted にあります。上記の項目を既存の開発用コンピューターにインストールすることも、Windows Azure ツール以外の項目がすべてインストールされている構成済みの仮想マシンを tinyurl.com/33bgpy6 (英語) からダウンロードすることもできます (また、必要に応じて、code.msdn.microsoft.com/vsixforsp (英語) から Silverlight Web Part Visual Studio 拡張機能をインストールすることもできます)。

開発環境をセットアップできたら、初めての統合に着手することができます。この記事では、次の 3 つの手順を通じて作業を行います。

  1. カスタムの Windows Azure WCF サービスを作成および配置します。
  2. カスタム Windows Azure サービスを利用できる、Silverlight 対応の Web パーツを作成します。
  3. Silverlight 対応の Web パーツを SharePoint サイトに配置し、使用します。

では、それぞれの手順について見ていきましょう。

WCF サービスを作成する

サービスを販売組織全体に配置する必要がありますが、そのサービスをクラウドでホストする必要があるとします。このサービスでは、競合企業の情報を取得し、2 つのメソッド (特定の競合企業情報を取得するメソッドとすべての競合企業情報のリストを返すメソッド) がサポートされます。両方のメソッドを作成しますが、競合企業情報を一括で返す方のメソッドのみを実装します。この記事を読んだ後で、特定の競合企業情報を要求する方のメソッドを利用するようにコードを拡張することができます。

WCF サービスを作成するには、Visual Studio 2010 を起動し、新しいプロジェクトを開始します。[新しいプロジェクト] ウィザードで、[Cloud] テンプレートを選択します。プロジェクトの名前を指定し (私は Competitors という名前にしました)、[OK] をクリックします。[WCF サービス Web ロール] プロジェクトを選択し、[OK] をクリックします。

いくつかのリソース (Windows Azure ロール構成ファイル、WCF サービスのコードとコントラクトなど) を含む新しいソリューションが作成されます。この例ではメモリ内オブジェクトを使用するので、WCF プロジェクトを右クリックし、[追加] をポイントし、[クラス] をクリックします。クラスの名前 (Competitor) を指定し、クラス ファイルに次のコードを追加します。

namespace WCFServiceWebRole1 {
  public class Competitor {
    public string svcCompeteID { get; set; }
    public string svcCompeteName { get; set; }
    public string svcCompeteFY09 { get; set; }
    public string svcCompeteFY10 { get; set; }
  }
}

このコードには 4 つのプロパティ (競合企業の ID、名前、および 2009 営業年度と 2010 営業年度の売上) が含まれています。

Silverlight もプレゼンテーション層として使用するので、Silverlight がドメインを横断して Windows Azure サービスを呼び出すことができるように、クラウド アクセス ポリシー ファイルをプロジェクトに追加する必要があります。これを行うには、WCF プロジェクトを右クリックし、[追加] をポイントし、[新しい項目] をクリックします。[新しい項目の追加] ダイアログ ボックスで、[データ] カテゴリを選択し、XML を選択します。新しいファイルに clientaccesspolicy.xml という名前を付け、[追加] をクリックします。新しいファイル内の XML コードを次のコードに置き換えます。

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="SOAPAction">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

次に、WCF サービスのサービス コントラクトを作成します。この例では、簡潔にするため、2 つの操作コントラクトのみを含めます。1 つ目の操作では 1 つの競合企業を取得し (getACompetitor メソッド)、2 つ目の操作ではすべての競合企業を取得します (getAllCompetitors メソッド)。特定の競合企業レコードを返すには、ID (custID) を渡す必要があります。図 2 は、コントラクトの概要を示しています。

図 2 サービス コントラクト

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WCFServiceWebRole1 {
  [ServiceContract]
  public interface IService1 {
    [OperationContract]
    string[] getACompetitor(string custID);

    [OperationContract]
    List<Competitor> getAllCompetitors();
    }
}

コントラクトが完成したら、今度は、コントラクトを実装するコードを追加することができます。サービス コントラクトに対応するサービス コードを図 3 に示します。このコードには、1 つの競合企業レコードを取得するためのメソッド (getACompetitor)、すべての競合企業情報を取得するためのメソッド (getAllCompetitors)、および競合企業情報を生成するためのメソッド (generateCompeteData) が含まれています。この単純明快なコードでは、リスト コレクションや配列などのメモリ内データ構造を LINQ と共に利用して、データを作成し、呼び出し元のアプリケーションに返しています。この例では、呼び出し元のアプリケーションは、SharePoint に配置される Silverlight アプリケーションです。

図 3 サービス コード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WCFServiceWebRole1 {
  public class Service1 : IService1 {
    List<Competitor> myCompetitors = new List<Competitor>();

    public string[] getACompetitor(string custID) {
      generateCompeteData();

      string[] returnCompete = new string[4];

      var returnListOfData = (
        from compete in myCompetitors
        where  compete.svcCompeteID  == custID
        select compete).ToArray();

      foreach (var competeRecord in returnListOfData) {
        returnCompete[0] = competeRecord.svcCompeteID;
        returnCompete[1] = competeRecord.svcCompeteName;
        returnCompete[2] = competeRecord.svcCompeteFY09;
        returnCompete[3] = competeRecord.svcCompeteFY10; 

      };

      return returnCompete;
    }

    public List<Competitor> getAllCompetitors() {
      generateCompeteData();
      List<Competitor> returnlistOfCompetitors = 
        new List<Competitor>();

      var returnListOfData = (
        from customer in myCompetitors
        select customer).ToArray();

      foreach (var compete in returnListOfData) {
        Competitor tempCompeteRecord = new Competitor();
        tempCompeteRecord.svcCompeteID = compete.svcCompeteID;
        tempCompeteRecord.svcCompeteName = compete.svcCompeteName;
        tempCompeteRecord.svcCompeteFY09 = compete.svcCompeteFY09;
        tempCompeteRecord.svcCompeteFY10 = compete.svcCompeteFY10;
        returnlistOfCompetitors.Add(tempCompeteRecord);
      };

      return returnlistOfCompetitors;
    }

    private void generateCompeteData() {
      Competitor compete1 = new Competitor();
      compete1.svcCompeteID = "BR-CAN-8909";
      compete1.svcCompeteName = "Bauer - Canada";
      compete1.svcCompeteFY09 = "$45,093,028.00";
      compete1.svcCompeteFY10 = "$50,493,820.00";
      myCompetitors.Add(compete1);

      Competitor compete2 = new Competitor();
      compete2.svcCompeteID = "NK-USA-8665";
      compete2.svcCompeteName = "Nike - USA";
      compete2.svcCompeteFY09 = "$50,492,331.00";
      compete2.svcCompeteFY10 = "$52,019,828.00";
       myCompetitors.Add(compete2);

      Competitor compete3 = new Competitor();
      compete3.svcCompeteID = "GF-EU-9912";
      compete3.svcCompeteName = "Graf - Europe";
      compete3.svcCompeteFY09 = "$24,403,920.00";
      compete3.svcCompeteFY10 = "$24,001,926.00";
      myCompetitors.Add(compete3);

      Competitor compete4 = new Competitor();
      compete4.svcCompeteID = "CCM-USA-8843";
      compete4.svcCompeteName = "CCM Hockey";
      compete4.svcCompeteFY09 = "$12,209,105.00";
      compete4.svcCompeteFY10 = "$10,092,813.00";
      myCompetitors.Add(compete4);

    }
  }
}

この時点で、既に WCF サービスを作成したので、この統合の SharePoint 部分に着手する準備がほぼ整っています。ただし、着手するには、サービスを Windows Azure に配置する必要があります。

サービスを配置するには、Windows Azure 開発者アカウントが設定済みで使用できる状態になっている必要があります。アカウントの準備ができている場合は、Windows Azure プロジェクトを右クリックし、[発行] をクリックします。

サービスを発行すると、資格情報を入力できるダイアログ ボックスが表示されます。図 4 からわかるように、サービス パッケージのみを作成する (Visual Studio によって、Windows Azure 開発者ポータルに追加する必要がある 2 つのコア ファイルがローカル フォルダー内に作成されます) か、構成済みの情報を使用してサービスを自動的に配置するかを選択することができます。この例では、[Create Service Package Only] (サービス パッケージのみを作成する) をクリックし、[OK] をクリックします。

画像: サービス発行オプション

図 4 サービス発行オプション

2 つのファイル (Competitors と ServiceConfiguration) が作成されます。Competitors はサービス パッケージ ファイル (基本的にはリソース アーカイブ) で、ServiceConfiguration は XML 構成ファイルです。

次は、Windows Azure 開発ポータルに移動して、これらのファイルをサービスに追加することができます。これを行うには、サービスに移動し、[Deploy] (配置) をクリックします (既に配置済みで、サービスをアップグレードする場合は、図 5 に示すように [Upgrade] (アップグレード) をクリックします)。続いて、2 つのファイルを参照し、[OK] をクリックします。サービスのアップロードには数分かかります。

画像: サービスを手動で Windows Azure に配置

図 5 サービスを手動で Windows Azure に配置

準備が完了したことを示すメッセージが表示されたら、同じ Web ページに表示されるリンクをクリックして、サービス エンドポイントをテストすることができます。次のように、サービス URL の末尾にサービス名を追加しなければならない可能性があります。

http://serviceendpoint.azure.com/Service1.svc.

ここで、Windows Azure はひとまず脇に置いて、SharePoint に関する作業に進むことができます。

Silverlight 対応の Web パーツを作成する

SharePoint 用の Silverlight Web パーツを作成する方法はいくつかあります。その 1 つは、単に、Visual Studio で Silverlight アプリケーションを作成し、XAP ファイルを (たとえばドキュメント ライブラリにアップロードするなどの方法で) SharePoint に配置し、SharePoint 2010 のネイティブ Silverlight Web パーツを使用して Silverlight アプリケーションを読み込むという方法です。これは Silverlight アプリケーションを SharePoint に配置する最も簡単な方法で、コーディングの量も少なくて済みます。

2 つ目の、もう少し興味深い方法は、Silverlight/SharePoint Web パーツ プロジェクト テンプレート (code.msdn.microsoft.com/vsixforsp、英語) を使用するというものです。これを使用すると、Silverlight アプリケーションが自動的に Web パーツでラップされます。つまり、単に Silverlight アプリケーションを作成すれば、Web パーツとして SharePoint に配置することができるということです。この方法では、1 つ目の方法よりもう少しきめ細かくコードを制御でき、また、本物の Web パーツを SharePoint に配置することになります。

テンプレートを使用するには、コード ギャラリーのサイトに移動し、"Silverlight & SharePoint VSIX" というリンクをクリックしてファイルをダウンロードし、解凍します。ファイルを解凍したら、.vsix ファイルをダブルクリックしてインストールし、Visual Studio 2010 を再起動します。

Silverlight Web Part テンプレートをインストールしたら、Visual Studio ソリューションに戻り、[ファイル] メニューの [追加] をポイントし、[新しいプロジェクト] をクリックして、[Solution] (ソリューション) フィールドで [Add to Solution] (ソリューションに追加) を選択します。SharePoint 2010 フォルダーに移動し、Silverlight Web Part プロジェクト テンプレートを選択します。Web パーツの名前を指定し (私は CompetitorSPWebPart という名前を使用しました)、[OK] をクリックします。

[OK] をクリックすると、SharePoint サイトの URL を指定するよう求められます。ここでサイトの URL を追加し、[Deploy as Farm Solution] (ファーム ソリューションとして配置する) を選択します。続いて、Silverlight プロジェクトの名前、バージョン、XAP ファイルを配置する場所、Web パーツのタイトル、Web パーツの説明などのいくつかの項目を指定するよう求められます (図 6 参照)。ウィザードのこの部分の設定が済んだら、[Finish] (完了) をクリックします (プロジェクト テンプレートでは Silverlight 3 または 4 を使用できます。マイクロソフトは現在、コード ギャラリーでの再リリースに向けてテンプレートをアップグレードしています)。

画像: Silverlight Web パーツの構成

図 6 Silverlight Web パーツの構成

これで、Silverlight アプリケーションをラップする SharePoint Web パーツが用意できたので、Silverlight アプリケーションを使用して Web パーツの UI と機能を構築することができます。

まず、Silverlight プロジェクトで、Windows Azure サービスへの参照を追加します。これを行うには、[References] (参照) を右クリックし、[サービス参照の追加] をクリックします。サービスの名前空間の名前を指定し (私の場合は GetCompeteAzureService です)、[OK] をクリックします。これは、エンドポイントが Windows Azure サービスを指し示している点を除けば、アプリケーションで他のサービス参照を利用するのと同じです。

この時点で、Windows Azure サービスに対するコーディングを行うことができます。前述のとおり、SharePoint アプリケーションの getAllCompetitors メソッドを利用します。

アプリケーションの UI が必要です。私は、Windows Azure サービスへの呼び出しから返されたデータを表示する単純な UI を作成しました。主要なコントロールはリスト ボックス コントロールで、見栄えを良くするためにいくつかの画像を追加してあります。詳細については、この記事のコードをダウンロードして確認してください。

次は、Silverlight アプリケーションに Competitor というカスタム クラスを追加します。次のように、Competitor には、図 3 のサービス コード用に定義された競合企業データに対応する 4 つのプロパティがあります。

namespace CompetitorDisplayApp {
  public class Competitor {
    public string competeID { get; set; }
    public string competeName { get; set; }
    public string competeFY09 { get; set; }
    public string competeFY10 { get; set; }
  }
}

ここで、getAllCustomers メソッドを実装するコードを XAML 分離コード ファイルに追加することができます。図 7 から、私が Windows Azure へのサービス呼び出しから返されるデータの格納に myCompetitors というリスト コレクションを使用していることがわかるでしょう。ここでは、特に複雑な処理は行っていません。Competitor オブジェクトを使用して myCompetitors リスト コレクションにデータが設定され、その後、myCompetitors がリスト ボックス (competeList) にバインドされています。

図 7 カスタム Competitor オブジェクト

using CompetitorDisplayApp.GetCompeteAzureService;

namespace CompetitorDisplayApp {
  public partial class MainPage : UserControl {
    public string SiteUrl { get; set; }

    List<Competitor> myCompetitors = new List<Competitor>();

    public MainPage() {
      InitializeComponent();

      this.Loaded += new RoutedEventHandler(MainPage_Loaded);
    }

    void MainPage_Loaded(object sender, RoutedEventArgs e) {
      LoadAzureData();
    }

    private void LoadAzureData() {
      GetCompeteAzureService.Service1Client azureSvcProxy = 
        new Service1Client();
      azureSvcProxy.getAllCompetitorsAsync();
      azureSvcProxy.getAllCompetitorsCompleted += 
        new EventHandler<getAllCompetitorsCompletedEventArgs>(
        azureSvcProxy_getAllCompetitorsCompleted);
    }

    void azureSvcProxy_getAllCompetitorsCompleted(
      object sender, getAllCompetitorsCompletedEventArgs e) {

      var competeData = e.Result;
      foreach (var item in competeData) {
        Competitor tempRecord = new Competitor();
        tempRecord.competeID = item.svcCompeteID;
        tempRecord.competeName = item.svcCompeteName;
        tempRecord.competeFY09 = item.svcCompeteFY09;
        tempRecord.competeFY10 = item.svcCompeteFY10;
        myCompetitors.Add(tempRecord);
      }

      competeList.ItemsSource = myCompetitors;
    }
  }
}

これでコーディングは完了です。ですが、この方法が単に SharePoint に付属する既定の Silverlight Web パーツを使用するよりも便利な理由を示すために、Silverlight Web Part テンプレートによって作成される既定のコードを軽く見てみる価値はあるでしょう。

図 8 は、Visual Studio によって Silverlight Web パーツ プロジェクトが作成される際に作成される既定の Web パーツ コードを示しています。SilverlightPluginGenerator オブジェクトが作成され Web パーツのプロパティが設定されているラッパー コードを確認することができます。これらは、(たとえば、Web パーツを開き、SharePoint の [Tools] (ツール) ペインを通じて高さと幅を編集するのではなく) デザイン時に処理されるプロパティです。さらに、この Web パーツが Web パーツ ギャラリーに配置されている場合は、Silverlight アプリケーションを表示するための処理が既にあるので、コピーと貼り付けを行わなくて済みます。

図 8 既定の Web パーツ コード

[ToolboxItemAttribute(false)]
public class SilverlightWebPart : WebPart {
  private SilverlightPluginGenerator _silverlightPluginGenerator = null;

  public SilverlightWebPart() {
    this._silverlightPluginGenerator = 
      new SilverlightPluginGenerator {

      Source = new Uri(
        "/XAPS/Silverlight/CompetitorDisplayApp/CompetitorDisplayApp.xap",
        UriKind.Relative),
        Width = new Unit(400, UnitType.Pixel),
        Height = new Unit(300, UnitType.Pixel),
        BackGround = Color.White,
        Version = SilverlightVersion.v3,
        AutoUpgrade = true,
        OnError = "onSilverlightError",
    };
  }

  protected override void CreateChildControls() {
    base.CreateChildControls();

    this.Controls.Add(new LiteralControl(
      @"<script type=""text/javascript"">" + 
      Resources.onSilverlightErrorHandler + 
      "</script>"));

    this._silverlightPluginGenerator.InitParams.Add(new InitParam(
      "SiteUrl", SPContext.Current.Site.Url));

    this.Controls.Add(new LiteralControl(
      this._silverlightPluginGenerator.ToString()));
  }

  protected override void RenderContents(HtmlTextWriter writer) {
    base.RenderContents(writer);
  }
}

最後に、Web パーツのプロパティは初期構成ウィザードを実行したときに設定されました。たとえば、.webpart ファイルを開くと、次のように、Web パーツの名前と説明を確認することができます (名前と説明は、必要に応じてここで変更できます)。

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="https://schemas.microsoft.com/WebPart/v3">
    <metadata>
      <type name="CompetitorSPWebPart.SilverlightWebPart.SilverlightWebPart, $SharePoint.Project.AssemblyFullName$" />
      <importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage>
    </metadata>
    <data>
      <properties>
        <property name="Title" type="string">Compete Information</property>
        <property name="Description" 
          type="string">This Web Part provides compete information.</property>
      </properties>
    </data>
  </webPart>
</webParts>

Silverlight Web パーツが完成したので、Web パーツを使用に向けて SharePoint に配置する準備ができました。

Web パーツを配置する

配置するには、Web パーツ プロジェクト (私の例では CompetitorSPWebPart) を右クリックし、[配置] をクリックします。Web パーツを配置すると、Silverlight アプリケーションが XAPS ドキュメント ライブラリに配置され、その XAP ファイルへのリンクが Web パーツ内に自動生成されます (Silverlight Web Part テンプレートの代わりに Silverlight アプリケーションを使用する場合は、XAP ファイルを XAPS ドキュメント ライブラリにアップロードし、SharePoint のネイティブ Silverlight Web パーツを使用するだけです)。

では、SharePoint サイトを開き、新しい Web パーツ ページに移動 (または新しい Web パーツ ページを作成) します (新しい Web パーツ ページを作成するには、[サイトの操作]、[すべてのサイト コンテンツの表示]、[Create] (作成)、[Web Part Page] (Web パーツ ページ) の順にクリックします)。[サイトの操作]、[ページの編集]、[Web パーツの追加] の順にクリックします。Custom カテゴリに移動し、Web パーツ (この例では Compete Information) を選択して、[追加] をクリックします。追加されたら、[Stop Editing] (編集の終了) をクリックします。完成した Web パーツは図 9 のようなものとなります。

Windows Azure サービスを呼び出す Silverlight Web パーツの完成形

図 9 Windows Azure サービスを呼び出す Silverlight Web パーツの完成形

まとめ

SharePoint と Windows Azure の統合は新しい手法であり、たくさんの可能性があります。この例では、カスタム Windows Azure サービスを作成し、カスタム Silverlight ベース Web パーツからそのサービスを利用する方法について説明しました。この簡単な例を見ただけでも、Windows Azure サービスとそれを利用する Web パーツの両方における、はるかに高度なソリューションの可能性を感じていただけたでしょう。

その他のサンプルやチュートリアルについては、私のブログ (blogs.msdn.com/b/steve_fox、英語) を参照してください。SharePoint と Windows Azure を統合する方法に関するその他のコードやドキュメントをお見逃しなく。

Steve Fox は、マイクロソフトでシニア エバンジェリズム マネージャーを務めています。IT の分野に 15 年間携わってきましたが、そのうちの 10 年間は、マイクロソフトで自然言語、検索、および SharePoint/Office 開発に携わってきました。Fox は多くの記事や書籍 (最近発売された『Beginning SharePoint 2010 Development』(Wrox、2010 年) など) を執筆しています。

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