2010-01-22 13 views
5

हमारे पास एक .NET प्रोग्राम है जो किसी अन्य प्रक्रिया से संचार सुनने के लिए डब्ल्यूसीएफ का उपयोग करता है। हमने नामित पाइप का इस्तेमाल किया।नामित पाइप्स संघर्ष को रोकें

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

कोड तीसरे पक्ष तक महान काम करता था .NET प्रोग्राम स्थापित किया गया था। अब खुला "पाइप नाम पर नहीं सुन सकता" net.pipe: // localhost/'के संदेश के साथ खुला रहता है क्योंकि एक और पाइप एंडपॉइंट पहले से ही उस नाम पर सुन रहा है। "

मेरी धारणा यह है कि दूसरा प्रोग्राम पहले ही नामित पाइप का उपयोग कर रहा है। क्या कोई कामकाज है या कंप्यूटर के उपयोग पर केवल एक प्रोग्राम पाइप नामित किया जा सकता है? मुझे अन्य प्रश्नों से छाप मिलती है कि आप पाइप के लिए "नाम" सेट कर सकते हैं, इसलिए यह अन्य प्रक्रियाओं के साथ संघर्ष नहीं करता है, आप यह कैसे करते हैं?

+0

वर्तमान में आपके नामित पाइप का उपयोग कर कौन सा एप्लिकेशन उपयोग कर रहा है यह जानने के लिए [SysInternals] (http://technet.microsoft.com/en-us/sysinternals/default.aspx) से हैंडल.एक्सई का उपयोग कर सकते हैं। कमांड "हैंडल.एक्सई नेटपाइप:"। देखें [रॉडनी वियाना की पोस्ट] (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

उत्तर

14

आप एक समय में कई नामित पाइप का उपयोग कर सकते हैं। अपनी पुस्तक प्रोग्रामिंग डब्ल्यूसीएफ सेवाओं से जुवाल लोवी की सेवा मॉडलेल पर एक नज़र डालें।

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

किस नाम का संघर्ष से बचना चाहिए: आप जब वह पाइप नामित बनाता है वह कोड है कि तरह दिखता का उपयोग करता देख सकेंगे।

+0

बिल्कुल सही। बहुत बहुत धन्यवाद –

+6

लेकिन अगर यह रन पर उत्पन्न होता है तो क्लाइंट सर्वर पता कैसे जानता है? – IneedHelp

+0

आप इसे क्लाइंट के पैरामीटर के रूप में पास कर सकते हैं या इसे रजिस्ट्री में लिख सकते हैं या इसे एक (शायद अस्थायी) सेटिंग्स फ़ाइल में डाल सकते हैं। – beppe9000

संबंधित मुद्दे