c# - 如何在从 iris 设备读取时保持状态?
问题描述
我有一个中央 Web 应用程序,它在用户 PC 上启动虹膜扫描设备。我们的客户安装我们的扫描仪驱动程序,以便可以跟踪从他们的站点进出的人员。
- 用户登录网站并单击扫描链接。
- 有一个本地安装的 WebAPI 服务,用于处理来自网站的调用。
- WebAPI 服务激活启动扫描过程的 COM 组件。
- 一旦用户完成了虹膜扫描,它就会返回一个事件处理程序并返回结果。
这就是问题所在。为了完成扫描,必须有对 COM 对象的实时引用,直到完成为止。但是,一旦扫描开始,代码将继续执行并从本地服务调用返回。那时,上下文丢失了,很可能内存被标记为清理中断进程。
锁定 WebAPI 服务并在内部等待一些响应可能会锁定并导致 Web 应用程序崩溃,这似乎是个坏主意。
我如何构建它以稳健的方式处理流程,同时避免任何应用程序被锁定?
我正在考虑创建一个在后台持续运行的 Windows 服务,其中为每个扫描请求加载一个 AppDomain。当我的网络应用程序通过网络服务轮询状态更改时,请求可以处理。
解决方案
我认为您只需将COM
组件对象包装在一个Singleton
只实例化一次的类中。(阅读这里了解更多关于 Singleton 的信息)。
此外,如果您使用 Windows 服务选项,我认为这是一个非常好的主意,我建议您使用SignlaR
它在客户端和服务器之间推送消息。 Windows 服务作为信号器客户端
推荐阅读
- angular - 如何通过角度服务将数据从表单(输入)传递到另一个组件
- postgresql - Very slow execution under two conditions like in the query
- jekyll - 如何在 jekyll 主题中按键值限制和过滤集合?
- javascript - 如何检索字符串中每对可能的数字的匹配项?
- java - println(String) 的接口
- kubernetes - AKS 中的 Istio 与 DNS
- python-3.x - Ezdxf 库:如何在 getstream 中更改模板\__init__.py 的位置?
- php - 如何使用 symfony 从 url 读取 xml 文件
- oracle - 避免在不使用 CREATE 的情况下在 SQL*Plus 脚本中的多个 SPOOL 中重复相同的 WITH
- angular - 使用 ngOnChanges 将异步数据传递给子组件不起作用