WCF を使用して Windows サービスとフロントエンド アプリケーションの間で通信することは、まったく問題のないアプローチです。私は過去にこのアプローチを使用して成功しました。
WCF は基本的に、トランスポート メカニズムに関する抽象化レイヤーです。どのデータを交換する必要があるかを定義します。WCF は、データの交換方法を処理します。WCF の本当に優れた点は、データ交換を形式化されたメソッド呼び出しに変換できることです。あなたの観点からは、Windows サービスからアプリケーションにステータス メッセージを送信することは、メソッド呼び出しを行うのと同じくらい簡単です。バックグラウンドで、WCF はメッセージをシリアル化し、リモート エンドポイントに送信し、交換が完了するとユーザーに制御を返します。
WCF は、同じマシン上またはマシン間で適切に機能します。同じマシンを使用している場合、NetNamedPipeBindingを使用する可能性があります。マシン間の通信には、 NetTcpBindingなど、さまざまなオプションから選択できます。このフローチャートは、バインディングを選択する際に役立ちます。
.
完全な開示のために、私は次の 3 つの理由で WCF に不満を感じています。
- WCF に関連する急な学習曲線。
- Visual Studio IDE とのシームレスな統合の欠如。
- パフォーマンス。
学習曲線は 1 回限りのコストですが、かなりの額になる可能性があります。約 3 年前に最後に WCF を使用したとき、Visual Studio は使いやすくなく、学習曲線を悪化させるだけでした。今日、Visual Studio はそれを非常に簡単にするかもしれません。よくわかりません。しかし、私の本当のフラストレーションはパフォーマンスです。私の経験では、WCF は、メソッドを初めて呼び出したときは遅く、その後はほぼ瞬時に実行されます。私のソフトウェアのユーザーはパフォーマンスについて何度もコメントしたので、現在、問題を軽減する TCP ベースのソリューションを使用しています。
特定の問題に関しては、サービスとアプリケーションが同じシステムで実行されている場合、ファイアウォールは問題になりません。localhost アドレス (127.0.0.1) を使用していることを確認してください。それらが異なるシステム上にある場合、WCF は、http バインディングの 1 つを使用してファイアウォールの問題を軽減するのに役立ちます。
これが役立つことを願っています。