WebSocket Client come servizio sempre in esecuzione

1

La società con la quale ci stiamo integrando è un'azienda di sicurezza delle porte che realizza schede RFID e scanner per porte. Esegui la scansione della tua carta, la porta si apre e ti lascia entrare. Permettono l'integrazione di terze parti tramite il loro server websocket. Pubblicano "Eventi" sul loro server. "Bob Foobar ha scansionato la sua carta al portman # 14 alle 8:12 del 2/26/2018" tutto in formato json. Abbiamo bisogno di ascoltare costantemente tutti questi eventi e registrarli nel nostro database.

Diamo ai nostri clienti due opzioni. Cloud ospitano il nostro servizio in un ambiente SAAS multi-tenant. Ma permettiamo anche ai clienti di auto-ospitare se vogliono. Se avessimo solo l'opzione SAAS, questa sarebbe una soluzione semplice. Basta creare un servizio Windows che viene eseguito sui nostri server per iscriversi al proprio server websocket. Ma, per i nostri clienti self-host, speriamo di evitare di chiedere loro di installare un servizio di Windows. Stiamo cercando altri modi per farlo accadere. Ma, inoltre, non vogliamo chiedere loro di aprire una finestra del browser e tenerla aperta.

Devo iscrivermi a una websocket remota e ho bisogno di farlo in modo che sia sempre in ascolto, anche senza l'interazione dell'utente. Questo non è un servizio di tipo chat che è incentrato sull'utente. Dobbiamo essere sempre in ascolto degli eventi così come appaiono sul server remoto.

Ho letto su System.Net.WebSockets e ho visto molti esempi. Ho creato un proof-of-concept come servizio di Windows e funziona.

Ma ... un servizio Windows è davvero l'unico modo per iscriversi sempre al server Websocket remoto senza l'interazione dell'utente? Quali altre opzioni ho? E, è possibile eseguire questo rigorosamente utilizzando IIS?

    
posta Casey Crookston 26.02.2018 - 20:48
fonte

2 risposte

2

Penso che ci siano 3 o 4 tipi di processo:

  • Applicazioni avviate da un utente
  • Le applicazioni sono state avviate automaticamente quando un utente effettua l'accesso
  • I servizi sono stati avviati all'avvio di O / S, prima che l'utente esegua l'accesso
  • (driver di dispositivo)

Se vuoi che il tuo processo venga eseguito:

  • Prima che un utente si colleghi
  • e dopo che un utente ha effettuato l'accesso
  • e dopo che un utente si è disconnesso

... quindi deve essere eseguito come servizio ("sistema"), anziché come applicazione ("utente").

Alternative:

  • Eseguilo come plug-in di un servizio esistente - in questo caso, l'architettura e l'amministrazione (ad esempio l'installazione) del plug-in e il relativo contesto di sicurezza dipendono dal servizio (ad esempio IIS)
  • Eseguilo come applicazione utente, se non ti dispiace che l'utente sia in grado di ucciderlo e non ti dispiace avviare e arrestare quando l'utente esegue il login o l'uscita
risposta data 26.02.2018 - 21:04
fonte
1

Il primo problema che vedo con la soluzione SAAS o la soluzione basata su client è il modo in cui gestisci i disconnessi. Non sono un esperto di websocket (tutt'altro), ma non credo che ci sia qualcosa di integrato in esso per mantenere un abbonamento. Potrei sbagliarmi, ma una ricerca superficiale non ha rivelato nulla. Se hai veramente bisogno di catturare ogni messaggio, questo è un grosso problema in quanto devi aspettarti dei tempi di inattività del tuo client e / o della rete. Hai considerato come recupererai i messaggi persi? Quando ho giocato un po 'con questi, ho scoperto che le connessioni non erano terribilmente stabili e sarebbero cadute inaspettatamente (era un po' di tempo fa: YMMV.) Tu, almeno, dovrai assicurarti che il tuo cliente possa ristabilirsi da solo se perdi la connessione.

Per quanto riguarda il funzionamento, è sufficiente creare un'applicazione client. Lo fornirei ai tuoi clienti e darò loro informazioni su come eseguirlo come servizio in Windows. Il tutto sembra piuttosto fragile. Non tanto perché ciò che stai cercando di fare, ma perché devi dipendere da websocket. Penso che possano essere utili se combinati con un'API appropriata che ti permetta di recuperare informazioni su richiesta ma da sole, penso che avrai problemi.

    
risposta data 26.02.2018 - 23:54
fonte

Leggi altre domande sui tag