Un buon meccanismo di trasmissione per le applicazioni .net interne per annunciare la loro posizione e versione?

StackOverflow https://stackoverflow.com/questions/1821513

Domanda

Vorrei fornire un gran numero di applicazioni .net interne con un modo leggero per annunciare che vengono utilizzate. Il mio obiettivo è tenere traccia di quali utenti potrebbero beneficiare dei check-in di supporto e / o promemoria per l'aggiornamento.

Questo è su una rete interna. C'è sicuramente la connettività IP tra tutte le macchine, e probabilmente UDP. (Ma probabilmente non multicast.)

Scrivere in una condivisione interna nota o caricare un URL noto sarebbe una possibilità, ma vorrei minimizzare l'impatto sull'applicazione stessa nel modo più completo possibile, anche a spese dell'affidabilità. Quindi preferirei non rischiare un timeout (ad esempio se accedo a una risorsa centralizzata e questa è scomparsa) e idealmente preferirei non avviare nemmeno un thread di lavoro.

Sarebbe anche bello consentire più ascoltatori, che è un'altra ragione per cui sto pensando di trasmettere piuttosto che invocare un servizio.

Esiste una sorta di meccanismo di trasmissione "ignora e dimentica" che potrei usare in modo sicuro ed efficace per questo?

È stato utile?

Soluzione

Ci sono certamente molte opzioni per questo, ma una che è molto facile da implementare e soddisfa i tuoi criteri è un Servizio web asincrono chiamata.

Questo non richiede di avviare un thread di lavoro (il Framework lo farà dietro le quinte). Invece di utilizzare una delle opzioni descritte in quel link per recuperare il risultato, semplicemente ignora il risultato poiché non ha senso per l'app chiamante.

Altri suggerimenti

Ho fatto qualcosa di simile, anche se non esattamente un "braodcast"

Ho uno strumento interno a diversi non tecnici nell'uso dell'azienda. Ho controllato una condivisione di rete per un determinato EXE (lo stesso EXE che avresti scaricato se volessi usarlo) e confronta la versione # di quel file con l'assembly in esecuzione. Se quello sulla rete è più recente, avvisa l'utente di scaricare quello nuovo.

Molto più semplice del tentativo di impostare un aggiornamento automatico per qualcosa che verrà utilizzato solo all'interno dello stesso edificio come me.

Se l'aggiornamento non è un problema (ovvero non ci sono casi in cui è meglio usare la vecchia versione), puoi fare quello che ho fatto con qualcosa di simile:

L'applicazione che le persone effettivamente lanciano è un programma di aggiornamento, controlla la versione del file e il timestamp su una condivisione di rete e, se esiste una versione più recente, lo copia nella directory del programma. Quindi esegue il programma (sia che sia stato aggiornato o meno).

var current = new FileInfo(local);
var latest = new FileInfo(remote);

if (!current.Exists)
    latest.CopyTo(local);

var currentVersion = FileVersionInfo.GetVersionInfo(local);
var latestVersion = FileVersionInfo.GetVersionInfo(remote);

if (latest.CreationTime > current.CreationTime || latestVersion.FileVersion != currentVersion.FileVersion)
    latest.CopyTo(local, true);

Process.Start(local)

Ho anche il programma stesso per verificare se il programma di aggiornamento deve essere aggiornato (poiché il programma di aggiornamento non può aggiornarsi a causa dei blocchi dei file)

Dopo alcuni esperimenti, ho ottenuto buoni risultati usando Win32 mailslot .

Non esiste un wrapper gestito ufficiale, ma le funzioni sono semplici da usare tramite PInvoke, come dimostrato in esempi come questo .

L'uso di un mailslot "di dominio" fornisce un vero meccanismo di trasmissione, consentendo più ascoltatori e nessun requisito per un server ben noto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top