19 messaggi dal 16 novembre 2010
Ciao a tutti,
ho questo problema, se qualcuno mi può aiutare...
ho un client che invia dati tramite il protocollo UDP.
Vorrei visualizzare i dati che arrivano tramite un sito web in asp.mvc.

La domanda è:
come creo il listener UDP? Pensavo di usare un web service per leggere i dati UDP in modo tale che il sito web mvc chiami il web service. Non so se si può e come si può fare un web service che riceva continuamente i dati UDP.

Oppure c'è un modo per far interagire un sito web con un windows service? in modo tale che sia quest'ultimo a fare da listener dei dati UDP?

C'è qualche altra soluzione?

Grazie a tutti
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Paolo,
potresti descrivere meglio questo client? Si tratta di un dispositivo che invia dati in broadcast oppure li invia ad un indirizzo IP ben preciso (il tuo server) e lo fa con un protocollo applicativo noto? (UDP è il trasporto).

Il modello è "fire and forget" (ovvero comunica informazioni tipo letture di dati, log, ecc.. non curandosi che il server li abbia raccolti) oppure "request/response" (ovvero si aspetta che qualcuno gli risponda)?


come creo il listener UDP?

Lo puoi creare anche nell'applicazione ASP.NET stessa. IIS è un application server, vuol dire che ti permette di mantenere del codice in esecuzione anche al di fuori delle richieste web. Poi casomai quando hai chiarito approfondiremo la questione. Puoi anche creare un servizio per Windows. Tu hai accesso amministrativo al server in cui verrà pubblicata l'applicazione?

ciao,
Moreno
Modificato da BrightSoul il 01 aprile 2016 20.30 -

Enjoy learning and just keep making
19 messaggi dal 16 novembre 2010
Ciao BrightSoul,
grazie mille per avermi risposto.

Il client invia i dati ad un indirizzo IP mediante Socket, il modello è come dici tu "fire and forget".
In pratica io ho un client che legge una temperatura mediante un driver. Questo client invia il dato letto ad un indirizzo IP (nella stessa macchina in realtà).
Questo driver funziona solo su applicativi desktop e non WEB, perciò c'è una windows form sempre aperta che legge i dati e li manda tramite socket via UDP ad un indirizzo IP.
Tramite una pagina WEB vorrei visualizzare questa temperatura letta "refreshando" la pagina ogni 5 sec. Non mi serve storicizzare il dato.

Come posso fare in modo, come scrivi tu, che un web service su IIS mantenga del codice in esecuzione anche al di fuori delle richieste web?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Paolo,
dato quello che hai ora e dato che le due applicazioni si trovato sulla stessa macchina, la soluzione che comporta il minor sforzo consiste nel far scrivere un file di testo all'applicazione windows forms, in cui metti il valore letto più recente.

Poi, quando l'utente apre l'applicazione web, vai a leggere il contenuto di questo file di testo e lo mostri nella pagina. Metti questo tra i tag <head> della pagina per farla refreshare autormaticamente ogni 5 secondi.
<meta http-equiv="refresh" content="5">


Attenzione quando leggi il contenuto del file perché potrebbe essere in corso di scrittura da parte dell'applicazione windows form. Perciò devi attendere che il lock sul file sia rilasciato prima di leggere il valore. Usa una delle soluzioni riportate qui:
http://stackoverflow.com/questions/50744/wait-until-file-is-unlocked-in-net

Invece, se vuoi una soluzione che non dipenda dall'assunto che entrambe le applicazioni si trovino sulla stessa macchina, ti servirà un altro modo per farle comunicare.
Intanto dimmi se la soluzione del file di testo è per te accettabile o no.

ciao,
Moreno

Enjoy learning and just keep making
19 messaggi dal 16 novembre 2010
Ciao BrightSoul,
la soluzione che abbiamo adottato alla fine è la soluzione più banale ma anche secondo me migliore... appoggiarsi ad un database. Il client scrive sul database. L'applicazione web legge dal database. Molto banale ma sempre funzionante. E non c'è problema di locked.

Mi sarebbe solamente piaciuto provare a capire, per conoscenza personale e curiosità, se si può e come leggere tramite un web service dati inviati via socket UDP.

Grazie mille per il tempo che mi hai dedicato.

Paolo
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Paolo, prego!

paolo79 ha scritto:

se si può e come leggere tramite un web service dati inviati via socket UDP.

La vedo difficile perché un web service, affinché possa essere consumato, impone che i client utilizzino dei protocolli di comunicazione standard.
Quindi sono i client a doversi conformare a tale protocollo di comunicazione.

In questo caso, invece, abbiamo un client che invia dati (grezzi?) via UDP, forse senza usare alcun protocollo standard. In questo caso utilizzare un webservice per leggere quel tipo di dati richiederebbe una certa dose di personalizzazione. E' più facile, a quel punto, crearsi un listerner UDP e fargli interpretare tutto quel che arriva in ingresso, come del resto hai già fatto.

Questo listener può essere creato anche in un'applicazione web e potrebbe inviare dati realtime agli utenti connessi al sito senza neanche dover passare per un database o refreshare la pagina. Per questo genere di cose, cone ASP.NET, si usa SignalR, su cui trovi alcuni articoli qui:
http://www.aspitalia.com/focuson/1300/Speciale-Web-Real-Time-WebSockets-SignalR.aspx

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.