1

バックグラウンドで実行され、ウィンドウが起動するとすぐに起動するアプリケーションを構築する必要があります。2 番目のアプリケーションが必要です。これは Windows フォームである必要があり、ステータスの表示とメイン アプリケーションへの制御を提供します。

最初は Windows Service を主アプリ、Windows Forms を副アプリとしてやり始めたのですが、重大な問題が見つかりました。それらが互いにどのように通信するか。そのため、TCP を最初に考えましたが、ファイアウォールによってブロックされました。

WCFを調べて見つけました。どうやら WCF を使用すると、あまり頭を悩ませることなく 2 つのアプリケーション間で通信できますが、WCF を使用したことがないため、2 つの心配があります。

WCF にファイアウォールの問題がありますか? Windows サービスを使用する <=> WCF <=> Windows フォームは良いアプローチです。つまり、これは悪い習慣ではありませんか?

助けてください 私はとても迷っています。

4

2 に答える 2

4

WCF を使用して Windows サービスとフロントエンド アプリケーションの間で通信することは、まったく問題のないアプローチです。私は過去にこのアプローチを使用して成功しました。

WCF は基本的に、トランスポート メカニズムに関する抽象化レイヤーです。どのデータを交換する必要があるかを定義します。WCF は、データの交換方法を処理します。WCF の本当に優れた点は、データ交換を形式化されたメソッド呼び出しに変換できることです。あなたの観点からは、Windows サービスからアプリケーションにステータス メッセージを送信することは、メソッド呼び出しを行うのと同じくらい簡単です。バックグラウンドで、WCF はメッセージをシリアル化し、リモート エンドポイントに送信し、交換が完了するとユーザーに制御を返します。

WCF は、同じマシン上またはマシン間で適切に機能します。同じマシンを使用している場合、NetNamedPipeBindingを使用する可能性があります。マシン間の通信には、 NetTcpBindingなど、さまざまなオプションから選択できます。このフローチャートは、バインディングを選択する際に役立ちます。

WCF バインディング選択のフローチャート.

完全な開示のために、私は次の 3 つの理由で WCF に不満を感じています。

  1. WCF に関連する急な学習曲線。
  2. Visual Studio IDE とのシームレスな統合の欠如。
  3. パフォーマンス。

学習曲線は 1 回限りのコストですが、かなりの額になる可能性があります。約 3 年前に最後に WCF を使用したとき、Visual Studio は使いやすくなく、学習曲線を悪化させるだけでした。今日、Visual Studio はそれを非常に簡単にするかもしれません。よくわかりません。しかし、私の本当のフラストレーションはパフォーマンスです。私の経験では、WCF は、メソッドを初めて呼び出したときは遅く、その後はほぼ瞬時に実行されます。私のソフトウェアのユーザーはパフォーマンスについて何度もコメントしたので、現在、問題を軽減する TCP ベースのソリューションを使用しています。

特定の問題に関しては、サービスとアプリケーションが同じシステムで実行されている場合、ファイアウォールは問題になりません。localhost アドレス (127.0.0.1) を使用していることを確認してください。それらが異なるシステム上にある場合、WCF は、http バインディングの 1 つを使用してファイアウォールの問題を軽減するのに役立ちます。

これが役立つことを願っています。

于 2013-07-03T20:41:02.367 に答える