このページの本文へ

クラウドに興味ありな開発者なら、3ステップで楽々Azureに移行 第3回

Windows AzureとSilverlight 4でアプリケーション開発に挑戦

2010年12月21日 16時00分更新

文● 飯島進仁/ふむふむソフト

  • この記事をはてなブックマークに追加
  • 本文印刷

ポイント その2
WebロールにWCFとSilverlightをプロジェクトに追加する

 前項で「1つのWebロールで実装されている」と説明したが、このWebRole1にSilverlightとWCFを追加する手順を説明しよう。

 まず、WebRole1を右クリックし、「新しい項目の追加」を選択する。

WebRole1に新しい項目を追加

WebRole1に新しい項目を追加する

 すると、テンプレートを選択するダイアログが表示されるので、「Silverlight」の「Silverlight アプリケーション」を選択する。名前はデフォルトのまま「SilverlightApplication1.csproj」でOKだ。

 [追加]ボタンを押すと次のようなダイアログが表示されるので、「Silverlight バージョン」が「Silverlight 4」になっていることを確認して[追加]を押せば、今回のCloudServer1というソリューションに「SilverlightApplication1」というプロジェクトが、WebRole1にも「SilverlightApplication1TestPage」という名前のHTMLファイルやASPXファイルなどが追加される。

 この「SilverlightApplication1」というプロジェクトが今回開発するSilverlightの実体であり、「SilverlightApplication1TestPage.html」や「同.aspx」は、そのSilverlightをブラウザで表示するためのいわば「入れ物」にすぎない。この点をしっかり理解しておこう。

Silverlightアプリケーションの追加ダイアログ

Silverlightアプリケーションの追加ダイアログ。「Siverlight 4」になっている事を確認しよう

 次にWCFの追加。こちらも同じく「新しい項目の追加」から追加するわけだが、ここでも「Silverlight」を選択し、その中に含まれる「Silverlight 対応 WCFサービス」を追加しよう。

 名前もデフォルトのままであれば、「Service1.svc」というファイルがWebRole1に追加されるはずだ。

ポイント その3
SilverlightとWCFサービスの通信部分を実装してみる

 前項までの手順で、SilverlightとWCFがWindows Azureのプロジェクトに追加された。とはいえ、このままでは何も処理が行なわれないので、SilverlightとWCFを通信させる実験コードを追加して、動作を確認しておこう。

 この「Service1.svc」というWCFサービスをどう使うのかという説明の前に、初期状態ではこのService1.svcにどういった処理が定義されているのか、コードを確認しておこう。

「Service1.svc」をダブルクリックしてコードを表示すると、

        [OperationContract]
        public void DoWork()
        {
            // 操作の実装をここに追加してください
            return;
        }

という部分が見つかると思うが、この「DoWork」というメソッドが、現在このWCFに定義された唯一のメソッドである。このままでは、まだ処理が実装されていないので、次のように書き換えて頂きたい。

        public string DoWork(string Value)
        {
            string retValue = Value;
            retValue += DateTime.Now.ToString("yyyy/MM/dd");
            return retValue;
        }

 これは「引数として渡された文字列に現在の日付文字列を連結して返す」、という処理だ。なにぶん“Silverlightとの通信のテスト用処理”なので、この処理自体に大した意味がない点はご容赦いただきたいが、このメソッドの処理を念頭において、以降を読み進めていただきたい。

 Service1側のコードが変更できたらWebRole1を右クリックし、「ビルド」を実行しよう。ここで一度ビルドして最新の状態にしておかないと、のちのSilverlightのコード変更時に面倒な修正が発生してしまうので注意が必要だ。

 これでWCFサービス側の準備ができたので、今度はこのWCFサービスを実際に使うための処理をSilverlightに追加する。

 「SilverlightApplication1」というプロジェクト内に「参照設定」という項目があるので、これを右クリックして「サービス参照の追加」を選択。すると「サービス参照の追加」というダイアログが表示されるので、「探索」というボタンを押す。検索結果として「Service1.svc」が表示されるはずだ。

サービス参照の追加ダイアログ

サービス参照の追加ダイアログ。「探索」ボタンを押し、「Service1.svc」が見つかったところ

 この見つかったService1.svcをサービス参照に追加するわけだが、その前にこのService1.svcを展開して、少し詳しく見てみよう。すると「Service1」の下に先ほどの「DoWork」というメソッドが確認できる。SilverlightからこれらWCFサービス内に定義されたメソッドにアクセスすることで、サーバーとの通信を実現するわけだ。

Service1.svcに含まれるDoWorkというメソッドが確認できる

Service1.svcに含まれるDoWorkというメソッドが確認できる

 さて、このダイアログで[OK]を押せば、「ServiceReference1」という名前でサービス参照が追加されるが、ここでもう1つやっておかなければならないことがある。

 SilverlightApplication1プロジェクト内に「ServiceReference.ClientConfig」というファイルがあるので、その中の

address="http://localhost:(数字)/Service1.svc"

という箇所を

address="../Service1.svc"

 という内容に変えておこう。つまりURLを「絶対URL」から「相対URL」に変更しておくわけだ。

ServiceReference.ClientConfigの変更箇所

ServiceReference.ClientConfigの変更箇所。URLが相対URLになっている

 こうしておかないと、開発環境から実際のWindows Azure環境に移した時に不具合が起きてしまう。

 ちょっと面倒ではあるが、仕組みを考えると仕方のない部分でもあるので、「Silverlight+WCF+Windows Azureの開発ポイントのひとつ」として覚えておこう。


 (次ページ、「いよいよSilverlightをコーディングする」に続く)

カテゴリートップへ

この連載の記事