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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top