2010-01-22 35 views
5

Başka bir işlemden iletişim dinlemek için WCF kullanan bir .NET programımız var. Adlandırılmış borular kullandık.Adlandırılmış Boruları Önleyin Çakışma

ServiceHost host = new ServiceHost(
    typeof(Something), 
    new Uri[] 
    { 
     new Uri("net.pipe://localhost") 
    }); 
host.AddServiceEndpoint(typeof(ISomething), new NetNamedPipeBinding(), "Something"); 
host.Open(); 

Üçüncü taraf .NET programı kuruluncaya kadar kod harika çalıştı. Şimdi açık, "Başka bir boru uç noktası zaten bu adı dinlediğinden," boru adında dinleyemiyor 'net.pipe: // localhost /' mesajıyla başarısız oluyor.

Benim varsayımım, diğer programın zaten adlandırılmış yöneltme kullandığıdır. Bir geçici çözüm var mı yoksa bir bilgisayarda yalnızca bir program adlandırılmış yöneltmeler kullanabilir mi? Diğer sorulardan bir boru için bir "isim" belirleyebilmeniz için izlenim edindim, bu yüzden diğer süreçlerle çakışmıyor, bunu nasıl yapıyorsunuz?

+0

Şu an kullandığınız boruyu kullanarak hangi uygulamanın kullanıldığını öğrenmek için Handle.exe dosyasını [SysInternals] (http://technet.microsoft.com/en-us/sysinternals/default.aspx) adresinden kullanabilir. "Handle.exe net.pipe:" komutunu verin. [Rodney Viana'nın yazısı] 'na bakın. (Http://blogs.msdn.com/b/rodneyviana/archive/2011/03/22/named-pipes-in-wcf-are-named-but-not-by-you-and -en-bulmak-gerçek-windows-object-name.aspx) – mcdon

cevap

14

Aynı anda birden çok adlandırılmış kanalı kullanabilirsiniz. Programlama WCF Hizmetleri kitabından Juval Lowy's ServiceModelEx'a bir göz atın. adı çatışmaları önlemek gerekir

Uri baseAddress = new Uri("net.pipe://localhost/" + Guid.NewGuid().ToString());

: o boruları adlı oluşturur zaman o şöyle görünür kodunu kullanan, göreceksiniz.

+0

Mükemmel. Çok teşekkürler –

+6

Ancak, istemci, sunucu sürümü çalışma sırasında oluşturulduğunda nasıl biliyor? – IneedHelp

+0

İstemciye bir parametre olarak iletebilir veya kayıt defterine yazabilir veya bir (belki de geçici) ayarlar dosyasına koyabilirsiniz. – beppe9000

İlgili konular