我一直在寻找一种方法来让我的 Silverlight 应用程序与本地计算机上的 COM 端口通信。有没有人能够让 Silverlight 成功连接到您本地计算机的 COM 端口?如果是这样,您能否指出我的文档。
10 回答
Silverlight 无法做到这一点。
为什么不只使用标准的 .NET 桌面应用程序?如果您需要通过 Web 轻松部署,只需使用 Click-Once 进行部署。
无法访问计算机资源,但您可以使用套接字进行通信。因此,可以让您的用户安装一个应用程序,该应用程序侦听端口并与 COM 端口通信。
为什么要尝试与 COM 端口通信?如果您正在寻找网络摄像头支持,请查看 Jonas 的 hack,它使用 Flash 获取网络摄像头输入:http: //jonas.follesoe.no/WebcamInSilverlight2MacGyverStyle.aspx
您可以通过打开从 Silverlight 控件到本地套接字的套接字连接来执行此操作,该套接字具有 COM 端口访问权限
Silverlight 4 使您能够与 COM (ActiveX) 通信。我写了一篇关于如何与支持与串口通信的 COM 库进行通信的博客文章。
http://tech-michael.blogspot.com/2009/12/silverlight-talking-to-arduino.html
请注意,提到的 ActiveXperts 对象是商业的。
我认为这些人已经很好地总结了 - Silverlight 处于一个紧凑的沙箱中,您将无法访问 COM 端口或其他本地资源。
所以让我们开始考虑替代方案:
- 使用 ClickOnce 和完整的 .NET 应用程序 - 让您轻松部署和更新,您将拥有 .NET 框架的全部功能。
- 使用请求一些额外权限的 XBAP(浏览器部署的 WPF)。将存在于浏览器中,但只能在安装了 .NET 3.0 / 3.5 的 Windows 机器上运行
- 编写一个与 GPS 设备对话并公开 API 的 ActiveX 控件。然后使用 JavaScript 使用此 API 并与 Silverlight 中的 JavaScript 代码进行交互。这将为您提供一个浏览器内的 GPS 应用程序,但您的用户必须安装一个额外的 GPS ActiveX 组件。
干杯,乔纳斯
本地计算机是指运行 silverlight 客户端应用程序的计算机吗?Silverlight 在安全沙箱中运行,您能否像这样连接到硬件资源值得怀疑。
乔恩,
我实际上是在尝试从 Silverlight 读取我的 GPS。我想尝试一个有趣的概念,但我试图实现零安装足迹。
如果您希望您的应用程序在 Windows 和 Mac 上运行怎么办?Silverlight 是一个很好的解决方案,因为它可以在两者上运行。如果您必须编写 WPF 应用程序或 ActiveX 控件等,这只会再次将您绑定到 Windows。
您可以将 Silverlight 5 连接到本地 Comm 端口以及任何其他本地资源,但仅当 Silverlight 应用程序在 Windows(不是 Mac)下运行并且在 Internet 中运行 OOB(浏览器外)或浏览器内时探险家。
这样做的方法是创建一个经典的COM 自动化组件,并以完全信任的方式运行应用程序。您可以设置一个注册表项,以允许 Silverlight 5 应用程序能够在完全信任的浏览器中运行,但必须对应用程序进行签名,并且必须将公钥导入本地计算机上的受信任发布者。
完成后,Silverlight 支持 AutomactionFactory,允许您访问本地注册的 com 自动化对象。我们广泛使用此功能;它非常强大。在本例中,我们创建了一个 COM 组件,该组件提供对 SerialPort 对象的访问权限,并为其提供了一个返回所有可用端口列表的方法。
If AutomationFactory.IsAvailable Then
SilPort = AutomationFactory.CreateObject("SilverPort.Ports")
Dim AllPorts() As String
AllPorts = SilPort.GetPortNames()
...
End If