【问题标题】:access scanner, barcode, camera with asp.net application使用 asp.net 应用程序访问扫描仪、条形码、相机
【发布时间】:2012-06-18 14:52:29
【问题描述】:

我有一个奇怪的要求,可以从 asp.net 应用程序访问扫描仪、条形码阅读器、相机等。由于这些是本地资源,我知道这是不可能的。我想知道这个问题是否有其他解决方案。

我正在考虑创建一个将在本地系统上运行的 Windows 服务,它会打开一个端口并监听它并完成所需的工作。我想知道是否有一种方法可以使用 JS 或其他库或 activex 从 asp.net 页面向本地端口发送某种消息。

如果您有完全不同的解决方案,我会全力以赴。

【问题讨论】:

    标签: asp.net barcode-scanner


    【解决方案1】:

    我们通过创建一个微型应用程序(TCL/TK 原创,因为它在 Win/Mac/Lin 上运行良好,但是自从 mono 长大后现在是 C#/.NET)解决了一个类似的问题(连接到串行端口的票打印机),那个

    • 获取用户/密码
    • 使用网络请求创建会话。
    • 打开浏览器,
    • 将 URL 中的会话令牌作为锚点 (http[s]://foo.bar/baz?x=y#sessiontoken)

    这样它永远不会通过网络传输,而是可供客户端中的 JS 代码使用。

    助手应用程序启动浏览器后,它使用长轮询和会话令牌(浏览器和助手应用程序都知道)与网络服务器通信 - 作为客户端应用程序,它可以很自然地与外围设备通信.

    以这种方式打印的 1000 张票中有 100 张 ...

    编辑: 是的,我知道这会越来越长,但我需要(并且被要求)详细说明。

    如果你想避免走我强烈建议的 ActiveX/Silverlight/其他路线,你需要 4 名玩家:

    1. 网络服务器
    2. 浏览器
    3. 帮助应用程序(“代理”)
    4. 设备(票据打印机、条形码扫描仪等)

    您的基本问题是,1. 需要与 4. 交谈,但不能。因此,您选择了两条并行路径:用于用户的通信在服务器和浏览器之间交换,而用于设备的通信在服务器和代理之间交换,后者将其中继到设备(当然反之亦然)。

    代理是一个非常简单的应用程序,它通过操作系统设施与设备通信(具体如何完成当然取决于设备),并通过 HTTP 请求与网络服务器通信。

    取决于您需要的信息流方向:

    • 为了方便从设备到服务器的信息流,只需 设备上的活动会触发网络请求。 (输入设备,例如条码扫描仪)
    • 为促进从服务器到设备的信息流,请使用长轮询。 (输出设备,例如票据打印机)
    • 两个方向都做(服务器触发的输入设备,例如相机)

    现在剩下的问题是,如何将浏览器中的人为操作与设备操作相关联 - 简而言之:服务器如何将您在 您的 浏览器中选择的票证发送到 您的 票据打印机,而不是下一个长轮询的打印机。

    要解决这个问题,使用会话 ID 是很自然的选择 - 但它要求浏览器和代理都知道相同的会话 ID。为此,您需要从一个到另一个进行通信。由于您无法将其从浏览器传递给代理(否则此讨论将没有实际意义),因此您需要以相反的方式进行沟通 - URL 中的锚点是实现此目的的工具。您执行以下操作:

    • 用户启动代理(不是浏览器!)并输入他的凭据
    • 代理调用向服务器发送登录 Web 请求,并取回会话令牌(请使用一些基本加密或使用 HTTPS)
    • 代理然后启动浏览器(例如通过执行cmd.exe /c start "http[s]://domain.tld/start.aspx?x=y#sessiontoken"
    • 由于会话令牌是一个锚,它不会通过网络发送,但可供浏览器端代码使用...宾果游戏!
    • 现在两条并行路径已打开:用于人工请求的浏览器,知道会话令牌,代理现在进入上述模式,

    【讨论】:

    • 这听起来很有趣,但我无法理解您的回答。
    • 更新我的答案,请耐心等待
    【解决方案2】:

    您可以使用 ActiveX 来执行此操作,或者使用 Silverlight(或 Flash)来提供有限的支持(至少根据我的经验,相机、麦克风和扫描仪)。

    但是,鉴于以前与您正在尝试做的事情相关的经验,我建议您最好购买预构建的 SDK。

    成像:

    http://www.viscomsoft.com/

    条码:

    http://www.tec-it.com/software/barcode-software/tbarcode/barcode-generator/Default.aspx

    【讨论】:

    • 对什么样的SDK有什么建议?有链接吗?
    • 感谢更新的答案。因为我有 5 个外围设备可以访问,比如条码阅读器、扫描仪、相机、收银员抽屉和打印机,我担心如果我找不到一个能做所有事情的 sdks 加上成本也会是一个因素。我会尝试找到某种开源sdk。
    • 大多数扫描仪都带有 twain 驱动程序,并且大多数网络摄像头都兼容 UVC。您可以搜索 twain SDK。其中一些也适用于相机和打印机。不确定软件应用程序如何与收银员抽屉和条形码阅读器交互。 :)
    最近更新 更多