【发布时间】:2013-05-08 00:28:41
【问题描述】:
我正在尝试让 node.js 应用程序与名为 U.are.U 的 .NET SDK 指纹读取器交互。 SDK 提供 .dll(win32 和 x64)、Java 和 .NET 库。我决定使用 .NET 来简化使用,让所有接口都可以使用。
所以,我当前面临的问题是如何调用这些 .NET 函数并仍然保留 node.js 的异步特性。应用程序流程(在 .NET 示例中)非常简单,对库进行了 3 次调用,指纹就完成了。
private IEnumerable<Fmd> CaptureAndExtractFmd()
{
while (!reset)
{
DataResult<Fmd> resultConversion;
try
{
if (count >= 8)
{
SendMessage("Enrollment was unsuccessful. Please try again.");
count = 0;
break;
}
Fid fid = null;
if (!_sender.CaptureFinger(ref fid))
break;
if (fid == null)
continue;
count++;
resultConversion = FeatureExtraction.CreateFmdFromFid(fid, Constants.Formats.Fmd.ANSI);
SendMessage("A finger was captured. \r\nCount: " + (count));
if (resultConversion.ResultCode != Constants.ResultCode.DP_SUCCESS)
break;
}
catch (Exception)
{
break;
}
yield return resultConversion.Data;
}
}
如何更改它以便它可以在 node.js 中使用,而不是在 .NET gui 程序中使用?
还需要注意的是,node.js 并不总是会调用 .NET 程序上的函数来接收函数。程序的识别部分是异步发生的,当有人将手指放在指纹读取器上时就会触发,这意味着 node.js 部分不知道什么时候会发生。所以我不能一直依赖在 .NET 部分询问数据,它必须在没有被询问的情况下调用 node.js 上的回调。 所以基本上,这是一种双向通信,不仅仅是根据请求,因为使用网络服务器进行请求会容易得多。
我找到了一个 node.js 库,它可以缩小 .NET 和 node.js 之间的差距,名为 edge.js,这有什么帮助吗?
基本上,edge.js 可以使它工作,连同node-webkit(我将发布我的应用程序),我可以直接在页面中调用节点 API,因此我可以根据结果更新 DOM从图书馆。 我需要能够注册一个异步任务,该任务可以通过发出事件或调用回调来从 CLR 内部通知 node.js 对应项!
根据 edge.js 作者的说法,它可以很容易地完成 https://github.com/tjanczuk/edge/issues/54#issuecomment-17967082 我只是没有足够的 .NET 技能来完成所有回调(来自完整的模块)。
【问题讨论】:
-
你能解释一下为什么你在这里用 node.js 推动自己吗?
-
我使用的是node-webkit,它可以在里面附带一个“浏览器”和node.js,我可以直接从脚本标签调用node API,两者之间有一个无缝的桥梁,并且因为我会将每个应用程序相互连接(P2P 风格),所以这是必须的
-
你可能想看看 Reactive.NET (Rx.NET)。我以前用它来在事情发生时触发回调,这可以通过它的订阅概念来实现,类似于事件。
-
我没有 .NET 的经验,但我有 node 的经验,如何缩小与 reactive.net 的差距?
标签: c# .net node.js fingerprint edge.js