WCF では、2 人のユーザーがある種のチャット ルームに接続されているようなサーバーで 2 つのクライアントを取得し、そのデータがサーバー自体を通過することなく相互にファイルを転送できるようにするには、どのようにすればよいでしょうか?
ファイル転送メソッドを含む可能性のあるそれぞれのコールバック メソッドを相互に呼び出すことができるように、サーバーがそれぞれのコールバック チャネルを相互に渡す方法はありますか?
私はこれについて少しあいまいです。繰り返しますが、回避できるのであれば、データをサーバーに転送する必要はなく、2 つのクライアント間で直接転送する必要があります。
編集:
私はこれをどのように達成しようとしているのかを論理的に理解しました。2 つのクライアントをチャット サーバーに接続しています。ファイルを送信したいクライアントは、別のコントラクトを使用してまったく別の ServiceHost を作成し、特定のユーザーにファイルを送信するように要求するメソッドをサーバー上で実行します。次に、サーバーは、ターゲット クライアントに受け入れたいかどうかを尋ねることで応答します。渡される情報は、アドレス、バインディング、コントラクト、または少なくともアドレスであり、それ以外はすべて同じアセンブリに保持されているため、すべてが想定されます。
クライアントが受け入れると、チャット サーバーから提供された情報を使用して新しいサービスに接続します。これにより、2 つのクライアント間にまったく新しい接続が作成され、チャット サーバーが方程式から除外されます。
私が今抱えている問題は、最初にファイル転送要求を行っているクライアントの IP アドレスを自動的に取得できないため、他のクライアントにそれを渡して彼のサービスに接続できないことです。OperationContext メッセージ プロパティを使用して IP アドレスを取得し、IP を抽出するために説明されている方法を試しましたが、必要な WAN IP アドレスが提供されません。
他のチャット サービスはどのようにこれを実現していますか? 最初にクライアントの IP アドレスをプルするために、whatismyip アドレスや独自のサイトなどのサイトを介して要求を行いますか?
IP アドレスがわからない場合は、ユーザーに自分の IP アドレスを手動で入力してもらう必要がありますが、これは非常に面倒です。
何か案は?