WCFとは

Windows Communication Foundationの略であり、Microsoftが提供する通信基盤です。
(.Net framework3.0より使用できます)

Webサービス標準のSOAPに準拠しXMLでやり取りが行われ、プロトコルを意識せず通信が行えます。
よく利用されるデータベースにアクセスするためのADO.NETもSOAP通信ですね。
今まではソケット通信だと敷居が高かったり、プロトコル(やり取り)の仕様を考えるのに労力がいりましたが、通信自体はWCFが自動でデータをシリアライズ化してやり取りしてくれます。
利用者は、メソッドをコールするような感覚で通信プログラムが作成できます。

また、サービスがマルチスレッドを管理してくれるので実装も非常に楽です。
メッセージは文字や数値以外に、配列や独自クラスを送ったり受け取ったりできるので色々な場面で使用できると思います。

Webサービス(http通信)だけでなく、プロセス間通信(名前付きパイプ)やPC間通信(TCP)も可能です。
、私もWCFを利用するようになり、こんな便利なライブラリがあるなら早くから試しておけばよかったと思っています。

20180118_wcf_image

WCFの設計

まず、通信を行うためにWCFの"ABC"を決めます。
※ここで記述しているのは、一部の例です。

A・・・Address。アドレスを決定します。サービス名を決めます。
Webサービス http://(ホスト名)/myservice/hoge.svc
TCP通信 net.tcp://(ホスト名):8080/myservice
名前付きパイプ  net.pipe://127.0.0.1/myservice

B・・・Binding。接続方法を決定します。
Http basicHttpBinding、WsHttpBinding
TCP通信 NetTcpBinding、
名前付きパイプ  NetNamedPipeBinding


C・・・Contract。どういうデータを送るか決定する。
.Netの型や独自クラス・構造体を送ることも可能。使えない型もあるの、ジェネリック型を使用することになる。

実装方法(プログラミングする箇所)

WCFの定義ファイルは以下ような感じになります。

ホスト(サーバー)

・インターフェース定義部
・実装部(インターフェースを継承したクラス)
・エントリーポイント(サービスをオープンクローズする部分)
 →IISに委託する場合は不要。
・WebConfig/AppConfig
 →Binding方法や受信メッセージ上限サイズなどを設定する。

クライアント

・ホスト接続とコールロジック
・AppConfig
 →必要があれば作成する。

ホストとクライアントの定義は同じにする

インターフェース内に定義したメソッドや転送する型(Contract)は、ホストとクライアントで合わせておく必要があります。そうしないとエラーが発生します

参照方法としまして・・・
・WSDL(Web Services Description Language)を実装するパターン
 →サービス側にWSDLを定義して、クライアント側からは「サービス参照」させる。
  ホストのバージョンを上げたら、クライアントもサービス参照を「更新」しないと最新のメソッドなどを利用できない。
 →Webサービスの場合、自動的に行われる。
・クラスライブラリで参照するパターン
 →インターフェース定義部分をクラスライブラリ化にしてクライアントの参照に含める
・ソースコードファイルで合わせるパターン
 →ホスト側のプロジェクトのソースコードをクライアント側プロジェクトにリンクさせてやる。

その他に、アドレス/バインディング方法/通信セキュリティがホストとクライアントで一致していないといけません。構築段階のエラーは、ここら辺の記述を見直したら解決する場合が多いです。

ざっと説明しましたが、WCFの実装などは個別に記事にしていく予定です。


スポンサードリンク