我有这个奇怪的要求从asp.net应用程序访问扫描仪,条形码阅读器,相机等。由于这些是本地资源,我知道不可能这样做。我想知道是否还有其他解决方案来解决这个问题。
我正在考虑创建一个将在本地系统上运行的Windows服务,并打开一个端口并监听它并完成所需的工作。我想知道是否有办法使用JS或其他库或activex从asp.net页面向本地端口发送某种消息。
如果你有完全不同的解决方案,我会全力以赴。
答案 0 :(得分:2)
我们通过创建一个小应用程序解决了一个类似的问题(连接到串口的票据打印机)(TCL / TK原创,因为它在Win / Mac / Lin上很好地运行,但是现在C#/ .NET从单声道长大后),
这种方式永远不会通过网络传输,但可以在客户端的JS代码中使用。
帮助应用程序启动浏览器后,它使用长轮询和会话令牌(浏览器和帮助应用程序已知)与Web服务器通信 - 作为客户端应用程序,它可以很自然地与外围设备通信
以这种方式打印的100张票据中有100张...
修改强> 是的,我知道这会变得越来越长,但我需要(并被要求)详细说明。
如果你想避免使用ActiveX / Silverlight /无论什么路线,我强烈建议,你需要4个玩家:
你的基本问题是,1.需要与4.谈话,但不能。因此,您选择两条并行路径:为用户提供的通信在服务器和浏览器之间进行交换,而用于设备的通信则在服务器和代理之间进行交换,后者将其中继到设备(当然,反过来)。
代理是一个非常简单的应用程序,它通过操作系统设备与设备进行通信(如何完成此操作取决于设备),并通过HTTP请求与Web服务器进行通信。
取决于您需要的信息流方向:
现在剩下的问题是,如何将浏览器中的人为操作与设备操作相关联 - 简而言之:服务器如何将您在 浏览器中选择的故障单发送到您的票据打印机,而不是接下来的任何打印机长轮询。
要解决此问题,使用会话ID是很自然的 - 但它需要让浏览器和代理知道相同的会话ID。为此,您需要将它们从一个传递到另一个。由于您无法将其从浏览器传递给代理(或者此讨论没有实际意义),您需要以相反的方式进行通信 - 并且URL中的锚点是实现此目的的工具。您执行以下操作:
cmd.exe /c start "http[s]://domain.tld/start.aspx?x=y#sessiontoken"
)答案 1 :(得分:0)
您可以使用ActiveX来执行此操作,或者使用Silverlight(或Flash)提供有限的支持(至少根据我的经验,相机,麦克风和扫描仪)。
但是,考虑到之前与您尝试做的事情相关的经验,我建议您更好地购买预建的SDK。
成像:
条形码:
http://www.tec-it.com/software/barcode-software/tbarcode/barcode-generator/Default.aspx