2

WCF を使用して、クライアントのポートを開かずに双方向通信を有効にしたいと考えています。

通信するためにポートを開く必要のない P2P アプリケーション (teamviewer/logmein に類似) のようなものを開発しています。

クライアントでポートを開く必要なく、HTTP/HTTPS を介して双方向通信を行うにはどうすればよいですか?

注:ポート80はサーバーで開くことができます...それについては問題ありません。

ありがとう

4

2 に答える 2

6

あなたが言及したシステムは次のように機能します。彼らは最初に、クライアント A とクライアント B がさまざまなトポロジを介して直接通信できるようにしようとします。基本的には、いずれかが着信接続を許可する必要があります。したがって、クライアント A はサーバーと対話し、クライアント B にメッセージを送信します。その後、クライアント A は、応答として自分宛てのメッセージを取得します。クライアント B はメッセージをサーバーに送信し、クライアント A からのメッセージをサーバーから取得します。この方法では、クライアント A と B の両方が常に接続を開始し、着信トラフィック用にポートを開く必要はありません。

私があなたの場合を正しく理解していれば、あなたは常に真ん中の男が欲しいでしょう. これを行うには、関連するすべてのメソッドを提供する WCF サービスを作成する必要があります。たとえば、次のようなもの

  • void SendMessageToClient(Guid senderId, Guid recipientId, Message msg)
  • Message[] GetMessages(ガイド受信者 ID)

次に、これらのメソッドにそれぞれ Message オブジェクトを保存して、どこか (データベースやキューなど) から取得させます。

次に、HTTP バインディングを使用して WCF サービスに接続するクライアントを作成し、サーバーでメソッドを呼び出して結果を処理します。

ご理解いただければ幸いです

  • a)これはあまり効率的なコミュニケーション方法ではありません。
  • b)非常に多くの関係者が関係しており、通信は 3 つの異なるプロセスで非同期に行われているため、テスト、デバッグ、および何が起こっているのかを理解するのが難しいこと。
  • c)通信の上に追加のレイヤーを追加するため、インフラストラクチャ ビットを処理するとき、および実際のプロトコル clientA と clientB が話すときに、頭の中で (できればコードで) 明確にしておく必要があります。 Message オブジェクトで相互に。

疑似 (コード) の例

この例では、メッセージ オブジェクトは単なる文字列であり、唯一のコマンドは "whattimeisit" であり、応答は文字列形式の現地時間であると想定しています。

  • ClientA は server.SendMessageToClient("clientA", "clientB", "whattimeisit"); を呼び出します。
  • サーバーはこのメッセージを ID 1 のデータベースに保存します
  • ClientB がサーバー GetMessages("clientB") を呼び出します。
  • サーバーは ID 1 のメッセージを取得します
  • ClientB は応答として「whattimeisit」を受け取ります
  • ClientB は server.SendMessageToClient("clientB", "clientA", "19:50:12"); を呼び出します。
  • サーバーはこのメッセージを ID 2 のデータベースに保存します
  • ClientA がサーバー GetMessages("clientA") を呼び出します。
  • サーバーは ID 2 のメッセージを取得します
  • ClientA は応答として「19:50:12」を受け取ります
于 2009-08-23T17:52:16.973 に答える
1

私は上手く理解できていない気がします。デジタル ファイアウォールの目的は、(一般に) 通信チャネルを制御することです。ファイアウォールをバイパスして通信したい場合は、2 つの選択肢があります。

  1. ファイアウォールが通過できるものにメッセージを隠す
  2. ファイアウォールが制御しない通信チャネルを使用する

以前の場合:

メッセージを渡したプロキシにメッセージを渡すことができます (電子メールは良い例ですが、正確に応答するわけではありません)。

後者の場合:

他のトランスポート層がそれらを運ぶファイルにメッセージを置くことができます

于 2009-08-23T09:51:58.117 に答える