1

在 WCF 中,我究竟需要如何让服务器中的两个客户端(例如连接到某种聊天室的两个人)能够在数据不通过服务器本身的情况下相互传输文件?

有没有办法通过服务器将彼此的回调通道传递给彼此,以便他们可以互相调用可能包含文件传输方法的各自的回调方法?

我对此有点模糊。同样,如果可以避免,我不希望数据必须传输到服务器,而是直接在两个客户端之间传输。

编辑:

我已经从逻辑上弄清楚了我打算如何做到这一点。我有两个客户端连接到聊天服务器。想要发送文件的客户端使用不同的合约创建一个完全独立的 ServiceHost,并在服务器上执行一个方法,要求将文件发送给特定用户。然后服务器通过询问目标客户端是否愿意接受来响应。传递的信息是地址、绑定和合同,或者至少是地址和其他所有内容都是假设的,因为它们都保存在同一个程序集中。

当客户端接受时,他使用聊天服务器提供的信息连接到新服务。这在两个客户端之间创建了一个全新的连接,并从等式中删除了聊天服务器。

我现在遇到的问题是,我无法自动获取最初发出文件传输请求的客户端的 IP 地址,因此我无法将其传递给其他客户端以连接到他的服务。我已经尝试了描述的方法来使用 OperationContext 消息属性获取 IP 地址并提取 IP,但它没有提供我需要的 WAN IP 地址。

其他聊天服务如何做到这一点?他们是通过whatismyip地址或他们自己的网站等网站提出请求,首先拉取客户端的IP地址吗?

如果我无法确定 IP 地址,那么我将不得不让用户手动输入他自己的 IP 地址,这看起来很笨拙。

有任何想法吗?

4

0 回答 0