1. ホーム
  2. c#

[解決済み] Windows 8のMetroアプリは、同じマシン上のバックエンドデスクトップアプリとどのように通信することができますか?

2022-08-28 09:31:56

質問

Windows 8 の新しい Metro スタイルのアプリケーションを使用して UI フロントエンドを構築し、同じローカル マシンのデスクトップで実行されている .NET アプリケーション (例: Windows サービス アプリ) と通信させたいと考えています。

メトロ アプリとデスクトップ アプリの間で利用可能なプロセス間通信の形態は何ですか?

Visual Studio チームの Pavel Minaev が、コメントでいくつかの初期情報を提供してくれたことに感謝します (引用)。

Martyn Lovell によると、そのための意図的なメカニズムはありません。 また、そのために使用できるものは意図的に制限されています。 たとえば、名前付きパイプは存在しませんし、メモリ マップされたファイルも存在しません。 ソケット(サーバソケットを含む)はありますが、接続先が ローカルホストに接続する場合、同じアプリにしか接続できない。通常の 共有フォルダ(ドキュメント、ピクチャなど)にある通常のファイルを使用することができます。 しかし、これはポーリングが必要で、ユーザーから見えるかなり粗雑なハックです。 ユーザーから見えるようになります。-- Pavel Minaev コメント この問題

通常のアプローチに失敗したので、何らかの通信を行うために Web サービスを使用するか、データベースに読み書きすることを考えていましたが、プロセスが同じマシンで実行されている場合、どちらもやりすぎのように思われます。

私がここで試みていることは、意味があることなのでしょうか。デスクトップで実行されている既存のサービスのフロントエンド UI として、メトロ アプリの必要性を理解することができます。あるいは、デスクトップ上で実行されるフロントエンド UI (つまり、非メトロ アプリ) に WPF を使用する方がよいのでしょうか。

どのように解決するのですか?

私は今、既存のプロジェクトをWin8に移植しています。これは、NamedPipes WCF を介して相互に通信する Windows サービスとトレイ アプリケーションで構成されています。すでにご存知のように、Metro は名前付きパイプをサポートしていません。私は、全二重接続のためにTcpBindingを使うことにしました。

この投稿 には、どのような機能がサポートされているかが書かれています。

Metroクライアントが利用できるWCFサーバーのサンプルは以下の通りです。 ここで .

また、Metroでは同期型のWCFを使用できないことも覚えておいてください。その場合は タスク -ベースのラッパーを使用する必要があります。

質問ありがとうございました。私にとっては良い出発点でした :)