Как использовать RFID / NF C с помощью Blazor - PullRequest
1 голос
/ 03 апреля 2020

Как следует из названия, я хочу внедрить RFID-считыватель в мое приложение для блейзоров.

Традиционно приложения DotNetCore запускаются на стороне сервера. Но возможно ли это на стороне клиента Blazor?

Или Blazor поддерживает Active X?

Ответы [ 2 ]

4 голосов
/ 03 апреля 2020

Обновление:

Предполагается, что имеет в виду использование настольных сборок 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 своих посетителей).

  1. Написать отдельную программу (например, Windows Service Daemon) что:

    1. запускает микро-HTTP-сервер, который прослушивает только 127.0.0.1:12345 и выполняет действия RFID / NF C в ответ на входящие запросы.
    2. Добавить поддержку websocket запросы на двустороннюю связь тоже.
    3. Убедитесь, что все запросы авторизованы, например, криптографическая подпись запросов с использованием закрытого ключа на стороне сервера и ваша программа должна проверить правильность входящих запросов на предотвращать несанкционированные запросы.
    4. Вы также должны использовать исключительно привязку HTTP - хотя я не уверен в лучшем способе генерации оцените и доверяйте сертификату для localhost.
  2. Тогда ваш код на стороне клиента будет использовать fetch( 'https://localhost:1234/do-stuff-with-rfid' ). Если вы используете подписанные запросы, а запросы инициируются клиентским кодом (а не кодом веб-сервера), вам необходимо проявить больше творческого подхода к проверке подлинности запросов.

2 голосов
/ 03 апреля 2020

ответ частично неверен. NF C с Blazor возможно. Да, браузер - это песочница, и Blazor живет в ней. Так песочница в песочнице. Но с JavaScript APi вы можете получить доступ к каждому API браузера. Сюрприз есть черновик для этого https://w3c.github.io/web-nfc/

Буду ли я делать это в браузере? никогда никогда NF C в целом - сложная тема c, причина различных стандартов, формата, устройства. Я закодировал его, используя библиотеку и UWP, в течение нескольких часов.

...