C# 传统服务器与 WCF Web 服务

6
我正在创建一个用于大学项目的客户端应用程序,该应用程序从Yahoo!下载和显示市场数据,并向移动设备发送通知(目前使用Google云消息)。到目前为止,这是一个WPF客户端,“服务器”是一个类库-到目前为止正在工作。我想知道的是,是否可以将此服务器与WCF服务混合使用-我打算使用WCF服务注册设备,以及接受和解析命令。
因此,我会在我的服务器对象上调用.Start()方法,它将在后台不断运行,同时运行一个WCF REST服务-或者我最好只是在服务器上运行一个可以接受输入的线程...如果这很困惑,请谅解,只是想知道它是否可以实现,或者是否已经实现过或有任何建议:)
补充一点说明:
客户端前端和“服务器”在同一台机器上运行-我将其称为服务器,因为它不仅更新前端,还同时发送GCM通知。我在想,通过添加WCF服务,是否可能使更简单地处理将设备添加到数据库(“服务器”从数据库中读取设备注册ID列表,向这些设备发送通知),并允许安卓应用程序通过REST或类似的方式提供详细信息。

你可以混合使用几乎任何类型的服务/库... 你的目标是通过REST服务或其他方式在进程之间进行通信吗?不清楚需要比基本的WPF应用程序更复杂的是什么。 - Alexei Levenkov
2个回答

3
我建议将类库封装在Windows服务中(即一个持续运行、可以停止/启动/暂停的进程),并将WCF服务保留为客户端通信的Web服务。
如何WCF客户端服务与Windows服务通信由您决定 - 无论是将数据存储在共享数据库中,还是将其保留在内存中,并使用另一个WCF层在两者之间进行通信等。 共享数据库是最直接的选择,特别是如果您想将数据持久化以供其他应用程序/服务使用。

是的,现在它的结构是这样的:我有一个WPF应用程序,选择“启动服务器”,然后从mainWindowViewModel启动服务器。当服务器收到更新时,它会触发一个事件,将数据从类库发送到ViewModel,然后处理它,更新显示等。实际上没有持久化任何数据,除了用户设置和配置存储在数据库中 - 数据存储在类库的字典中并保留在内存中,在最后被删除。 - KingTravisG
1
基于此,当您关闭WPF应用程序时,最好将字典序列化到磁盘上,然后在启动时重新加载它。这将解决您的直接问题。对于生产系统,我会在Windows服务中创建WCF服务(或在asp.net应用程序中创建WCF服务以在IIS中托管),然后修改您的WPF应用程序以使用与Android设备相同的WCF服务方法。 - Nate

0

如果您的服务器上有一个通知服务,并且有多个连接到它的WPF客户端应用程序,则使用WCF服务将非常有用。如果只有一个应用程序在同一台服务器上运行,那么不确定它是否值得这样做。

通常的模式是在IIS中托管WCF服务,这样每当收到第一个请求时,它就会启动。但是WCF非常灵活,因此您可以在Windows服务、控制台应用程序等中托管它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接