Fingerabdruckleser auf node.js über .NET SDK

9

Ich versuche, eine node.js-App mit einem .NET-SDK-Fingerabdruckleser namens U.are.U zu interagieren. Das SDK stellt .dll (win32 und x64), Java- und .NET-Bibliotheken bereit. Ich entschied mich, .NET für die einfache Verwendung zu verwenden, alle Schnittstellen bereit zu haben, und alle zu verwenden.

Das aktuelle Problem, mit dem ich konfrontiert werde, ist, wie man diese .NET-Funktionen aufruft und trotzdem die asynchrone Natur von node.js erhält. Der Anwendungsablauf (im .NET-Beispiel) ist ziemlich unkompliziert, 3 Aufrufe der Bibliothek und der Fingerabdruck ist fertig.

%Vor%

Wie kann ich es ändern, damit es in node.js anstelle eines .NET GUI-Programms verwendbar ist?

Es muss auch darauf hingewiesen werden, dass node.js nicht immer eine Funktion des .NET-Programms aufruft, um eine Funktion zu erhalten. Der Identifikationsteil des Programms passiert asynchron und wird ausgelöst, wenn jemand einen Finger auf den Fingerabdruckleser setzt, was bedeutet, dass der node.js Teil keine Ahnung hat, wann das passieren wird. Daher kann ich mich nicht darauf verlassen, dass ich ständig Daten im .NET-Teil abfrage, sondern Callbacks auf der node.js aufrufen muss, ohne gefragt worden zu sein. Im Grunde ist es eine bidirektionale Kommunikation, nicht nur auf Anfrage, da die Anfrage mit einem Webserver viel einfacher wäre.

Ich habe eine node.js-Bibliothek gefunden, die die Lücke zwischen .NET und node.js mit dem Namen edge.js schließen kann Wäre das hilfreich?

Grundsätzlich kann edge.js es zusammen mit node-webkit (welches ich meine App versenden werde), kann ich die Knoten-APIs direkt auf der Seite aufrufen, so dass ich das DOM abhängig vom Ergebnis der Bibliothek aktualisieren kann. Ich muss in der Lage sein, eine asynchrone Aufgabe zu registrieren, die von der CLR aus zum node.js-Gegenstück benachrichtigen kann, indem sie ein Ereignis ausgibt oder einen Rückruf aufruft!

Laut dem edge.js Autor kann es leicht gemacht werden Ссылка Ich bin einfach nicht ' Ich habe genug .NET-Fähigkeiten, um dies (von einem vollwertigen Modul) mit allen Rückrufen zu tun.

    
pocesar 08.05.2013, 00:28
quelle

4 Antworten

1

Nach einer langen Zeit, seit diese Frage gestellt wurde, kann ich edge.js einfach verwenden, um IN und OUT meine .NET UI zu kommunizieren (sogar node.js innerhalb von node-webkit von .NET UI zu steuern), mit Knoten Ereignisemitter:

%Vor%

Und jetzt können Sie von .NET aus mit Events aufrufen und / oder aufrufen, anstatt nativen Code aufzurufen (der möglicherweise nicht threadsicher ist)

%Vor%

kann jetzt Emit('error', "My error") von jeder beliebigen Stelle meiner abgeleiteten Klassen von Base asynchron aufrufen. Beachten Sie, dass ich vor kurzem begonnen habe, in C # zu arbeiten, und mein hier vorgestellter Code ist vielleicht nicht der beste.

    
pocesar 23.01.2014, 19:50
quelle
1

Interessantes Problem. Wäre es möglich, die betreffende Funktion einfach in eine ASHX-Datei (benutzerdefinierter HTTP-Handler) zu löschen und dann von Ihrer Knotenanwendung aus dorthin zu senden? Je nachdem, was Sie zurückgeben möchten, müssen Sie möglicherweise etwas serialisieren / deserialisieren, aber dies scheint der einfachste Weg zu sein, einen Code aus einer Node-App auszulösen ....

Microsoft hat eine ziemlich gute Sammlung von Anleitungen zu benutzerdefinierten HTTP-Handlern, die Sie finden können hier .

Das grundlegende ASHX-Skelett ist unten:

%Vor%

Sie würden den Inhalt von ProcessRequest durch eine modifizierte Version Ihrer bestehenden Funktion ersetzen.

    
Abe Miessler 10.05.2013 23:55
quelle
1

Die Verwendung der .NET-Bibliothek dieses SDK ist nicht die geeignete Lösung für dieses Problem.

Node.js selbst ist eine C ++ - Anwendung, und wenn Sie versuchen, eine .NET-Bibliothek richtig zu verwenden, fragen Sie einfach nach einer Welt der Verletzung, besonders , wenn das SDK auch eine native C / C ++ - Bibliothek bietet!

Natürlich können Sie die C ++ Bibliothek nicht einfach direkt verwenden; Sie müssen einen C ++ - Wrapper schreiben. In der Knotenwelt werden diese als Addons bezeichnet. Das Schreiben eines Addons ist nicht gerade einfach, aber selbst jemand mit wenig C ++ - Erfahrung sollte in der Lage sein, den Beispielen in der Dokumentation zu folgen und etwas zum Laufen zu bringen.

Das Erstellen eines nativen Add-Ons, das in Windows erstellt wurde, kann auch ein wenig kompliziert sein; hier einige Tipps, die Ihnen den Einstieg erleichtern .

Da das SDK, das Sie verwenden, hinter einer Paywall steht, kann ich keine konkreten Beispiele nennen. Ich stelle jedoch vor, dass Ihr C ++ - Wrapper-Objekt einige Methoden verfügbar machen wird, und Sie werden auch einen JS-Wrapper darum schreiben, um eine saubere API verfügbar zu machen. Zum Beispiel:

%Vor%

Jetzt kann deine App einfach:

%Vor%

Dieses Beispiel glänzt offensichtlich sehr, aber sollte Ihnen eine gute Vorstellung davon geben, was am JS-Ende der Dinge passieren muss. Was die Erkennung betrifft, wenn ein Finger auf den Leser gelegt wird, kann ich nicht wirklich sagen, wie Sie das ohne Zugriff auf das SDK tun würden. Ich würde wetten, dass du am Ende irgendwo pollst. Dies sollte in einem separaten Thread in Ihrem Addon erfolgen.

Bonus: Die native Route bedeutet, dass Sie wahrscheinlich auch mit der Linux-Version des SDK kompatibel sind, sodass Ihre App auch unter Linux funktioniert!

    
josh3736 15.05.2013 19:56
quelle
0

Ich würde entweder selbst gehosteten WCF-Dienst erstellen (dh Windows-Dienst mit WCF-Endpunkt) oder Frameworks wie OpenRasta oder ServiceStack verwenden, um WCF zu ersetzen

In allen drei Fällen würde ich json Web Service haben, der das Ergebnis des letzten Aufrufs an CaptureAndExtractFmd

zurückgibt

Dann würde ich diesen Dienst in node.js

verbrauchen

Wenn Sie weitere Informationen benötigen, wie Sie entschieden haben, gehen Sie einfach eine andere Frage.

Beispielcode mit WCF, C # -Teil

%Vor%

Node.js Teil

%Vor%     
vittore 11.05.2013 00:07
quelle

Tags und Links