3

我一直在寻找一种方法来让我的 Silverlight 应用程序与本地计算机上的 COM 端口通信。有没有人能够让 Silverlight 成功连接到您本地计算机的 COM 端口?如果是这样,您能否指出我的文档。

4

10 回答 10

5

Silverlight 无法做到这一点。

为什么不只使用标准的 .NET 桌面应用程序?如果您需要通过 Web 轻松部署,只需使用 Click-Once 进行部署。

于 2008-10-22T19:24:23.073 回答
5

无法访问计算机资源,但您可以使用套接字进行通信。因此,可以让您的用户安装一个应用程序,该应用程序侦听端口并与 COM 端口通信。

为什么要尝试与 COM 端口通信?如果您正在寻找网络摄像头支持,请查看 Jonas 的 hack,它使用 Flash 获取网络摄像头输入:http: //jonas.follesoe.no/WebcamInSilverlight2MacGyverStyle.aspx

于 2008-10-22T19:31:45.727 回答
3

您可以通过打开从 Silverlight 控件到本地套接字的套接字连接来执行此操作,该套接字具有 COM 端口访问权限

于 2008-10-23T06:13:20.673 回答
3

Silverlight 4 使您能够与 COM (ActiveX) 通信。我写了一篇关于如何与支持与串口通信的 COM 库进行通信的博客文章。

http://tech-michael.blogspot.com/2009/12/silverlight-talking-to-arduino.html

请注意,提到的 ActiveXperts 对象是商业的。

于 2009-12-14T23:01:17.717 回答
2

我认为这些人已经很好地总结了 - Silverlight 处于一个紧凑的沙箱中,您将无法访问 COM 端口或其他本地资源。

所以让我们开始考虑替代方案:

  • 使用 ClickOnce 和完整的 .NET 应用程序 - 让您轻松部署和更新,您将拥有 .NET 框架的全部功能。
  • 使用请求一些额外权限的 XBAP(浏览器部署的 WPF)。将存在于浏览器中,但只能在安装了 .NET 3.0 / 3.5 的 Windows 机器上运行
  • 编写一个与 GPS 设备对话并公开 API 的 ActiveX 控件。然后使用 JavaScript 使用此 API 并与 Silverlight 中的 JavaScript 代码进行交互。这将为您提供一个浏览器内的 GPS 应用程序,但您的用户必须安装一个额外的 GPS ActiveX 组件。

干杯,乔纳斯

于 2008-10-22T22:10:35.827 回答
2

您仍然可以在浏览器之外运行它并使用类似的包装器

http://interopcom.codeplex.com/(我写的)

问候,保罗

于 2011-07-07T20:33:40.637 回答
1

本地计算机是指运行 silverlight 客户端应用程序的计算机吗?Silverlight 在安全沙箱中运行,您能否像这样连接到硬件资源值得怀疑。

于 2008-10-22T19:25:07.610 回答
1

乔恩,

我实际上是在尝试从 Silverlight 读取我的 GPS。我想尝试一个有趣的概念,但我试图实现零安装足迹。

于 2008-10-22T19:39:14.010 回答
0

如果您希望您的应用程序在 Windows 和 Mac 上运行怎么办?Silverlight 是一个很好的解决方案,因为它可以在两者上运行。如果您必须编写 WPF 应用程序或 ActiveX 控件等,这只会再次将您绑定到 Windows。

于 2010-07-08T14:42:51.320 回答
0

您可以将 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
于 2013-12-16T22:26:38.570 回答