2010-07-09 10 views
9

Se la mia applicazione si avvia, controllo prima se esiste già un'istanza dell'app e, in caso affermativo, concentro l'istanza in esecuzione e termino il processo appena creato. Lo faccio con una named pipe che viene registrata tramite WCF. Funziona bene finora.Named Pipes isolati nelle sessioni Terminal Server

Ora la mia app verrà anche utilizzata in un ambiente Terminal Server. È giusto che i named pipe siano a livello di sistema, quindi devo cambiare la logica di avvio per non focalizzare le istanze di altri utenti (cosa sicuramente non funzionerà ma interromperà la mia applicazione) o Terminal Server (2003R2) isolare le associazioni WCF per ogni sessione TS?

Non riesco ancora ad accedere all'ambiente produttivo, ecco perché inserisco questa domanda. Forse qualcuno può darmi una risposta a questa domanda?

Aggiornamento

Attraverso another post ho riguardante l'avvio app, ho imparato che ci sia un modo più conveniente per gestire l'avvio dell'applicazione singola utilizzando un mutex, che può essere utilizzato a livello di sistema o su una sessione di terminale base.

La domanda tuttavia è aperta in ogni caso e forse qualcuno che ha una buona conoscenza della WCF può rispondere. Sarebbe interessante.

risposta

8

I tubi denominati sono di sistema. Non esiste un prefisso "Globale" o "Locale" come per altri tipi di oggetto del kernel.

Questo perché le pipe denominate vengono utilizzate come parte di una risorsa di rete, ad esempio myComputer\pipename. Gli oggetti che ottengono i prefissi "Globale" e "Locale" (eventi, semafori, mutex, timer, mappature dei file e lavori) sono confinati al computer e non possono essere utilizzati da un altro computer.

1

Questo articolo spiega come limitare named pipe per una singola sessione di terminal server: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365600(v=vs.85).aspx

Per impedire agli utenti remoti o gli utenti su una diversa sessione di Servizi Terminal di accedere a una named pipe, utilizzare il SID di accesso sul DACL per il tubo. Il SID di accesso viene utilizzato anche negli accessi run-as; è il SID utilizzato per proteggere lo spazio dei nomi dell'oggetto per sessione. Per ulteriori informazioni, vedere Ottenere il SID di accesso in C++. https://msdn.microsoft.com/en-us/library/windows/desktop/aa446670(v=vs.85).aspx