2012-05-24 4 views
1

J'ai cette exigence étrange d'accéder au scanner, lecteur de code-barres, appareil photo, etc. à partir d'une application asp.net. Comme ce sont des ressources locales, je sais qu'il n'est pas possible de le faire. Je me demandais s'il y avait une autre solution à ce problème.scanner d'accès, code à barres, appareil photo avec l'application asp.net

Je pensais à créer un service Windows qui fonctionnera sur le système local et ouvrira un port et l'écoutera et effectuera le travail requis. Je me demandais s'il y avait un moyen d'envoyer une sorte de message au port local à partir d'une page asp.net en utilisant JS ou une autre bibliothèque ou ActiveX.

Si vous avez une solution totalement différente, je suis tout ouïe.

Répondre

2

Nous avons résolu un problème analogue (imprimante de billets connecté au port série) en créant une petite application (TCL/original TK, comme il fonctionne bien sur Win/Mac/Lin, mais C# /. NET maintenant depuis que mono a grandi), que

  • prend l'utilisateur/mot de passe
  • crée la session avec une requête Web.
  • ouvre le navigateur,
  • donnant le jeton de session dans l'URL comme une ancre (http [s]: //foo.bar/baz x = y # sessionToken)

De cette façon, il est jamais transmis sur le fil, mais est disponible pour le code JS dans le client. Une fois que l'application d'aide a démarré le navigateur, elle utilise une longue interrogation et le jeton de session (connu du navigateur et de l'application d'aide) pour communiquer avec le serveur Web - en tant qu'application côté client, elle peut communiquer avec le périphérique naturellement.

100 de billets de de 1000 imprimés de cette façon ...

Edit: Oui, je sais que cela devient plus et plus longtemps, mais j'ai besoin (et on m'a demandé de) d'élaborer.

Si vous voulez éviter d'aller le ActiveX/Silverlight/quelle que soit la route, que je suggère fortement, vous avez besoin 4 joueurs:

  1. Webserver
  2. Browser
  3. application d'assistance ("Agent")
  4. périphérique (imprimante de billets, un scanner de codes à barres, quel que soit)

Votre problème de base est que 1. a besoin de parler à 4., mais ne peut pas. Vous choisissez donc deux voies parallèles: La communication destinée à l'utilisateur est échangée entre le serveur et le navigateur, tandis que la communication destinée à l'équipement est échangée entre le serveur et l'agent, ce dernier le relayant à l'appareil (et inversement). L'agent est une application assez simple, qui communique avec l'appareil via les fonctions du système d'exploitation (comment cela dépend du périphérique) et dialogue avec le serveur via des requêtes HTTP.

Selon, la direction dans laquelle des informations que vous avez besoin de flux:

  • Pour faciliter le flux d'informations à partir du périphérique au serveur, il suffit de avoir une activité sur le déclencheur de l'appareil un WebRequest. (Périphérique d'entrée, par exemple scanner de codes-barres)
  • Pour faciliter le flux d'informations entre le serveur et le périphérique, utilisez une interrogation longue. (Dispositif de sortie, par exemple une imprimante de billets)
  • Pour les deux sens faire les deux (dispositif d'entrée déclenché serveur, par exemple la caméra)

Maintenant, le problème reste est, comment établir une corrélation entre une action humaine dans le navigateur avec un dispositif action - en bref: Comment le serveur peut-il envoyer le ticket que vous avez choisi dans votre navigateur à votre imprimante de tickets, et non pas à n'importe quelle imprimante à long sondage suivante. Pour résoudre ce problème, il est naturel d'utiliser l'ID de session, mais le navigateur et l'agent doivent tous deux connaître le même ID de session. Pour que cela se produise, vous devez le communiquer de l'un à l'autre. Puisque vous ne pouvez pas le communiquer du navigateur à l'agent (ou cette discussion serait sans intérêt), vous devez le communiquer dans l'autre sens - et l'ancre dans l'URL est le véhicule pour y parvenir. Vous effectuez les opérations suivantes:

  • utilisateur démarre l'agent (non le navigateur) et entre ses lettres de créance
  • appelle l'agent envoie une requête Web pour une connexion au serveur, et récupère un jeton de session (s'il vous plaît utiliser une cryptographie de base ou aller pour HTTPS)
  • Agent démarre le navigateur (par exemple en exécutant cmd.exe /c start "http[s]://domain.tld/start.aspx?x=y#sessiontoken")
  • Depuis le jeton de session est un point d'ancrage, il ne sera pas envoyé sur le fil, mais sera disponible à la browser- code dégrossi ... Bingo!
  • Maintenant, les deux chemins parallell sont ouverts: le navigateur pour les demandes de l'homme, connaissant le jeton de session, et l'agent va maintenant dans les modes décrits ci-dessus,
+0

cela semble intéressant mais je ne suis pas en mesure de suivre votre réponse. – Asdfg

+0

Mise à jour de ma réponse, veuillez patienter. –

+0

Terminé la mise à jour de la réponse. –

0

Vous pouvez utiliser ActiveX pour ce faire ou, peut-être Silverlight (ou Flash) qui fournissent un soutien limité pour (au moins dans mon expérience Camera, Microphone et Scanner). Mais, étant donné une expérience antérieure avec quelque chose en rapport avec ce que vous essayez de faire, je vais vous suggérer de mieux acheter un SDK pré-intégré.

Imaging:

http://www.viscomsoft.com/

Code-barres:

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

+0

des suggestions sur ce type de SDK? des liens? – Asdfg

+0

merci pour la réponse mise à jour.Depuis que j'ai 5 périphériques pour accéder comme lecteur de code-barres, scanner, appareil photo, tiroir-caisse et imprimante, je crains que je devrais passer par beaucoup de sdks si je ne peux pas trouver celui qui fait tout plus le coût sera aussi un facteur. Je vais essayer de trouver une sorte de sdk open source. – Asdfg

+0

la plupart des scanners sont livrés avec deux pilotes, et la plupart des webcams sont compatibles avec les UVC. vous pouvez rechercher des SDK twain. certains d'entre eux travaillent aussi avec des appareils photo et une imprimante. Vous ne savez pas comment les applications logicielles interagissent avec le tiroir-caisse et le lecteur de codes-barres. :) – flysakura

Questions connexes