在WCF中,我究竟需要在服务器中获取两个客户端,例如连接到各种聊天室的两个人,以便能够将文件传输到另一个而不会将数据传递到服务器本身?
有没有办法通过服务器将每个回调通道相互传递给彼此,以便他们可以相互调用可能包含文件传输方法的回调方法?
我对此有点模糊。同样,我不希望数据必须转移到服务器,如果我可以避免它,而是直接在两个客户端之间。
编辑:
我已经逻辑地想出了我打算如何实现这一目标。我有两个客户端连接到聊天服务器。想要发送文件的客户端使用不同的合同创建完全独立的ServiceHost,并在服务器上执行要求将文件发送给特定用户的方法。然后,服务器通过询问目标客户端是否愿意接受来进行响应。传递的信息是地址,绑定和合同,或者至少是地址,其他所有内容都是假定的,因为它们都保存在同一个程序集中。
当客户端接受时,他使用从聊天服务器提供的信息连接到新服务。这将在两个客户端之间创建一个全新的连接,并从等式中删除聊天服务器。
我现在遇到的问题是,我无法自动获取最初发出文件传输请求的客户端的IP地址,因此我无法将其沿着线传递给其他客户端以连接到他的服务。我已尝试使用OperationContext消息属性获取IP地址并提取IP,但它没有提供我需要的WAN IP地址。
其他聊天服务如何实现这一目标?他们是通过诸如whatismyip地址或他们自己的地址提出请求来首先提取客户的IP地址吗?
如果我无法找出IP地址,那么我将不得不让用户手动输入他自己的IP地址,这看起来真的很笨拙。
有什么想法吗?