WCF 入門 (1) ~ 初めての WCF プログラム

マイクロソフトの新しい分散プログラム基盤である WCF (Windows Communication Foundation) の入門コース第一弾です。

正直、あまり大きく変わるテクノロジーは、似たようなものを覚えなおすようで嫌なのですが、 WCF は使ってみるとなかなか面白かったです。

概略だけ説明しますが、まずはコードを走らせてみましょう。

WCF とは何か?

WCF は .NET Framework の上に構築される分散プログラム基盤・実行環境です。 WCF を利用するアプリケーションは、WS-* に準拠するメッセージも作れますし、REST アーキテクチャにも対応し、また POX (Plain Old XML) メッセージを利用することも可能です。

マイクロソフトが発表している機能比較表では以下のようになります。

  WSE ASMX .NET
Remoting
COM+ MSMQ WCF
WS-* サポート X     X   X
基本的な Web Service との透過性   X   X   X
.NET プログラム間の通信     X     X
分散トランザクション       X X X
メッセージキューイング         X X

初めての WCF プログラム

ここでは、メッセージ送信を例に取り Receiver (受信者) と Sender (送信者) プログラムを作成し、 WCF でそれをどのように書くのか、そしてそれをどのように発展させるのかみてみましょう。

サービスコントラクトとそれの利用クラス

次のコードをIHelloWCF.cs として保存します。

using System.ServiceModel;

[ServiceContract]
public interface IHelloWCF {

     [OperationContract]
     void Say(string input );

}

次のコードをHelloWCF.cs として保存します。

using System;

public class HelloWCF : IHelloWCF {

     HelloWCF() {
          Console.WriteLine ( "HelloWCF: Object created" );
     }

     public void Say( string input ) {

          Console.WriteLine ( "HelloWCF: Message Received [{0}]", input );

     }

}

Receiver アプリケーションの作成

上記の HelloWCF クラスのインスタンスを受け取るアプリケーションを作成します。

以下のコードを HelloWCFReceiverApp.cs として保存します。


using System;
using System.ServiceModel;


sealed class HelloWCFReceiverApp {

     static void Main() {

          Uri address = new Uri ( "http://localhost:4000/IHelloWCF" );

          BasicHttpBinding binding = new BasicHttpBinding();

          ServiceHost svc = new ServiceHost( typeof(HelloWCF) );

          svc.AddServiceEndpoint( typeof(IHelloWCF), binding, address );

          svc.Open();

          Console.WriteLine ( "HelloWCFReceiverApp: Wainting for messages..." );

          Console.ReadLine();

          svc.Close();

     }

}

上記コードから、HelloWCFReceiver.exe を作成します。

> csc /out:HelloWCFReceiver.exe HelloWCFReceiverApp.cs HelloWCF.cs 
IHelloWCF.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

何もメッセージが出なければ OK です。エラーが出るときは、.NET Framework のバージョンが 3.5 以上であることを確認してください。 私は Windows SDK v6.1 の環境でビルドして問題ありませんでした。

Sender アプリケーションの作成

次のコードを HelloWCFSenderApp.cs として保存します。

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;

sealed class HelloWCFSender {

     static void Main() {

          Uri address = new Uri ( "http://localhost:4000/IHelloWCF" );

          BasicHttpBinding binding = new BasicHttpBinding();

          ChannelFactory<IHelloWCF> factory 
               = new ChannelFactory<IHelloWCF>( binding, new EndpointAddress(address) );

          IHelloWCF proxy = factory.CreateChannel();

          proxy.Say( "Hello, WCF!" );
          
     }

}

こちらも次のコマンドで EXE を作ります。

> csc /out:HelloWCFSender.exe HelloWCFSenderApp.cs IHelloWCF.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.

実行結果

まずは HelloWCFReceiver.exe を起動します。次のようになり停止すれば成功です。

> HelloWCFReceiver.exe
HelloWCFReceiverApp: Wainting for messages...

次に HelloWCFSender.exe を起動します。すると直ちに終了します。

>HelloWCFSender.exe

>

このとき、Receiver アプリケーションの出力から、メッセージを受け取ったことがわかります。

> HelloWCFReceiver.exe
HelloWCFReceiverApp: Wainting for messages...
HelloWCF: Object created
HelloWCF: Message Received [Hello, WCF!]

いかがでしたか?上記のようにうまく動きましたか? 次回はこのプログラムを説明し、コードを発展させていきます。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説