SlideShare a Scribd company logo
WCFのパイプ通信を
.NET 5に向けて
gRPCへ置き換える話
自己紹介
 ID:suusanex( connpass・Twitter・GitHub共通)
 名前:須藤圭太
 サイエンスパーク株式会社という独立系ソフトウェアベンダーに所属
 4年ほど受託開発で、上流から下流まで全部を回す
 ここ6年ほどは、自社製品開発を担当
 Windowsアプリ開発のネタが多い
 勉強会もやってます。最近は開けていませんがそのうち再開します
 https://yokohama-win-dev-tips.connpass.com/
 https://sciencepark.connpass.com
WCFのパイプ通信とは何の話?
 Windowsアプリ開発で、ピンポイントで便利だった実装方法
 Windowsサービスとデスクトップアプリで高速な通信をしたい
 しかも双方向通信したい
 そのためのパイプ通信を、.NET Frameworkでは
WCFで簡単に実装できた
 WCFらしく、クラスにメソッドを定義して
関数呼び出しの感覚で使える
しかし、WCFは.NET 5で引退
 .NET 5ではWCFサーバーを実装出来ないし、今後もサポート予定なし
 MSも丁寧なドキュメントでgRPCへの移行を促している
 ASP.NET Core gRPC に WCF を移行する理由 Microsoft Docs
https://docs.microsoft.com/ja-jp/aspnet/core/grpc/why-migrate-wcf-to-dotnet-
grpc?view=aspnetcore-5.0
gRPCというやつに乗り換えよう!
 気になるポイントがいくつかある
 パイプ通信できる?
 関数呼び出しの感覚で使える?
 双方向通信できる?
 .NET Frameworkのクライアントから呼べる?
 こういう疑問に答えつつ、軽くだけ実装方法を紹介します
パイプ通信できる?
 できない
 しかし、localhostでのTCP/IP通信になるので、十分に速いはず
 通信セッション開始・通信1回・通信セッション終了までを1セットとして計測
 注意:開発環境での雑な実測結果
 遜色なし
WCF(Pipe) gRPC
初回の通信 0.1s 0.2s
2回目の通信 0.02s 0.005s
10回連続通信 0.2s 0.05s
関数呼び出しの感覚で使える?
 近いことはできる
 一方的に送るだけなので、戻り値という考え方は無い
 リクエストとレスポンスをペアで定義すれば良い
 使用感はAsyncのメソッドと同じ
双方向通信できる?
 できる
 Bidirectional streaming RPC
 最初のSubscribeで2つのストリームを作る
 サーバーとクライアントがそれぞれストリームを読む
.NET Frameworkのクライアントから呼べ
る?
 できる
 同じ定義を共有することで、.NET 5のクライアントとも共存可能
いけそう
 気になる点は問題なかったので、移行して行けそう
 移行していく上での実装方法を軽く紹介します
少し詳しい実装方法 コマンドの定義
 WCFのコントラクトの代わりに、protoファイルで定義を書く
 色々書き方があるが、下記のようにするとWCFと同じイメージで使える
message UserSesionToServiceRequest {
oneof action {
RegisterUserSessionRequest RegisterUserSession = 1;
GetDataRequestParam GetDataRequest = 2;
SendDataResponseParam SendDataResponse = 3;
}
}
message RegisterUserSessionRequest{
int32 sessionId = 1;
}
メソッド(イメージ)
クラス(イメージ)
メソッドのパラメータ(イメージ)
少し詳しい実装方法 送信側
 ProtoファイルからC#のクラスを生成してくれる
 開いたストリームにクラスをWriteすると送信になる
await m_DuplexStream.RequestStream.WriteAsync(new UserSesionToServiceRequest
{
RegisterUserSession = new RegisterUserSessionRequest
{
SessionId = Process.GetCurrentProcess().SessionId
}
});
クラス用のストリーム
メソッド(イメージ)
クラス(イメージ)
メソッドのパラメータ
(イメージ)
少し詳しい実装方法 受信側
 ProtoファイルからC#のクラスを生成してくれる
 開いたStreamをReadすると、受信したら制御が戻る
