L'utilizzo di un servizio auto-ospitato è un'opzione praticabile per l'avvio di applicazioni da un URL?

0

Abbiamo un'applicazione fornita da terzi con un pulsante che consente l'apertura di un'altra applicazione che mostra i dati correlati quando vengono premuti (queste applicazioni sono eseguite da società completamente diverse). Tuttavia, l'applicazione con il pulsante non fa altro che l'equivalente di fare clic su un url con una stringa di parametri di query e avvia quindi il comportamento predefinito delle vedove in risposta che è quello di aprire un browser che punta all'URL (l'url può essere qualunque vogliamo).

L'applicazione che vogliamo aprire in risposta non è un'applicazione web; è solo un'applicazione desktop Windows standard.

La soluzione che abbiamo attualmente per questo è creare un piccolo servizio self-hosted utilizzando WebServiceHost in .Net framework 4.0 e per ospitare questo servizio in un'applicazione Windows Form, ma senza un modulo e invece visualizzare un'icona nel vassoio quando è in esecuzione (che sarà sempre).

Quando il servizio viene effettivamente chiamato in esso chiude la pagina web del browser che era stata aperta in risposta all'url e apre l'applicazione desktop popolando i campi con i parametri forniti nella stringa di query.

Tutto sembra funzionare come richiesto ma non sembra un modo molto convenzionale di fare le cose, infatti non sarebbe possibile senza WebServiceHost perché è l'unica cosa che possiamo rispondere all'URL. Utilizziamo una WebHttpBinding. Abbiamo esaminato altre cose come IPC, ecc. Ma tutte richiedono che IIS sia in esecuzione sui computer degli utenti e che non sia un criterio aziendale. Idealmente mi piacerebbe utilizzare un servizio Windows per l'hosting piuttosto che una "tray application" ma WebServiceHost non sembra funzionare (rispondere) in quel contesto.

Cosa pensa qualcuno di questo modo piuttosto anticonvenzionale di fare le cose? Ci sono rischi per la sicurezza associati all'hosting di un servizio come questo? C'è un modo migliore per farlo?

Il codice coinvolto è poco più di:

webServiceHost = new WebServiceHost(typeof(Services.MyService), new Uri("http://localhost:8001/"));
webServiceHost.AddServiceEndpoint(typeof(Contracts.IMyService), new WebHttpBinding(), "/WindowsHost/MyService/");            
webServiceHost.Open();

(potrebbe essere necessario aggiungere un WebHttpBehaviour vuoto) e quindi solo un url come sotto chiamerà il servizio e avvierà il metodo nel servizio (aprire il blocco note in questo esempio).

http://localhost:8001/WindowsHost/MyService/OpenNotePad

public void OpenNotePad()
{
      Process.Start("notepad.exe");
}
    
posta user5202300 07.08.2015 - 16:17
fonte

0 risposte

Leggi altre domande sui tag