2009-05-08 12 views
9

मैं चाहता हूं कि दिया गया एप्लिकेशन (विंडोज़ सेवा) एक रिमोटिंग सर्वर के साथ-साथ क्लाइंट को रिमोट करने के रूप में कार्य करे। उत्पादन में मैं अपने आवेदन के दो उदाहरणों को एक दूसरे की निगरानी .NET Remoting पर चलाऊंगा और तदनुसार विफलताओं की रिपोर्ट करूंगा।चैनल 'टीसीपी' पहले ही पंजीकृत है

मैंने एक मूल टुकड़े लिखे हैं, और "चैनल 'टीसीपी' पहले ही पंजीकृत है" अपवाद .. मैं चैनल कॉन्फ़िगरेशन प्रोग्रामेटिक रूप से सेट करना चाहता हूं।

उत्तर

7

एक विशिष्ट पोर्ट नंबर वाला एक चैनल केवल एक एप्लिकेशन उदाहरण द्वारा बनाया जा सकता है। आपको प्रत्येक उदाहरण के लिए अलग-अलग पोर्ट नंबर और चैनल नामों का उपयोग करने की आवश्यकता है।

इसके लिए अलग चैनल टेम्पलेट्स का उपयोग करने की आवश्यकता है (यदि आप टेम्पलेट का उपयोग कर रहे हैं?)।

+0

में सर्वर/क्लाइंट चाहता हूं पोर्ट बंदरगाह हैं तरंग .. –

+0

@ खुर्रम अज़ीज़ - तो प्रत्येक उदाहरण अलग-अलग बंदरगाहों को खोलता है (प्रत्येक उदाहरण के बजाय एकाधिक बंदरगाह खुलता है, लेकिन अलग-अलग उपयोग करता है)? – stevehipwell

+0

@ खुर्रम अज़ीज़ - क्या आपके पास अलग-अलग नामों का उपयोग करके दोनों चैनल हैं? – stevehipwell

2

आप AppDomain प्रति बार एक ही पोर्टनंबर के साथ एक ही चैनल बना सकते हैं। क्या यह गलत है?

+0

ऐसा लगता है ... Service1 है "VitalSigns" सर्वर पोर्ट 9001 पर सुनने और Service2 "VitalSigns" सर्वर पोर्ट 9002 पर सुन Service1 Service2 का महत्वपूर्ण संकेत की जाँच करेगा और सेवा 2 की जाँच करेगा है सेवा 1 यदि मैं एक उदाहरण में सर्वर नहीं चलाता और अन्य की जांच करता हूं तो यह ठीक काम करता है ... लेकिन मैं प्रत्येक –

12

जैसा कि अन्य ने कहा है, यदि आप चैनल का नाम निर्दिष्ट नहीं करते हैं, तो डिफ़ॉल्ट रूप से कोड "टीसीपी" का उपयोग करता है और प्रत्येक चैनल के पास एक अद्वितीय नाम होना चाहिए: इसलिए आपके द्वारा खोले जाने वाले प्रत्येक चैनल के लिए एक अद्वितीय नाम निर्दिष्ट करें ...

int tcpPort = 52131; 
    // ------------------------------------------------------------ 
    BinaryServerFormatterSinkProvider serverProv = 
     new BinaryServerFormatterSinkProvider(); 
    serverProv.TypeFilterLevel = TypeFilterLevel.Full; 
    RemotingConfiguration.CustomErrorsMode = CustomErrorsModes.Off; 

    serverProv.TypeFilterLevel = TypeFilterLevel.Full; 
    IDictionary propBag = new Hashtable(); 
    // ----------------------------------------- 
    bool isSecure = [true/false]; 
    propBag["port"] = tcpPort ; 
    propBag["typeFilterLevel"] = TypeFilterLevel.Full; 
    propBag["name"] = "UniqueChannelName"; // here enter unique channel name 
    if (isSecure) // if you want remoting comm to be secure and encrypted 
    { 
     propBag["secure"] = isSecure; 
     propBag["impersonate"] = false; // change to true to do impersonation 
    } 
    // ----------------------------------------- 
    tcpChan = new TcpChannel(
     propBag, null, serverProv); 
    ChannelServices.RegisterChannel(tcpChan, isSecure); 
    // -------------------------------------------- 

    string uRI = MyUniversalResourceIndicatorName; 
    // --------------------------------------------- 

    RemotingConfiguration.RegisterWellKnownServiceType(
     typeof(ImportServiceManager), uRI , 
     WellKnownObjectMode.SingleCall); 
+1

"int tcpPort = 82131;" WTF। 82131, 65535? – Behrooz

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