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