【问题标题】:Advice Migrating a Windows form application to a windows service / service controller将 Windows 窗体应用程序迁移到 Windows 服务/服务控制器的建议
【发布时间】:2012-09-26 14:51:52
【问题描述】:

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

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

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

此服务在 PC 已注销的情况下运行。

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

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

Windows 服务能否公开方法(例如“GetScanners”或“GetLastScan”)?您将如何设置?

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

克里斯

【问题讨论】:

    标签: .net vb.net windows-services


    【解决方案1】:

    我会推荐以下两个选项之一:

    1. 在您的窗口服务中托管 WCF 服务,然后让客户端应用程序引用该 WCF 服务。然后,客户端可以调用适当的 WCF 方法来查询服务的当前状态或设置其属性。
    2. 该服务可以在一个常用的数据库中读取/写入它的所有状态和设置。然后,客户端可以直接从同一个数据库读取和写入。

    第一个选项可以说是更好的选项。它更灵活地满足未来的需求,提供与服务通信的实时方法。但是,WCF 可能需要很长的学习曲线,因此,如果您对 WCF 还不是很熟悉,并且选项 2 满足您当前的需求,那么这不是一个糟糕的解决方案。

    WCF 的工作原理本质上类似于 Web 服务,但它更强大且可配置性更高。如果您需要按照您的建议从 Windows 服务公开诸如“GetScanners”之类的方法,则可以使用此解决方案。

    【讨论】:

    • 感谢史蒂文的回复。我曾考虑过使用 WCF,但对于我想要实现的目标来说似乎有点矫枉过正。条形码扫描仪已经在与我打算更新到 WCF(或 web api)的 web 服务通信。数据库解决方案的唯一缺点是速度——当用户扫描条形码时,他们需要立即响应:这是他们使用当前应用程序所获得的。服务控制器有可能吗?我已经快速浏览了这些,但看不到任何从 Windows 服务中获取数据的方法?
    • 我对服务控制器一无所知,但如果需要实时通信,我会说 WCF 将是首选方法,并且值得花时间投资学习该技术。对于简单的任务,实现起来相当简单。只是有很多配置选项,如果您需要做更高级的事情,可能会变得更复杂一些。如果你不想走那条路,你总是可以打开一个 TCP/IP 套接字并使用你自己的自定义协议通过套接字进行通信。
    • 感谢您的建议 - 我现在拥有由 Windows 服务托管的 WCF 服务的外壳。在 PC 上运行的单独应用程序现在能够访问服务上的端点。我现在的问题是服务如何从windows服务获取信息。
    • 即我有一个条码扫描器对象的集合 - 当收到扫描时,每个条码扫描器都会引发一个事件。我希望将事件(包含扫描的代码)传递给 WCF 服务。我可以调用“SetLastScan”端点,将其发送到 WCF 服务,但我看不到任何地方为 WCF 服务设置应用程序级变量(允许我通过“GetLastScan”端点检索最后一次扫描。对不起,如果我“漫无边际,这对我来说是全新的!
    • 只是为了确保我对您的理解正确,您知道如何将 GetLastScan 端点添加到您的服务,但您不知道如何实现服务器端方法以获取数据返回客户?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多