正如标题所暗示的,我想在我的 blazor 应用程序中实现一个 RFID 阅读器。
传统上,DotNetCore 应用程序在服务器端运行。但是有了 blazor 客户端有可能吗?
或者,blazor 是否支持 Active X?
假设您指的是使用通过本地通信端口(COM、USB、蓝牙等)与常见 RFID 和 NFC 硬件配合使用的台式 PC .NET 程序集,那么不,这是不可能的。
但是,几年后,如果浏览器供应商增加了对用于 NFC 和 RFID 硬件(“Web NFC”)的提议 JavaScript API 的支持,那么您可以从您的代码中使用这些 API。
一些 RFID 硬件供应商(系统集成商和实际硬件 OEM)提供基于基础设施的阅读器/扫描器(永久安装在墙壁或天花板上的那种),提供基于 HTTP 的网络服务(SOAP、REST、其他东西,等)您的 Blazor 代码也可以使用。
这是一个列表:
使用浏览器内 JavaScript API 的 Internet/LAN 网站或 PWA:
fetch/ XMLHTTPRequest,EventSource或WebSocket。Internet/LAN 网站或 PWA 使用 Blazor 中的 C# 代码和 .NET 库(因此不在Blazor 中调用浏览器内 JavaScript API)
HttpClient.使用 Cordova/PhoneGap 或 Electron 的设备应用程序(移动或桌面):
fetch/ XMLHTTPRequest,EventSource或WebSocket。在用户计算机上安装了服务进程的台式计算机,该进程通过仅本地主机的 HTTP 侦听器与 Web 应用程序交互:
简而言之:不。这是不可能的。
虽然 Blazor 代码确实在客户端上运行,但它不是作为本机 CPU 指令运行的(它实际上是在浏览器的 JavaScript 引擎中作为解释或 JIT 编译的 Web-Assembly 代码运行)——这意味着它也被非常紧密地沙箱化。
简而言之:在 Blazor 中,如果没有浏览器提供的 API 用于在浏览器之外与计算机交互,那么您根本无法做到。
解释一下:.NET 代码能够在 Blazor 中运行,因为 Blazor包含一个小型版本的 .NET 运行时引擎(例如用于托管对象垃圾收集)以及主要 .NET 基类库程序集的缩小版本它们是按需下载的- 因此浏览器实际上并不会一开始就一次性下载整个 20MB 以上大小的 Blazor 应用程序。
Blazor 本质上提供了自己的mscorlib.dll, System.dll`` 和其他程序集,这些程序集将所有涉及浏览器中不可用的平台服务的操作存根,取而代之的是它们throw new PlatformNotSupportedException- 因此,例如,如果您尝试使用 . NET (System.IO.File等) 然后你会得到一个异常/错误。
在PC 上的任何图灵完备编程环境(如 Blazor 和 WebAssembly)中,您可以执行任何您想要的信息处理任务,但任何在现实生活中使某些事情发生的程序活动(例如 IO、进行系统调用、控制硬件设备)具有要通过系统调用通过操作系统,.NET 系统调用在 CLR 内部发生(通常与MethodImplOptions.InternalCall方法和 P/Invoke ( [DllImport]) 方法一起出现)- Blazor CLR 根本不进行这些调用-尽管某些 API 被重新映射到原生 JavaScript,例如Console.WriteLine映射到console.log.
至于 ActiveX - 15 年来,没有浏览器支持不受限制的、非沙盒化的 ActiveX 控件。ActiveX 已死。浏览器也不再支持 Java 小程序。
也就是说,如果您可以在客户端计算机上安装自己的程序,那么您就可以让您的 Web 应用程序(即使它托管在公共 Internet 网站上)通过本地 HTTP 服务器(包括 WebSockets)访问的客户端程序进行通信afetch或XMLHttpRequest由本地浏览器发出的请求(幸运的是没有外部连接)。这就是戴尔计算机网站的“查找我的计算机的服务标签”功能的工作原理:戴尔计算机预装了一个小型网络服务器,用于侦听环回请求并使用服务标签进行回复(我认为请求确实需要签名,因此第三方网站无法做同样的事情来获取访问者的戴尔服务标签)。
编写一个单独的程序(例如 Windows 服务守护进程):
127.0.0.1:12345并执行 RFID/NFC 操作以响应传入请求。websocket对双向通信请求的支持。HTTP专门使用绑定 - 尽管我不确定生成和信任localhost.然后您的客户端代码将使用fetch( 'https://localhost:1234/do-stuff-with-rfid' ). 如果您使用签名请求并且请求是由客户端代码(而不是网络服务器代码)发起的,那么您需要在如何验证请求方面更具创意。
| 归档时间: |
|
| 查看次数: |
1697 次 |
| 最近记录: |