SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Vista時代のプログラミングモデル .NET Framework 3.0入門

WCF(Windows Communication Foundation)チュートリアル 前編

Vista時代のプログラミングモデル .NET Framework 3.0入門 (3)


  • X ポスト
  • このエントリーをはてなブックマークに追加

WCFを使ったサンプルの実装 4

 残るはWCFサービスのホスティングです。

 「Form1.cs」のフォーム上にボタンを配置し、WCFサービスをホスティングするイベントハンドラを記述します。イベントハンドラ部分のみ以下に示します。

WCFサービスのホスティング
using System.ServiceModel;
using WCFMemberServiceLibrary;
 :
 :中略
 :
internal static ServiceHost myServiceHost = null;

bool isServiceStarted = false;

private void serviceButton_Click(object sender, EventArgs e)
{
    if (!isServiceStarted) //WCFサービスが実行されていなければ
    {
      startService(); //WCFサービス開始
    }
    else
    {
      stopService(); //WCFサービス終了
    }
}

private void startService()
{
    Uri baseAddress = new Uri("http://localhost:8080/MemberService");

    myServiceHost = new ServiceHost(typeof(SampleService),baseAddress);
    myServiceHost.Open();
    isServiceStarted = true;
    serviceButton.Text = "Stop Service";
}

private void stopService()
{
    if (myServiceHost.State != CommunicationState.Closed)
    {
        myServiceHost.Close();
        isServiceStarted = false;
        serviceButton.Text = "Start Service";
    }
}

 WCFサービスの開始・終了は、System.ServiceModel名前空間のServiceHostクラスを用いて行います。ServiceHostクラスの代表的なメソッド・プロパティを以下に示します。

ServiceHostクラスの代表的なメソッド・プロパティ
メソッド・プロパティ名 概要
BaseAddressesプロパティ サービスで使用するベースアドレスを表す
Descriptionプロパティ サービス概要を表す
Stateプロパティ サービスの通信状況を表す
Abortメソッド 現在の通信を中断してサービスを終了する
AddServiceEndpointメソッド サービスにEndpointを追加する
Closeメソッド 現在の通信終了後にサービスを終了する
Openメソッド サービスを開始する

 ここまで完成したらビルドし、「WCFMemberServiceGUI」プロジェクトをスタートアップ プロジェクトに指定して実行します。

ホスティング アプリケーション
ホスティング アプリケーション

 [Start Service]ボタンをクリックすると、サービスが開始します。

 実際にWCFサービスが動いていることを確認しましょう。以下のアドレスをWebブラウザで開くと、サービスについての説明が表示されます。

  • http://localhost:8080/MemberService
サービス画面
サービス画面

 上図にあるリンク、

  • http://localhost:8080/MemberService?wsdl

 をクリックすると、このサービスで使用するWSDLが表示されます。

WSDL
WSDL

 これでWCFを使ったサービス提供側の実装は完了です。ホスティングアプリケーションを実行したまま、次のステップに進みましょう。

WCFSampleClientプロジェクトの実装

 次に、クライアント側の実装を行いましょう。

 もう1つVisual Studio 2005を起動し、新しいプロジェクトを作成します。今回は"コンソール アプリケーション"としてWCFSampleClientプロジェクトを作成します。

新しいプロジェクトの選択
新しいプロジェクトの選択

 では、先ほどのWCFサービスからメタデータを取得してコントラクトを生成しましょう。

 ソリューション エクスプローラの「WCFSampleClient」プロジェクトを右クリックし、[Add Service Reference...]を選択します。このメニューはVisual Studio 2005 Extensions for WCFによって追加された機能です。

サービスURI指定
サービスURI指定

 [Service URI]に「http://localhost:8080/MemberService」を指定し、[OK]ボタンをクリックします。

 ホスティングアプリケーションのWCFサービスからメタデータを取得し、自動的にクラスが作成されてソリューションエクスプローラに追加されます。

自動生成されたクラス
自動生成されたクラス

 [Service References]-[localhost.map]-[localhost.cs]が新規に作成されます。このファイルには以下の定義が含まれています。

  • データ・コントラクトで定義されたMemberクラス
  • サービス・コントラクトで定義されたISampleService
  • ISampleServiceを実装し、通信処理を介したサービス呼び出しを行うSampleServiceClientクラス

 クライアントでは、SampleServiceClientクラスを使って実装を行います。

 また、「app.config」ファイルも自動生成されています。指定されている「ABC」がサービス提供側と同じことに注目してください(ただしコントラクトの部分は自動生成されたクラスのインターフェイスを使用しています)。

作成されたapp.configの内容(クライアントHTTP版)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
  :
  :中略
  :
    <client>
      <endpoint address="http://localhost:8080/MemberService" 
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ISampleService"
contract="WCFSampleClient.localhost.ISampleService"
name="BasicHttpBinding_ISampleService" />
</client> </system.serviceModel> </configuration>

 Program.csのMainメソッドに以下のコードを実装します。

Program.csのMainメソッド(HTTP版)
using WCFMemberServiceLibrary;
 :
 :中略
 :
ISampleService client = new SampleServiceClient();

Member member1 = new Member();
member1.Id = 1;
member1.Name = "Doi";

client.addMember(member1);

Member member2 = new Member();
member2.Id = 2;
member2.Name = "Yamada";

client.addMember(member2);

Member member = client.getMember(1);
Console.WriteLine(member.Name);
Console.In.ReadLine();

 ここでは、以下の処理を行っています。

  • member1、member2という2人の会員を作成
  • addMemberメソッドで会員を追加
  • getMemberメソッドで会員番号1の会員情報を取得
  • 取得した会員情報の名前をコンソールに出力

 ビルドして実行すると、会員番号1の名前である「Doi」がコンソールに出力されるはずです。

まとめ

 以上で、WCFサービスを使ったクライアント実装が完了しました。クライアント側の実装コードに、通信を意識した部分がほとんど無かったことに注目してください。

 後編では今回作成したサンプルの通信方式をTCPに切り替えます。通信方式の切り替えにどのぐらいの作業が必要なのか、注目してください。また、今回はWCFサービスのホスティングに自作のGUIアプリケーションを使用しましたが、IISを使ってのホスティングについても扱う予定です。後編のためにも、前編で説明したWCFの概念、特に重要なキーワードである「ABC」についてはしっかりと理解してください。

 それでは、次回「WCF(Windows Communication Foundation)チュートリアル 後編」もお楽しみに。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Vista時代のプログラミングモデル .NET Framework 3.0入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 土井 毅(ドイ ツヨシ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1157 2008/08/19 17:24

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング