将Silverlight连接到本地计算机COM端口

时间:2008-10-22 19:18:44

标签: .net silverlight serial-port

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

10 个答案:

答案 0 :(得分:5)

使用Silverlight无法做到这一点。

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

您可以通过从Silverlight控件打开套接字连接到本地插槽,该实体具有COM端口访问权限

答案 3 :(得分:3)

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

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

请注意,提到的ActiveXperts-object是商业用途。

答案 4 :(得分:2)

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

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

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

干杯, 纳斯

答案 5 :(得分:2)

你仍然可以在浏览器中运行它并使用像

这样的包装器

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

此致 保罗

答案 6 :(得分:1)

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

答案 7 :(得分:1)

乔,

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

您可以将Silverlight 5连接到本地Comm端口以及任何其他本地资源,但只有Silverlight应用程序在Windows(而非Mac)下运行,并且在运行OOB(浏览器外)或在 - Internet Explorer中的浏览器。

这样做的方法是创建一个经典 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