Connessione di Silverlight alla porta COM dei computer locali
-
03-07-2019 - |
Domanda
Ho cercato in alto e in basso un modo per far comunicare la mia applicazione Silverlight con la porta COM sul mio computer locale. Qualcuno ha potuto far sì che Silverlight si connettesse correttamente alla porta COM del tuo computer locale? In tal caso, puoi indicarmi la documentazione.
Soluzione
Questo non può essere fatto con Silverlight.
Perché non usare semplicemente un'app desktop .NET standard? Se è necessario implementare facilmente sul Web, utilizzare Click-Once per la distribuzione.
Altri suggerimenti
Non c'è accesso alle risorse del computer, ma è possibile comunicare con i socket. Quindi è possibile avere i tuoi utenti che installano un'applicazione che è in ascolto su una porta e comunica con una porta COM.
Perché stai cercando di comunicare con una porta COM? Se stai cercando il supporto per la webcam, dai un'occhiata all'hack di Jonas che utilizza Flash per ottenere l'input della webcam: http://jonas.follesoe.no/WebcamInSilverlight2MacGyverStyle.aspx
Puoi farlo aprendo una socket dal tuo controllo Silverlight a un socket locale il cui interno ha accesso alla porta COM
Silverlight 4 consente di comunicare con COM (ActiveX). Ho scritto un articolo di blog su come comunicare con una libreria COM che supporta la comunicazione con la porta seriale.
http: //tech-michael.blogspot .com / 2009/12 / silverlight-talking-to-arduino.html
Si noti che l'oggetto ActiveXperts menzionato è commerciale.
Penso che i ragazzi lo abbiano riassunto bene - Silverlight è in una sandbox stretta e non avrai accesso alla porta COM o ad altre risorse locali.
Quindi iniziamo a pensare alle alternative:
- Usa ClickOnce e un'applicazione .NET completa: ti offre una facile distribuzione e udpates e avrai la piena potenza del framework .NET.
- Utilizza un XBAP (Browser Deployed WPF) che richiede alcune autorizzazioni extra. Vivrebbe all'interno del browser, ma funzionerebbe solo su macchine Windows con .NET 3.0 / 3.5 installato
- Scrivi un controllo ActiveX che comunica con il dispositivo GPS ed espone un'API. Quindi utilizzare JavaScript per utilizzare questa API e interagire con il codice JavaScript di Silverlight. Questo ti darebbe un'applicazione GPS nel browser, ma i tuoi utenti dovrebbero installare un componente GPS ActiveX aggiuntivo.
Saluti, Jonas
Puoi ancora eseguirlo dal browser e utilizzare un wrapper come
http://interopcom.codeplex.com/ (scritto da me)
Saluti, Paul
Per computer locale intendi il computer su cui è in esecuzione l'app client silverlight? Silverlight funziona in una sandbox di sicurezza ed è dubbio che tu possa connetterti a risorse hardware in questo modo.
Jon,
In realtà sto cercando di leggere il mio GPS da Silverlight. Ho un concetto interessante che volevo provare, ma stavo cercando di ottenere un footprint di installazione pari a zero.
Cosa succede se si desidera che l'applicazione venga eseguita su Windows e Mac? Silverlight è una bella soluzione poiché funziona su entrambi. Se devi scrivere un'app WPF o un controllo ActiveX, ecc., Questo ti legherà di nuovo solo a Windows.
È possibile connettere Silverlight 5 alla porta di comunicazione locale e a qualsiasi altra risorsa locale, ma solo con l'applicazione Silverlight è in esecuzione su Windows (non Mac) e quando si esegue OOB (fuori dal browser) o in- browser in Internet Explorer.
Il modo in cui ciò avviene è creando un componente di automazione COM classico ed eseguendo l'applicazione con Full Trust. Esiste una chiave di registro che è possibile impostare per consentire alle applicazioni Silverlight 5 di essere eseguite con piena fiducia nel browser, ma l'applicazione deve essere firmata e la chiave pubblica deve essere importata su editori attendibili sul computer locale.
Al termine, Silverlight supporta AutomactionFactory, consentendo di accedere agli oggetti di automazione com registrati localmente. Usiamo ampiamente questa funzione; è molto potente. In questo caso abbiamo creato un componente COM che dà accesso all'oggetto SerialPort e gli abbiamo fornito un metodo per restituire un elenco di tutte le porte disponibili.
If AutomationFactory.IsAvailable Then
SilPort = AutomationFactory.CreateObject("SilverPort.Ports")
Dim AllPorts() As String
AllPorts = SilPort.GetPortNames()
...
End If