DISABLE ADBLOCK

ADBlock is blocking some content on the site

ADBlock errore

Connecting Silverlight to the local computers COM port

StackOverflow https://stackoverflow.com/questions/227174

Question

I have been searching high and low for a way to get my silverlight application talking to the COM port on my local computer. Has anybody out there been able to get Silverlight to successfully connect to the COM port of you local computer? If so can you point me to the documentation.

Solution

This can not be done with Silverlight.

Why not just use a standard .NET desktop app? If you need to easily deploy over the web, just use Click-Once for deployment.

OTHER TIPS

There's no access to computer resources, but you can communicate with sockets. So it's possible to have your users install an application which listens on a port and communicates with a COM port.

Why are you trying to communicate with a COM port? If you're looking for webcam support, take a look at Jonas's hack which uses Flash to get webcam input: http://jonas.follesoe.no/WebcamInSilverlight2MacGyverStyle.aspx

You can do this by opening a socket connection from your Silverlight control to a local socket which intern have the COM port access

Silverlight 4 enables you to communciate with COM (ActiveX). I have written a blog article about how to communicate with a COM library that supports communicating with the serial port.

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

Note that the ActiveXperts-object mentioned is commercial.

I think the guys have summed it up nicely - Silverlight is in a tight sandbox and you will not get access to the COM port or other local resources.

So let's start to think about alternatives:

  • Use ClickOnce and a full .NET application - Gives you easy deployment and udpates, and you will have the full power of the .NET framework.
  • Use a XBAP (Browser Deployed WPF) that requests some extra permissions. Would live inside the browser, but only run on Windows machines with .NET 3.0 / 3.5 installed
  • Write an ActiveX control that talks to the GPS device and expose an API. Then use JavaScript to consume this API and interact with the JavaScript code from Silverlight. This would give you a in-browser GPS application, but your users would have to install an additional GPS ActiveX component.

Cheers, Jonas

You can still run it out of browser and utilise a wrapper like

http://interopcom.codeplex.com/ (written by me)

Regards, Paul

By local computer do you mean the computer the silverlight client app is running on? Silverlight runs in a security sandbox, and it is doubtful you can connect to hardware resources like so.

Jon,

I am actually trying to read my GPS from Silverlight. I have an interesting concept that I wanted to try out, but I was trying to go for a zero install footprint.

What if you want your application to run on Windows and Mac? Silverlight is a nice solution since it runs on both. If you have to write a WPF app or an ActiveX control, etc., this will bind you to Windows only again.

You can connect Silverlight 5 to the local Comm Port as well as any other local resource, but only with the Silverlight application is running under Windows (not Mac) and when running either OOB (out-of-browser) or in-browser in Internet Explorer.

The way this is done is by creating a classic COM automation component, and running the application with Full Trust. There is a registry key you can set to allow Silverlight 5 applications to be able to run with full trust in-browser, but the application must be signed and the public key must be imported to trusted publishers on the local machine.

Once done, Silverlight supports AutomactionFactory, allowing you to access locally registered com automation objects. We use this feature extensively; it is very powerful. In this case we created a COM component that gives access to the SerialPort object, and gave it a method to return a list of all available ports.

If AutomationFactory.IsAvailable Then
      SilPort = AutomationFactory.CreateObject("SilverPort.Ports")
      Dim AllPorts() As String
      AllPorts = SilPort.GetPortNames()
      ...
End If

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow