Abbiamo un programma .NET che utilizza WCF per ascoltare la comunicazione da un altro processo. Abbiamo usato pipe con nome.Prevenire il conflitto di pipe con nome
ServiceHost host = new ServiceHost(
typeof(Something),
new Uri[]
{
new Uri("net.pipe://localhost")
});
host.AddServiceEndpoint(typeof(ISomething), new NetNamedPipeBinding(), "Something");
host.Open();
Il codice ha funzionato benissimo finché non è stato installato un programma .NET di terze parti. Ora l'open fallisce con un messaggio di "Can not listen on pipe name" net.pipe: // localhost/'perché un altro endpoint di pipe è già in ascolto su quel nome. "
La mia ipotesi è che l'altro programma stia già utilizzando pipe denominate. C'è una soluzione alternativa o solo un programma su un computer utilizza pipe denominate? Prendo l'impressione da altre domande che puoi impostare un "nome" per una pipe in modo che non entri in conflitto con altri processi, come puoi farlo?
È possibile utilizzare Handle.exe da [SysInternals] (http://technet.microsoft.com/en-us/sysinternals/default.aspx) per scoprire quale applicazione sta utilizzando attualmente la pipa denominata. Comando "Handle.exe net.pipe:". Vedi [il post di Rodney Viana] (http://blogs.msdn.com/b/rodneyviana/archive/2011/03/22/named-pipes-in-wcf-are-named-but-not-by-you-and -how-to-find-the-actual-windows-object-name.aspx) – mcdon