Обновление:
Предполагается, что имеет в виду использование настольных сборок P C. NET, которые работают с общим оборудованием RFID и NF C через локальные порты связи ( COM, USB, Bluetooth и др. c), то нет, это невозможно.
Однако через несколько лет, если поставщики браузеров добавят поддержку предложенных JavaScript API для NF C и RFID-оборудование («Web NF C») , тогда вы можете использовать эти API из своего кода.
Некоторые поставщики RFID-оборудования (как системные интеграторы, так и производители оборудования) предоставляют инфраструктуру считыватели / сканеры на основе (типа, которые постоянно монтируются на стене или потолке), которые предоставляют веб-сервисы на основе HTTP (SOAP, REST, что-то еще и т. д. c), которые также может использовать ваш код Blazor.
Вот список:
Интернет-сайт / PWA с использованием встроенного в браузер JavaScript API:
- Прямое подключение (включая PAN / Bluetooth) RFID + NF C оборудование считывателя:
- Сканеры / считыватели инфраструктуры с веб-сервисами на основе HTTP: Да , при условии, что вы можете получить доступ они используют
fetch
/ XMLHTTPRequest
, EventSource
или WebSocket
.
Интернет / LAN веб-сайт или PWA с использованием кода C# и библиотек. NET изнутри Blazor (так что не вызывая в браузере JavaScript API изнутри Blazor)
- Прямое подключение (включая PAN / Bluetooth) RFID + NF C оборудование для считывания : Нет (потому что службы / системные вызовы ОС не доступны в Blazor).
- Сканеры / считыватели инфраструктуры с веб-службами на основе HTTP: Да , предоставленные вам можно получить к ним доступ, используя
HttpClient
.
Приложение для устройства (мобильное или настольное) с использованием Cordova / Pho neGap или Electron:
- Аппаратное обеспечение RFID + NF C с прямым подключением (включая PAN / Bluetooth): Потенциально , в зависимости от того, какие дополнительные API предоставляются Cordova, Среда PhoneGap или Electron.
- Сканеры / считыватели инфраструктуры с веб-службами на основе HTTP: Да , при условии, что вы можете получить к ним доступ с помощью
fetch
/ XMLHTTPRequest
, EventSource
или WebSocket
.
Настольный компьютер с установленным на компьютере пользователя сервисным процессом, который взаимодействует с веб-приложением через локальный приемник HTTP только для локального хоста:
- Да . См. Мой оригинальный ответ ниже.
- Обратите внимание, что это решение означает, что процесс обслуживания может обмениваться данными с вашим веб-приложением напрямую, без использования приложения для веб-браузера.
Оригинальный ответ:
Короче: Нет. Это невозможно.
Хотя код Blazor действительно выполняется на клиенте, он не работает как собственные инструкции процессора (это на самом деле работает как интерпретированный или JIT-скомпилированный код Web-Assembly в браузере JavaScript (это означает, что он также очень плотно изолирован).
Короче: В Blazor, если нет Предоставленный браузером API для взаимодействия с компьютером за пределами браузера, тогда вы просто не можете это сделать .
Для объяснения:. NET код может работать в Blazor, потому что Blazor включает в себя крошечную версию механизма исполнения. NET (например, для сборки мусора управляемых объектов), а также сжатые версии основных сборок. NET библиотеки базовых классов, которые загружаются по требованию - таким образом, браузеры на самом деле не загружают все ваше приложение Blazor размером более 20 МБ сразу.
Blazor по сути поставляется с собственной версией mscorlib.dll
, System. dll`` и другие сборки, которые блокируют все операции, связанные со службами платформы, которые недоступны в браузере, и вместо этого они throw new PlatformNotSupportedException
- так что если вы попытаетесь использовать, например, API файловой системы в. NET (System.IO.File
и т. д. c), тогда вы получите исключение / ошибку.
В любой Среде программирования Turing Complete на P C (например, Blazor и WebAssembly) вы можете сделать любое Задача обработки информации, которую вы хотите, но любая программная деятельность, которая заставляет что-то происходить в реальной жизни (например, ввод-вывод, создание системного вызова, управление аппаратным устройством), должна go через операционную систему через системный вызов, . NET системные вызовы происходят внутри CLR (часто это наблюдается с помощью методов MethodImplOptions.InternalCall
и методов P / Invoke ([DllImport]
)), которые вообще не создаются CLR Blazor, хотя некоторые API переназначаются на native JavaScript, например, Console.WriteLine
сопоставлен с console.log
.
Что касается ActiveX - ни один браузер не поддерживает неограниченные элементы ActiveX без песочницы в течение более 15 лет. ActiveX мертв. Браузеры также отказались от поддержки Java апплетов.
Возможный обходной путь:
Тем не менее, при условии, что вы можете установить свои собственные программы на клиентском компьютере, тогда вы можете иметь свое веб-приложение. (даже если он размещен на общедоступном веб-сайте c Inte rnet) взаимодействует с клиентской программой через локальный HTTP-сервер (который включает в себя WebSockets), доступ к которому осуществляется из запроса fetch
или XMLHttpRequest
, сделанного локальным браузером (нет внешние связи, к счастью). Вот как работает функция «Найти служебную метку» на веб-сайте Dell Computers: компьютеры Dell поставляются с предустановленным небольшим веб-сервером, который прослушивает петлевые запросы и отвечает с помощью служебной метки (я думаю, что запросы должны быть подписанные сторонние веб-сайты не могут делать то же самое, чтобы получить служебные теги Dell своих посетителей).
Написать отдельную программу (например, Windows Service Daemon) что:
- запускает микро-HTTP-сервер, который прослушивает только
127.0.0.1:12345
и выполняет действия RFID / NF C в ответ на входящие запросы. - Добавить поддержку
websocket
запросы на двустороннюю связь тоже. - Убедитесь, что все запросы авторизованы, например, криптографическая подпись запросов с использованием закрытого ключа на стороне сервера и ваша программа должна проверить правильность входящих запросов на предотвращать несанкционированные запросы.
- Вы также должны использовать исключительно привязку
HTTP
- хотя я не уверен в лучшем способе генерации оцените и доверяйте сертификату для localhost
.
Тогда ваш код на стороне клиента будет использовать fetch( 'https://localhost:1234/do-stuff-with-rfid' )
. Если вы используете подписанные запросы, а запросы инициируются клиентским кодом (а не кодом веб-сервера), вам необходимо проявить больше творческого подхода к проверке подлинности запросов.