await foreach (var req in subscribe.RequestStream.ReadAllAsync(cancellationToken))
{
switch (req.ActionCase)
{
case UserSesionToServiceRequest.ActionOneofCase.RegisterUserSession:
{
var val = req.RegisterUserSession;
クラス用のストリーム
メソッド(イメージ)
クラス(イメージ)
メソッドのパラメータ
(イメージ)
まとめ
 全く同じではないが、WCFに近いイメージでプロセス間通信を実現できる
 同期でレスポンスを待つクラスを作れば、影響軽微で差し替えもできそう
 WCFを使っている人は、 .NET 5に向けて乗り換えを模索していきましょう

More Related Content

PPTX
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
PDF
サーバーレスの常識を覆す Azure Durable Functionsを使い倒す
PDF
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
PDF
祝GA!! Azure Communication Services のメール送信機能について
PDF
大規模オンプレミス環境はGitOpsの夢を見るか(CI/CD Conference 2021 by CloudNative Days 発表資料)
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
PDF
はじめようRGB-Dセンシングと画像処理
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
サーバーレスの常識を覆す Azure Durable Functionsを使い倒す
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
祝GA!! Azure Communication Services のメール送信機能について
大規模オンプレミス環境はGitOpsの夢を見るか(CI/CD Conference 2021 by CloudNative Days 発表資料)
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
はじめようRGB-Dセンシングと画像処理
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ

What's hot (20)

PDF
Dockerを支える技術
PDF
Pythonによる黒魔術入門
PDF
ミッション : メガクラウドを安全にアップデートせよ!
PDF
PHPでWebSocketを実装してみてわかったこと
PDF
CPUから見たG1GC
PPTX
自己組織的なScrumチームの目指し方
PDF
UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた
PDF
[db analytics showcase Sapporo 2018] B13 Cloud Spanner の裏側〜解析からベストプラクティスへ〜
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
Metaspace
PDF
バックアップ時の問題から学んだDBエンジニアに必要なスキルとは
PDF
Well-Architectedな組織を
実現するためのチャレンジ - なぜ、CA W-Aを作ろうと思ったのか - #jawsdays 2019
PPTX
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
PDF
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
PPTX
[VP of Engineering Meetup] エンジニアのパフォーマンスを最大化させる組織活性化施策とは
PDF
開発者の生産性向上を妨げる障壁と サイボウズの生産性向上チームの取り組み
PDF
Cloud Foundryで学ぶ、PaaSのしくみ講座
PDF
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PDF
CSI Driverを開発し自社プライベートクラウドにより適した安全なKubernetes Secrets管理を実現した話
PPTX
UTアンチパターン
Dockerを支える技術
Pythonによる黒魔術入門
ミッション : メガクラウドを安全にアップデートせよ!
PHPでWebSocketを実装してみてわかったこと
CPUから見たG1GC
自己組織的なScrumチームの目指し方
UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた
[db analytics showcase Sapporo 2018] B13 Cloud Spanner の裏側〜解析からベストプラクティスへ〜
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
Metaspace
バックアップ時の問題から学んだDBエンジニアに必要なスキルとは
Well-Architectedな組織を
実現するためのチャレンジ - なぜ、CA W-Aを作ろうと思ったのか - #jawsdays 2019
Azure DevOps ハンズオン Vo.3 ~Delivery Plans を用いたプロジェクトのスケジュール管理~
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
[VP of Engineering Meetup] エンジニアのパフォーマンスを最大化させる組織活性化施策とは
開発者の生産性向上を妨げる障壁と サイボウズの生産性向上チームの取り組み
Cloud Foundryで学ぶ、PaaSのしくみ講座
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
CSI Driverを開発し自社プライベートクラウドにより適した安全なKubernetes Secrets管理を実現した話
UTアンチパターン
Ad

Similar to WCFのパイプ通信を .NET 5に向けてgRPCへ置き換える話 (20)

PPTX
Windowsサービスも.NET Coreで作ろう
PPTX
Web開発の 今までとこれから
PDF
C#の強み、或いは何故PHPから乗り換えるのか
PDF
NSA NB委員会セミナー「モバイルアプリ開発業務におけるmonacaの活用」
PDF
まだFTPで消耗してるの? Wordmoveではじめる 異次元のデータ転送
PDF
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
PPTX
自社製品のバージョン管理 進化と問題解決の道のり
PPTX
〜laravel で学ぶ MVC
PDF
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
PPTX
Developers Containers for Basis, for team development.
PPTX
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
PDF
IPv6 アプリケーション開発入門
PDF
PyCon JP 2014 plone terada
PDF
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
PDF
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
PPTX
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
PDF
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
PPT
ネットワーク分散型フレームワークConView
PPTX
【デブサミ関西2014】Web技術で作るエンタープライズアプリ
PDF
組み込みLinuxでのGolangのススメ(Go con版)
Windowsサービスも.NET Coreで作ろう
Web開発の 今までとこれから
C#の強み、或いは何故PHPから乗り換えるのか
NSA NB委員会セミナー「モバイルアプリ開発業務におけるmonacaの活用」
まだFTPで消耗してるの? Wordmoveではじめる 異次元のデータ転送
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
自社製品のバージョン管理 進化と問題解決の道のり
〜laravel で学ぶ MVC
[REV UP] あなたならどう使う?最新Azureレシピ for LINE Platform
Developers Containers for Basis, for team development.
C++CLIで、ネイティブCの保守開発に.NETを使って楽をしよう
IPv6 アプリケーション開発入門
PyCon JP 2014 plone terada
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
WPFの画面をWebブラウザのように拡大・縮小に追従させる方法(オートスクロールバー付き)
【BS11】毎年訪れる .NET のメジャーバージョンアップに備えるために取り組めること
ネットワーク分散型フレームワークConView
【デブサミ関西2014】Web技術で作るエンタープライズアプリ
組み込みLinuxでのGolangのススメ(Go con版)
Ad

WCFのパイプ通信を .NET 5に向けてgRPCへ置き換える話