--- lang: ja-jp breaks: true --- # `.NET Core`/`.NET Framework` アプリ間のプロセス間通信 2021-10-27 ## 目的 `.NET Core`に対応していないライブラリを使用する部分を `.NET Framework`アプリとして実装し、それらアプリ間でプロセス間通信を実施することで順次`.NET Core`に対応していく。 その為、`.NET Core` と `.NET Framework` の両方に対応したシンプルなプロトコルが求められる。 :::info gRPCに関しては`.NET Framework`が一部のインターフェイスにしか対応していない。また、ローカルホスト内とはいえ、ソケット通信を行う為一部のセキュリティーソフトが警告を発する可能性があるらしい。さらに言うと、gRPCはインターフェイスが使いにくい。。。 > gRPCを廃止したい #107 > https://github.com/malaybaku/VMagicMirror/issues/107 ::: ## 概要 `.NET Core`アプリ、`.NET Framework`アプリがそれぞれPipeサーバ/Pipeクライアントとなりお互いに非同期通信を行う。 ```plantuml @startuml skinparam sequenceArrowThickness 2 skinparam roundcorner 20 actor 利用者 participant ".NET Core\nアプリ" as A 利用者 -> A: アプリ\n起動 activate A A -> "Pipeサーバ\nスレッド" as A_2 ** : Pipeサーバ\n起動 A --> A: Pipeサーバ\n起動待ち activate A_2 A_2 --> A_2: Pipe接続\n待ち A -> "アプリ監視\nスレッド" as A_1 ** : スレッド\n起動 activate A_1 participant ".NET Framework\nアプリ" as B A_1 -> B: アプリ起動 activate B A_1 --> A_1: アプリ\n起動待ち A_1 --> A_1: アプリ\n終了監視 B -> "呼び出し元\nプロセス\n監視スレッド" as B_1 ** : スレッド\n起動 activate B_1 B -> "Pipeサーバ\nスレッド" as B_2 ** : スレッド\n起動 B --> B: Pipeサーバ\n起動待ち activate B_2 B_2 --> B_2: Pipe接続\n待ち B_1 --> B_1: 呼び出し元\nプロセス\n終了監視 B --> A_2: 起動完了\n通知 A --> B_2: 処理の実行 A --> B_2: 処理の実行 A --> B_2: 処理の実行 A --> B_2: アプリ終了\n要求 A --> A: アプリ終了\n待ち B_2 -> B: スレッド\n終了 destroy B_2 B_1 -> B: スレッド\n終了 destroy B_1 B -> A_1: アプリ\n終了 destroy B A_1 -> A: スレッド\n終了 destroy A_1 A_2 -> A: スレッド\n終了 destroy A_2 利用者 -> A: アプリ\n終了 destroy A @enduml ``` ## 名前付きパイプ System.IO.Pipes > リモート処理 > https://docs.microsoft.com/ja-jp/dotnet/core/porting/net-framework-tech-unavailable#remoting > .NET のパイプ操作 > https://docs.microsoft.com/ja-jp/dotnet/standard/io/pipe-operations ###### tags: `.NET Core` `.NET Framework` `プロセス間通信` `System.IO.Pipes` `PlantUML`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up