2013-02-20 16 views
6

के साथ एड्रेस एड्रेस क्लास एंडपॉइंट एड्रेस का उदाहरण बनाने की कोशिश कर रहा हूं जहां पैरामीटर में जर्मन उमलॉट है।एंडपॉइंट में जर्मन umlauts net.tcp

उदाहरण के लिए:

EndpointAddress endpointAddress = new EndpointAddress("net.tcp://süd:8001/EmployeeService"); 

यह हमेशा अपवाद है कि दिए गए uri पार्स नहीं किया जा सकता है फेंकता है। मैं एक इनकोडिंग मूल्य के साथ ऊमलायूट को बदलने के लिए कोशिश की है, लेकिन मैं एक ही अपवाद:

अमान्य यूआरआई: होस्ट नाम पार्स नहीं किया जा सकता है।

क्या किसी को भी पहले ही समस्या थी? अग्रिम धन्यवाद।

+0

रूपांतरण कैसा दिख रहा था? अपवाद क्या कहता है? –

+1

'नया एंडपॉइंट एड्रेस (" net.tcp: // süd: 8001/कर्मचारी सेवा ") '.net4.5 पर मेरे लिए ठीक काम करता है। क्या आप पुराने संस्करण का उपयोग कर रहे हैं? – spender

+2

क्या आपने [अंतर्राष्ट्रीय संसाधन पहचानकर्ता (आईआरआई) पार्सिंग सक्षम करने की कोशिश की है (http://msdn.microsoft.com/en-us/library/bb968786.aspx)? [] (http://msdn.microsoft.com/en-us/library/bb882600.aspx) आप [अंतर्राष्ट्रीय डोमेन नाम (आईडीएन) पार्सिंग सक्षम करने की कोशिश भी कर सकते हैं] (http://msdn.microsoft.com/en -US/पुस्तकालय/bb968786.aspx)। [] (http://msdn.microsoft.com/en-us/library/bb882553.aspx) – dtb

उत्तर

4

पार्सर शायद नहीं जानता कि internationalized domain names (आईडीएन) के साथ कैसे काम करना है। यदि आप ऐसे होस्टनाम रखना चाहते हैं, तो आपको अपने आप को Punycode एन्कोडिंग करना होगा। मैं इसे इस्तेमाल किया है नहीं है, लेकिन वहाँ एक मुख्य कार्य IdnMapping.GetAscii कि उपयुक्त लग रहा है -

EndpointAddress endpointAddress = new EndpointAddress(
    "net.tcp://" + IdnMapping.GetAscii("süd") + ":8001/EmployeeService" 
); 

की तरह कुछ शायद काम करेंगे (मुझे माफ कर दो अगर ऐसा नहीं होता, सी # मेरी भाषा नहीं है)।

+0

punycode का उपयोग कर रहा हूँ। मुझे इसके बारे में पता नहीं था। – spender

+0

हॉब्स, उत्तर के लिए धन्यवाद। अब, मुझे एक और समस्या का सामना करना पड़ रहा है। मुझे लगता है कि कारण एक ही है। अगला, मैं डुप्लेक्सChannelFactory का उदाहरण बनाने की कोशिश कर रहा हूं। मेरे पास है: _factory = new DuplexChannelFactory (नया इंस्टेंस कॉन्टेक्स्ट (कॉलबैक कार्यान्वयन), बाध्यकारी, एंडपॉइंट एड्रेस); _channel = _factory.CreateChannel(); (_channel ICommunicationObject के रूप में)। ओपन(); यह ओपन() पर दुर्घटनाग्रस्त हो जाता है।IdnMapping का उपयोग करने के बाद मुझे net.tcp: // xn - sd-xka: 8001/कर्मचारी सेवा मिलती है। ओपन() को निष्पादित करने के बाद यह संदेश के साथ CommunicationException फेंकता है "मेजबान xn - sd-xka के लिए कोई DNS प्रविष्टियां मौजूद नहीं हैं"। धन्यवाद – Nenad

+0

@Nenad यह वही समस्या नहीं है; आप बस उस होस्ट से कनेक्ट नहीं हो सकते जो मौजूद नहीं है। :-P – hobbs

-2

कोशिश आगे के संदर्भ के लिए

string uri = System.Uri.EscapeDataString("net.tcp://süd:8001/EmployeeService"); 

देखो here उपयोग करने के लिए।

1

जैसा कि सुझाव दिया गया है कि आपको इस तरह के यूआरआई का उपयोग करने से पहले आईआरआई और आईडीएन पार्सिंग सक्षम करना होगा। बस एक अतिरिक्त नोट के रूप में

<configuration> 
    <uri> 
     <idn enabled="All" /> 
     <iriParsing enabled="true" /> 
    </uri> 
</configuration> 
2

:

अपने app.config को यह जोड़ें। डब्ल्यूसीएफ ने आईडीएन के लिए समर्थन जोड़ा (दोनों होस्ट सेवा के लिए + डब्ल्यूसीएफ क्लाइंट आईडीएन नाम के साथ एक सेवा से बात कर रहे हैं) .NET 4.5 में। इस documentation के बारे में कुछ जानकारी है।

तो जैसे ही आप अपने ऐप को संकलित करते हैं, उतना ही अपवाद गायब हो जाएगा .नेट 4.5

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