Ho un timer in un servizio Windows (.NET C#). Devo essere in grado di cambiare il valore trascorso da un programma esterno. Se il timer è attualmente in esecuzione, devo essere in grado di ridurre il valore di tempo trascorso da un programma esterno. Stavo pensando di avere un metodo pubblico nel servizio che cambierebbe il valore trascorso del timer e riavvia il timer, ma un programma esterno può chiamare un metodo pubblico su un servizio Windows?Chiamare un metodo pubblico sul servizio Windows
risposta
In breve, non è possibile chiamare direttamente le funzioni in un altro processo. Il processo che contiene la funzione a cui si desidera accedere (in questo caso, il servizio di Windows) dovrà esporlo tramite una sorta di IPC (comunicazione tra processi). Quale tipo di IPC scelto dipenderà probabilmente dalla complessità della comunicazione e dal fatto che il "client" sia un'applicazione .NET.
Se le vostre esigenze sono semplici (ad esempio, l'impostazione di un valore del timer) o se il client non utilizza .NET, l'uso di named pipe (o TCP, se è necessario accedere al servizio da un'altra macchina fisica) è probabilmente il vostro migliore scommessa. Sia named pipe e TCP ti danno un flusso che è possibile scrivere messaggi e leggere dall'altra parte.
Se è necessario esporre molte funzioni diverse o inviare e ricevere tipi di dati complessi e se si utilizza .NET su entrambe le estremità, .NET Remoting o WCF è probabilmente la scelta migliore. .NET Remoting è più semplice ma ha più vincoli; WCF è molto flessibile ma ha una curva di apprendimento più ripida.
Non è possibile chiamare direttamente un metodo in un processo di servizio Windows, ma è possibile che il servizio Windows esponga questa funzione come servizio WCF, ad esempio. Il servizio Windows agirà anche da host di servizio. Questo è possibile e non complicato.
Sì, questo è possibile.
È possibile considerare di creare un endpoint NetNamedPipe sul proprio servizio e controllare il servizio tramite tale interfaccia.
NetNamedPipeBinding binding = new NetNamedPipeBinding();
MyService myService = new MyService(binding,
new EndpointAddress("net.pipe://localhost/MyService"));
myService.ResetTimer(30);
MyService non sta prendendo 2 strumenti .. –
I servizi meno recenti (non WCF) possono utilizzare .NET Remoting. Date un'occhiata a here per alcune informazioni su come iniziare. Questo è il modo di comunicazione pre-WCF tra le applicazioni oltre i limiti del processo.
- 1. Chiamare Environment.Exit in un servizio Windows
- 2. Come chiamare un servizio Windows da asp.net
- 3. Come chiamare il metodo dall'esecuzione del servizio Windows
- 4. Come chiamare un metodo di servizio Web?
- 5. Perché non dovremmo chiamare il metodo pubblico da un altro pubblico?
- 6. Chiamare il metodo di controllo AngularJs da un altro servizio
- 7. Perché chiamare base.OnStop() quando il servizio di Windows viene arrestato?
- 8. Collegamento sul desktop per riavviare un servizio Windows
- 9. Come chiamare una WebAPI dal servizio di Windows
- 10. Chiamare setVolumeControlStream da un servizio
- 11. Java: Chiamare un metodo eccellente, che chiama un metodo override
- 12. Chiamare un metodo NSTimer
- 13. Devo implementare il metodo Stop in un servizio Windows?
- 14. Scala: Specifica il metodo pubblico prevalente metodo
- 15. Principi SOA - un servizio dovrebbe chiamare un altro servizio?
- 16. Perché è possibile sovrascrivere un metodo protetto con metodo pubblico?
- 17. Chiamare un metodo su un modulo Rubino
- 18. Invia messaggio Windows a un servizio Windows
- 19. È possibile chiamare un metodo sul tipo che si passa al metodo generico?
- 20. Se un metodo API pubblico restituisce InputStream o byte []
- 21. router ui angolare: metodo sul controller di chiamare da onEnter
- 22. Impossibile aggiungere un riferimento a System.Web all'applicazione Servizio Windows
- 23. Avvia un servizio Windows disabilitato?
- 24. Chiamare un metodo asincrono da un metodo non asincrono
- 25. Come chiamare un servizio Web da jQuery
- 26. Chiamare un servizio all'avvio in un'applicazione Play
- 27. Chiamare un servizio RESTful con * molti * parametri
- 28. chiamare un metodo del componente figlio
- 29. Come interrompere un servizio con il metodo OnStart?
- 30. Un repository dovrebbe chiamare un altro repository? O un repository dovrebbe chiamare un livello di servizio?
.NET Remoting è considerato una tecnologia legacy e non è consigliato per il nuovo sviluppo (http://msdn.microsoft.com/en-us/library/72x4h507%28VS.85% 29.aspx). Windows Communication Foundation (WCF) è il modo approvato per farlo. Se non hai familiarità con WCF, guarda questo video (http://www.dnrtv.com/default.aspx?showNum=135) per un'introduzione alla tecnologia. –