Connecting Silverlight to the local computers COM port
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.
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
You can still run it out of browser and utilise a wrapper like
http://interopcom.codeplex.com/ (written by me)
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.
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