Skip to content
nishi_74322014 edited this page Sep 1, 2026 · 1 revision

WCF

概要

WCF (Windows Communication Foundation)

  • Windows プラットフォーム(.NET)上でのデファクトの通信サブシステム。

  • Address / Binding / Contract の三要素(ABC)によって定義される
    (この ABC を部分的に切り替え可能にするように設計されている)。

  • WCF には様々な WS-* 標準が実装されたが、コケて WS-I が活動を停止して以降、下火に。
    (WS-Addressing、WS-ReliableMessaging、WS-Security, etc. 普及せず時代はRESTへ。)

補足(ABC の中身): 三要素は次を指す。設定ファイルの構造もこのまま対応する。

要素 意味
Address どこにあるか(エンドポイント URI) http://host/Svc.svc / net.tcp://host/Svc
Binding どう話すか(プロトコル・エンコーディング・セキュリティ) basicHttpBinding / netTcpBinding
Contract 何ができるか(インターフェイス定義) [ServiceContract] を付けた interface

**「同じ Contract のまま Binding だけ差し替えれば、
HTTP でも TCP でも MSMQ でも動く」**というのが WCF の設計思想である。
抽象化としては非常に良く出来ていた。

詳細

設定

移行メモ(補足): 「地獄じゃない」という記事タイトルが示すとおり、
WCF は設定ファイル(web.config / app.config)の複雑さ
敬遠された最大の理由の一つである。
.NET Framework 4 の「簡略化された構成」で既定値が使えるようになり
改善されたが、それでも REST + JSON
手軽さには及ばなかった。

種類

Binding には、

  • SOAP の Web サービス
  • JSON-RPC の Web サービス
  • .NET 専用の TCP 通信
  • .NET 専用のプロセス間通信
  • MSMQ

などがある。

Binding 用途
basicHttpBinding SOAP 1.1。相互運用性が最も高い
wsHttpBinding SOAP 1.2 + WS-*。セキュリティ・信頼性
netTcpBinding .NET 同士専用。バイナリで高速
netNamedPipeBinding 同一マシン内のプロセス間通信
netMsmqBinding MSMQ 経由。非同期・キューイング
webHttpBinding REST 風(WCF REST)

差替

開発後、ABC の中核である B(Binding)の差替えも可能だが、
以下のケースでは差替えはサポートされない。

  • ホスト・プロセスが異なるケース

  • プログラミング・モデルが異なるケース

    • MSMQ の Binding から他の Binding
    • 単方向の Binding から双方向の Binding
      この双方向はコールバックを伴う非同期双方向

補足(最新化:WCF は .NET Core に移植されなかった): 本ページの
「下火に」という評価は、その後サーバー側の打ち切りという形で確定した。

状況
.NET Framework 版 WCF 現在も動作するが、新機能の追加は無い(保守のみ)
クライアント側 System.ServiceModel.*(旧 WCF Client)として .NET Core 以降でも利用可。既存の SOAP サービスを呼べる
サーバー側 .NET Core 以降に移植されなかった。Microsoft は移植しないと明言した
代替(サーバー) コミュニティ製の CoreWCF(.NET Foundation プロジェクト)が受け皿になっている

現在の推奨は次の通り。

  • 新規gRPCnetTcpBinding 的な高速 RPC が欲しい場合)
    または REST + JSON(相互運用重視)
  • 既存 WCF の移行CoreWCF で最小の変更で .NET へ持っていく

なお gRPC は「Contract(.proto)から
クライアント・サーバーのコードを生成し、バイナリで高速に話す」という点で、
WCF の netTcpBinding が担っていた役割の後継と位置づけられる。

参考

関連

WS-IとWS-*標準


Tags: 移行, 通信技術, .NET開発

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally