我期待使用C#和WCF制作一种聊天应用程序,但在开始之前我想清除一些东西,这样我就不会被误导。 :)
应用程序应该能够生成事件(发送消息)和监听事件(接收消息),因此,如果我理解正确,应用程序应该同时是客户端和服务器吗?
我应该使用什么装订?如果我理解正确,basicWttp绑定很难配置,并在WCF应用程序需要连接到非WCF应用程序时使用?虽然连接两个WCF应用程序最好使用NetTcpBinding?
考虑到这些应用程序在不同的计算机上运行,它们将如何找到彼此?应该有一个中央服务器,应用程序将首先连接到该中央服务器,说“我是用户123,我的IP就是那个,我可以自由聊天”并在那里查找其他用户IP地址?或者还有其他一些方法让应用程序在没有中央服务器的情况下找到对方吗?
也许你可以指导我这个主题的一些例子或教程? (尝试谷歌搜索,没有运气)。
谢谢! :)
答案 0 :(得分:3)
如果您的同伴(可以作为客户端和服务器运行的计算机)将落后于NAT /防火墙,那么您将非常非常难以使用WCF构建聊天应用程序。如果对等体都在同一网络上,则WCF是可行的。
要使用WCF从头开始编写聊天应用程序,您将重新发明轮子。为什么不使用为XMPP等目的精确设计的现有协议。 .Net有XMPP libraries个。您将需要一个中央服务器,但如果您使用XMPP,您可以捎带到许多现有的免费服务器之一。
答案 1 :(得分:0)
您可以使用netPeerTcpBinding。
另见:
http://blogs.interknowlogy.com/2009/08/05/building-a-really-simple-wcf-p2p-application/
http://msdn.microsoft.com/en-us/library/bb690929(v=vs.90).aspx
http://www.codeproject.com/KB/WCF/Chat_application_using_WC.aspx
答案 2 :(得分:0)
你的问题没有正确和错误的答案 - 这完全取决于你的要求。然后,您可以根据自己的需求选择最佳架构,然后选择最适合该架构的技术。
有两件事要考虑 - 用户如何找人聊天,然后一旦他们找到某人 - 应用程序如何相互连接。
要让用户找到对方,您需要连接到中央服务器,然后显示所有已连接用户的列表,或者用户需要输入他们要聊天的人的IP地址。请注意,在第二种情况下,某些防火墙会阻止传入连接,因此在某些情况下这可能不可行。
接下来,一旦找到了想要聊天的人,就需要确定消息是否会直接路由到其他用户,或者是否要继续通过中央服务器。
如果您选择通过中央服务器,那么您的应用程序将作为客户端运行,因此将毫无问题地通过防火墙。但是,如果直接连接到其他用户,则应用程序的两个副本将充当客户端和服务器(P2P拓扑),因此防火墙可能是个问题。话虽如此,您可以将其中一个应用程序指定为服务器,另一个应用程序充当客户端,在这种情况下,只有服务器端需要担心防火墙。
如果不确切知道您想要实现的目标,很难推荐哪种架构最适合您。