建议将Windows窗体应用程序迁移到Windows服务/服务控制器

时间:2012-09-26 14:51:53

标签: .net vb.net windows-services

我在vb.NET中开发了一个处理条形码扫描的Windows窗体应用程序(条形码读取器设置在通讯端口上 - 应用程序将扫描的代码传递给处理扫描并返回的asp.net asmx Web服务应用程序的结果)。

该应用程序运行良好,但我的任务是允许在PC注销时使用条形码扫描仪。

我已经在vb.net(.net framework 4.5)中开发了一个原型windows服务,它将接受条形码扫描 - 目前这是将扫描写入Windows事件日志,但是这将连接到Web服务来处理扫描。

此服务正在PC注销。

我现在需要的是一个显示用户界面的应用程序 - 即我需要在扫描条形码时弹出一个窗口。我还希望能够“读取”服务正在处理的“条形码扫描仪”对象的集合,以便它们可以显示给用户。我还需要能够配置Windows服务(设置Web服务URL等)。

任何人都可以就实现这一目标的最佳方式向我提出任何建议吗? Windows可以将“推送”信息发送给“客户”吗?如果是这样,实现这一目标的机制是什么?

Windows服务是否可以公开方法(例如'GetScanners'或'GetLastScan')?你会如何设置它?

感谢您的任何想法/建议!

克里斯

1 个答案:

答案 0 :(得分:0)

我建议使用以下两种方法之一:

  1. 从您窗口的服务中托管WCF服务,然后让客户端应用程序引用该WCF服务。然后,客户端可以调用适当的WCF方法来查询服务的当前状态或设置它的属性。
  2. 该服务可以在常用数据库中读取/写入所有状态和设置。然后,客户端可以直接读取和写入同一个数据库。
  3. 第一种选择可以说是更好的选择。它可以更灵活地满足未来需求,提供与服务进行实时通信的方法。但是,WCF可能需要一个重要的学习曲线,因此如果您对WCF不熟悉且选项2满足您当前的需求,那么这不是一个糟糕的解决方案。

    WCF的工作原理与Web服务类似,但功能更强大,可配置性更强。如果你需要像你建议的那样从windows服务公开像'GetScanners'这样的方法,那就是使用它的解决方案。