WCFのHelloWorld(サーバ編) - y_maeyamaの日記でWCFサービスの用意が完了しました。今度はSilverlightアプリケーションからWCFサービスをコールします。
開発環境
この記事は以下の環境でのコーディングしています。
- Windows 7
- VisualStudio 2010
- Silverlight 4 Tools for VS 2010 日本語版
- Expression Blend 4
- IE8
WCFプロキシクラスの生成
VisualStudioのサービス参照の追加機能でWCFプロキシクラスを生成します。プロキシクラスはWCFサービスにアクセスするために必要な機能を提供します。サーバ編で作成したsvcファイル単位でプロキシクラスを生成します。
以下、生成手順です。
Silverlightプロジェクトを右クリックして、コンテキスメニューを開きます。コンテキストメニューのサービス参照の追加を選択します。
表示されたダイアログの検索ボタンを押します。すると参照可能なWebサービス一覧が表示されますので、HelloWorldServiceを選択します。
次に、生成されるプロキシクラスが所属するネームスペースを設定します。今回は、「HelloWorld」としました。以上の作業が完了しましたら、OKボタンを押します。
以下のファイルとアセンブリ参照がSilverlightプロジェクトに追加されます。
追加されたもの | |
---|---|
ファイル | ServiceReferences.ClientConfig,HelloWorldServiceClientクラスとその関連クラス |
アセンブリ参照 | System.Runtime.Serialization.dll, System.ServiceModel.dll |
WCFコールの実装
<UserControl x:Class="WCFHelloWorld.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <StackPanel x:Name="LayoutRoot" Background="White"> <StackPanel Orientation="Horizontal" Margin="5"> <TextBlock Text="名前 : " VerticalAlignment="Center"/> <TextBox x:Name="TbxName" Width="150"/> </StackPanel> <Button x:Name="BtnHelloWorld" Content="Hellow World" HorizontalAlignment="Center" Margin="5"/> <TextBlock x:Name="TblResult" /> </StackPanel> </UserControl>
次に、HelloWorldボタンが押されたときにWCFコールするようにします。
MainPage.xaml.csにプロキシクラス用usingを追加します。
// WCFプロキシクラスが含まれるネームスペースをusingに追加 using WCFHelloWorld.HelloWorld;
ボタンクラスイベントハンドラを実装します。
private void BtnHelloWorld_Click(object sender, RoutedEventArgs e) { string name = TbxName.Text; this.CallHelloWorldGetMessage(name); } /// <summary> /// HelloWorldサービスのGetMessageメソッドを呼ぶ。 /// </summary> /// <param name="name"></param> private void CallHelloWorldGetMessage(string name) { // サービス参照の追加で生成したプロキシクラスのインスタンスを生成する。 HelloWorldServiceClient client = new HelloWorldServiceClient(); // WCFコール終了後に発生するイベントにイベントハンドラを登録する。 client.GetMessageCompleted += new EventHandler<GetMessageCompletedEventArgs>(this.Client_GetMessageCompleted); // GetMessageを呼ぶ。 client.GetMessageAsync(name); } /// <summary> /// WCFからの戻り値を処理する。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Client_GetMessageCompleted(object sender, GetMessageCompletedEventArgs e) { // 正常にWCF呼び出しが行われたか? if (e.Cancelled == false && e.Error == null) { // 結果をTextBlockにセットする。 string result = e.Result; TblResult.Text = result; } else if (e.Error != null) { // エラー内容を表示する。 MessageBox.Show(e.Error.Message); } }
以上で、WCFコールの実装は完了です。