.NET開発者のためのブログメディア
.NET FrameworkのWCFとは?C#で簡単なサービスを作成する方法
WCFとはWindows Communication Foundationの略称で、統合通信フレームワークを表します。WCFが導入される前までは、通信フレームワークに互換性がなく、通信方式を簡単には変えることができませんでした。WCFの登場後は、複数の通信フレームワークが統合されており、共通のアプローチで複数の通信方式を扱うことが可能となりました。ここでは、このWCFについて掘り下げていきたいと思います。
- PG
- WCF……統合通信フレームワークって聞いて、なんだか難しそうなイメージがあります。どうやって実装するのでしょうか?
- PL
- プログラミング初学者の方にはちょっと難しいかもしれませんね。WCFを理解するためには、基本的な概念は必ず押さえておく必要があります。まずはそこから確認していきましょう。
実行環境
・Visual Studio Community 2017
目次
.NET Framework 3系で追加されたWCFとは
WCFは.NET Framework 3.0から新たに追加された、ネットワークを介して異なるコンピュータで動作するソフトウェア間で通信することができるフレームワークです。
WCFを理解するためには、まず知っておくべき基本的な概念が存在します。それが下記で説明する「ABC」です。
- ■A: Address
- ■B: Binding
- ■C: Contract
どこで公開するか(Where)を定義します。URLがこれに該当します
どうやって公開するのか(How)を定義します。HTTPやTCPなどの通信プロトコルがこれに該当します
何を公開するのか(What)を定義します。商取引やゲームなどがこれに該当します
このABCの基本概念があるからこそ、通信方式とロジックを分離し、通信方式の切り替えをより簡単に行うことが可能になります。
WCFでは様々な種類の通信方式が利用できますが、多くの場面で見られるのがHTTPです。利用できる通信方式も確認しておきましょう。
通信方式 | 概要 | 相互運用性 |
---|---|---|
TCP | TCP/IPベースのテキスト/バイナリ通信が可能 | WCFコンポーネント |
HTTP | HTTPベースで、SOAPを使ったXML Web ServicesやRESTスタイルのWebサービス、JSONなどがサポートされている | Webサービスをサポートするアプリケーション |
名前付きパイプ (Named Pipe) |
名前付きパイプを使用する通信方式が可能 | 同一マシン内のWCFコンポーネント同士 |
MSMQ | Microsoft Message Queuingを使用する通信方式が可能 | WCFコンポーネント/MSMQをサポートするアプリケーション |
Peer to Peer | Windows Peer-to-Peer Networkingを使用する通信方式が可能 | WCFコンポーネント |
簡単なWCFサービスを作成する方法
今回は、C#を使って簡単なWCFサービスを作成していきましょう。
- まず、Visual Studioから新しいプロジェクトを作成します。
- プロジェクトが作成されました。プログラムは大きく分けてインターフェイス(IService1.cs)とインプリメンテーション(Service1.svc.cs)に分かれます。
以下のプログラムでは「NewProc」の箇所を新たに追加しました。それ以外は変更する必要はありません。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849using System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.ServiceModel;using System.ServiceModel.Web;using System.Text;namespace WcfService1{// メモ: [リファクター] メニューの [名前の変更] コマンドを使用すると、コードと config ファイルの両方で同時にインターフェイス名 "IService1" を変更できます。[ServiceContract]public interface IService1{[OperationContract]string GetData(int value);[OperationContract]CompositeType GetDataUsingDataContract(CompositeType composite);// TODO: ここにサービス操作を追加します。[OperationContract]string NewProc(string name);}// サービス操作に複合型を追加するには、以下のサンプルに示すようにデータ コントラクトを使用します。[DataContract]public class CompositeType{bool boolValue = true;string stringValue = "Hello ";[DataMember]public bool BoolValue{get { return boolValue; }set { boolValue = value; }}[DataMember]public string StringValue{get { return stringValue; }set { stringValue = value; }}}}12345678910111213141516171819202122232425262728293031323334353637using System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.ServiceModel;using System.ServiceModel.Web;using System.Text;namespace WcfService1{// メモ: [リファクター] メニューの [名前の変更] コマンドを使用すると、コード、svc、および config ファイルで同時にクラス名 "Service1" を変更できます。// 注意: このサービスをテストするために WCF テスト クライアントを起動するには、ソリューション エクスプローラーでService1.svcまたはService1.svc.csを選択し、デバッグを開始してください。public class Service1 : IService1{public string GetData(int value){return string.Format("You entered: {0}", value);}public CompositeType GetDataUsingDataContract(CompositeType composite){if (composite == null){throw new ArgumentNullException("composite");}if (composite.BoolValue){composite.StringValue += "Suffix";}return composite;}public string NewProc(string name){return "はじめまして" + name + "様";}}} - それでは動作確認をしてみましょう。Service1.svc.csを開いてからデバッグを実行しましょう。以下の画面が表示されます。
- クライアントのデモ環境です。今回追加した「NewProc」をダブルクリックします。
- 要求のnameの値に“テストクライアント”を設定します。起動ボタンを押下します。
- OKを押下します。
- 応答の値に正しく値が設定されていることを確認できました。
- 次に、IService1.csを開いてデバッグを実行します。以下の画面が表示されますので、Service1.svcのリンクをクリックします。
- http://localhost:54047/Service1.svc?wsdlの箇所はメモ帳などに保存しておきましょう。次項のサービスへのアクセス方法で使用します。
作成したサービスへのアクセス
- クライアントとなる新しいプロジェクトを作成します。
- プロジェクトが作成できたら、ソリューションエクスプローラーに表示されている参照を右クリックで、サービス参照の追加を行います。
追加するURLは保存しておいたhttp://localhost:54047/Service1.svc?wsdlです。
- 次に簡単なWindows Formsアプリを作成します。
テキストボックスに値を設定し、ボタンを押下するとラベルに応答値が出力される仕組みです。今回は”テストクライアント”を入力値とします。
1234567891011121314151617181920212223242526272829using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApp27{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();string returnString;returnString = client.NewProc(textBox1.Text);label1.Text = returnString;}}} - ラベルに値が出力されることを確認できました。
- PG
- 簡単にWCFの利用ができるのですね!まずは試しに自分でもコーディングしてみます。
- PL
- そうですね。基本的な概念を理解することはとても大切なことです。それと同時にWCFを理解する一番の近道は、自分でコーディングしてみることです。
アプリケーションの通信に利用できるWCF
統合通信フレームワークと聞いて、難しい印象を持たれた方も多いかと思います。Windows Formsでクライアント画面を実装して、通信にはHTTPプロトコルを利用するアプリケーションを開発することは、多くの場面で求められるスキルではないでしょうか。勉強の際まずは、ここで解説したような簡単なWCFの作成方法を理解することから始めることをおすすめします。
Search キーワード検索
Popular 人気の記事
-
.NET Framework 3.5をWindows10にインストールする方法
2019年10月24日 -
EdgeとChromeはどう違う?それぞれのスペック7つを比較解説!
2020年09月28日 -
【VB.NET入門】DataGridViewの使い方まとめ
2019年12月22日 -
VB.NETをおすすめする3つの理由とは?VBAとの違いや勉強方法を解説
2019年12月21日 -
Windows10のテキストエディタおすすめ20選!選ぶポイント3つ
2020年04月28日
reccomended おすすめ記事
-
C#のusingステートメントでリソースの解放【Disposeとの違いとは】
2020年03月17日 -
【SQL Serverログの操作】トランザクションログの使用量を確認する方法
2020年03月16日 -
【.NETが統合】.NET 5の概要と今後のリリース予定
2020年03月05日
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
ソフトを用いた3DCGアート/東京都千代田区/【WEB面談可】/テレワーク
月給50万~50万円東京都千代田区(秋葉原駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅)