ポイント その2
WebロールにWCFとSilverlightをプロジェクトに追加する
前項で「1つのWebロールで実装されている」と説明したが、このWebRole1にSilverlightとWCFを追加する手順を説明しよう。
まず、WebRole1を右クリックし、「新しい項目の追加」を選択する。
すると、テンプレートを選択するダイアログが表示されるので、「Silverlight」の「Silverlight アプリケーション」を選択する。名前はデフォルトのまま「SilverlightApplication1.csproj」でOKだ。
[追加]ボタンを押すと次のようなダイアログが表示されるので、「Silverlight バージョン」が「Silverlight 4」になっていることを確認して[追加]を押せば、今回のCloudServer1というソリューションに「SilverlightApplication1」というプロジェクトが、WebRole1にも「SilverlightApplication1TestPage」という名前のHTMLファイルやASPXファイルなどが追加される。
この「SilverlightApplication1」というプロジェクトが今回開発するSilverlightの実体であり、「SilverlightApplication1TestPage.html」や「同.aspx」は、そのSilverlightをブラウザで表示するためのいわば「入れ物」にすぎない。この点をしっかり理解しておこう。
次に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」の下に先ほどの「DoWork」というメソッドが確認できる。SilverlightからこれらWCFサービス内に定義されたメソッドにアクセスすることで、サーバーとの通信を実現するわけだ。
さて、このダイアログで[OK]を押せば、「ServiceReference1」という名前でサービス参照が追加されるが、ここでもう1つやっておかなければならないことがある。
SilverlightApplication1プロジェクト内に「ServiceReference.ClientConfig」というファイルがあるので、その中の
address="http://localhost:(数字)/Service1.svc"
という箇所を
address="../Service1.svc"
という内容に変えておこう。つまりURLを「絶対URL」から「相対URL」に変更しておくわけだ。
こうしておかないと、開発環境から実際のWindows Azure環境に移した時に不具合が起きてしまう。
ちょっと面倒ではあるが、仕組みを考えると仕方のない部分でもあるので、「Silverlight+WCF+Windows Azureの開発ポイントのひとつ」として覚えておこう。
(次ページ、「いよいよSilverlightをコーディングする」に続く)
この連載の記事
-
第2回
クラウド
.NET on Windows Azure でクラウド・アプリケーション開発 -
第1回
クラウド
無償セミナー&ハンズオンでクラウド開発をがっちりマスター! -
クラウド
クラウドに興味ありな開発者なら、3ステップで楽々Azureに移行 - この連載の一覧へ