Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为WPF桌面应用程序构建登录服务器_C#_Wpf_Wcf_Login - Fatal编程技术网

C# 为WPF桌面应用程序构建登录服务器

C# 为WPF桌面应用程序构建登录服务器,c#,wpf,wcf,login,C#,Wpf,Wcf,Login,我正在启动一个宠物项目,看看我是否可以创建一个朋友列表(比如AIM/MSN/Skype/Steam),我只专注于让在线/离线通知发挥作用。我的经验是C#,.NET,以及构建Webforms和Winforms,所以我也借此机会学习WPF,我知道这是一个挑战,但从我最后读到的WPF将使此类项目更容易 我对任何可能对我有帮助的输入或建议感兴趣,或者如果我忽略了任何东西,尤其是在扩展方面 现在,我的设计是让客户端告诉登录服务器用户名已经登录,以及IP和开放端口。(据我所知,最好的方法是在登录服务器上使用

我正在启动一个宠物项目,看看我是否可以创建一个朋友列表(比如AIM/MSN/Skype/Steam),我只专注于让在线/离线通知发挥作用。我的经验是C#,.NET,以及构建Webforms和Winforms,所以我也借此机会学习WPF,我知道这是一个挑战,但从我最后读到的WPF将使此类项目更容易

我对任何可能对我有帮助的输入或建议感兴趣,或者如果我忽略了任何东西,尤其是在扩展方面

现在,我的设计是让客户端告诉登录服务器用户名已经登录,以及IP和开放端口。(据我所知,最好的方法是在登录服务器上使用WCF web服务?)

然后,登录服务器将用户名存储在一个哈希表中(这会扩展吗?),并为所有与您是朋友的人查询朋友列表数据库,然后为任何在线的朋友检查同一个哈希表。当登录服务器在哈希表中点击时,它会将您的信息(名称、Ip、端口)发送到您朋友的客户机(再次是WCF?),然后您朋友的客户机会发送您的客户机信息,告知您朋友的客户机处于联机状态(再次是WCF?)

这可能太简单了,但这行得通吗


提前谢谢。

我以前用.Net远程处理做过这件事

  • 客户端和服务器共享一个公共接口dll
  • 客户机在服务器上创建一个服务器对象(singleton),并获取IServer 接口
  • 客户端将IClient对象交给IServer
  • 服务器拥有当前连接的IClient列表(建议定期ping)
  • 服务器可以操作它想要的任何IClient(例如推送通知)
  • 服务器可以充当交换台操作员,并将IClient接口相互连接(例如,用于聊天会话)
我使用双向通道(GenuineChannel)实现了这一点,以提高性能(二进制序列化)、推送通知和通过防火墙(如果客户端位于防火墙后面,则一旦连接断开,服务器就无法回拨)


=======选项===========

.Net远程处理-从那时起就没有改变过-所以这仍然是可行的

WCF回调-在我尝试它们时,它们无法通过防火墙工作,因为它们等待服务器打开一个连接并使用两个单独的连接。

<强> Azure服务总线< /强> -我认为微软希望你考虑这些天的解决方案