2013-01-11 16 views
17

मैं फिलिप्स ह्यू लाइट्स के लिए सी # लाइब्रेरी लिख रहा हूं। मैं .NET पोर्टेबल सेट में बेस एपीआई रैपर लिखने की कोशिश कर रहा हूं जिस तरह से मैं विंडोज 8/आरटी/डब्ल्यूपी जैसे विभिन्न प्लेटफार्मों के लिए इस लाइब्रेरी का पुन: उपयोग कर सकता हूं। एपीआई स्वयं आरईएसटी का उपयोग कर HTTP पर है, इसलिए HttpWebRequest मेरी अधिकांश ज़रूरतों को पूरा करेगा।.NET पोर्टेबल क्लास लाइब्रेरी और यूडीपी समर्थन

नेटवर्क पुल जो रोशनी को नियंत्रित करता है, वह यूडीपी पर एसएसडीपी का उपयोग करके खोजा जा सकता है। हालांकि, मैं पोर्टेबल क्लास लाइब्रेरी (पीसीएल) में यूडीपी सॉकेट का उपयोग करने का कोई तरीका नहीं ढूंढ पा रहा हूं।

कोई System.Net.Sockets उपलब्ध नहीं है। System.Net नामस्थान में कुछ भी नहीं है जो इसे अनुमति देगा। मैंने DatagramSocket को Windows.Networking.Sockets में सूचीबद्ध किया है लेकिन इंटेलिसेंस में नामस्थान देखने में असमर्थ हूं।

क्या किसी को पता है कि मैं .NET पीसीएल के तहत एसएसडीपी के लिए यूडीपी कार्यक्षमता कैसे प्राप्त कर सकता हूं?

मैं वास्तव में कोर लाइब्रेरी से खोज कार्यक्षमता को अलग नहीं करना चाहता हूं।

अभी मैं .NET 4.5 + SL 5 + WP 8 + .NET for Windows Store को लक्षित कर रहा हूं। मैं इस धारणा के तहत था कि सॉकेट अभी भी उपलब्ध थे।

+0

हां, एक्सबॉक्स 360 ** अनचेक ** है। मैं यह नहीं समझ सकता कि वास्तव में एनसीएल में क्या शामिल होना चाहिए। मैं देखता हूं कि प्रत्येक एमएसडीएन उदाहरण 'System.Net.Sockets' का संदर्भ दे रहा है, फिर भी मुझे _.NET पीसीएल_ में उस तक पहुंच नहीं है। मुझे लगता है कि मुझे खोज कार्यक्रम को वास्तविक कार्यक्रम में ले जाना होगा क्योंकि मुझे पोर्टेबल तरीके से किसी भी रूप में यूडीपी नहीं मिल सकता है। – Erik

+1

.NETCore प्रोफ़ाइल को फिट करने के लिए, किसी वर्ग में प्लेटफ़ॉर्म के बीच * कुछ * समानता होनी चाहिए। एक्सबॉक्स, डब्ल्यूपी 8 और स्टोर के लिए बिल्कुल कोई सॉकेट समर्थन नहीं है, यह बिल्कुल अलग नहीं है। यदि यूडीपी महत्वपूर्ण है तो आप पीसीएल का उपयोग नहीं कर सकते हैं, आपको एक मंच चुनना होगा। –

+1

हां, मेरा मानना ​​है कि मुझे कोर आर्किटेक्चर के लिए इंटरफेस बनाना होगा और फिर प्रत्येक सेट को यूडीपी नेटवर्किंग के लिए विशिष्ट प्लेटफ़ॉर्म पर लागू करना होगा। ऐसा प्रतीत होता है कि पारंपरिक .NET अनुप्रयोगों के लिए 'System.Net.Sockets' है और Windows Store अनुप्रयोगों के लिए' Windows.Networking.Sockets' है। – Erik

उत्तर

5

WinRT और WPF ऐप्स के बीच सॉकेट समर्थन के लिए कोई सामान्य अंतर नहीं है, और इसलिए यह उनको लक्षित करने वाली पीसीएल परियोजनाओं में उपलब्ध नहीं है।

मेरे पास एक पीसीएल लाइब्रेरी है जो डब्ल्यूपीएफ और विनआरटी को लक्षित करती है जो यूडीपी डिस्कवरी नेटवर्क के साथ इंटरैक्ट करता है, और पीसीएल लाइब्रेरी में आईयूडीपीएसकेट इंटरफ़ेस बनाने के साथ मैंने सबसे साफ कार्यान्वयन किया है जो सदस्यों को डेटा भेजने/प्राप्त करने और मल्टीकास्ट से कनेक्ट करने के लिए परिभाषित करता है समूहों। डब्ल्यूपीएफ ऐप एक सिस्टम.Net.Sockets.Socket का उपयोग करके मेरी आईयूडीपीएसकेट लागू करता है, और आरटी ऐप इसे Windows.Networking.Sockets.DatagramSocket का उपयोग करके लागू करता है।

मेरी खोज नेटवर्क क्लाइंट क्लास (पीसीएल प्रोजेक्ट में परिभाषित) का निर्माता एक प्रतिनिधि होता है जिसका उपयोग आईयूडीपीएसकेट का उदाहरण बनाने के लिए किया जाता है। मैं प्रारंभिक IUDPSocket इंस्टेंस में गुजरने के बजाय ऐसा करता हूं ताकि कॉलिंग कोड को यह पता न हो कि किस पोर्ट (ओं) या पता (एस) शामिल हैं।

+0

मैं इसी तरह से समाप्त हो गया। यह एक शर्म की बात है कि आप _SSDP_ के लिए _UDP_ तरीके से 'HttpWebRequest' का उपयोग नहीं कर सकते हैं। – Erik

+0

ऐसे कई प्लेटफॉर्म हैं जो 'सॉकेट' वर्ग का समर्थन करते हैं: नेट, सिल्वरलाइट, विंडोज फोन। फिर भी, कोई पीसीएल प्रोफ़ाइल कक्षा का समर्थन नहीं करती है। –

0

इस MSDN article ने वर्णन किया है, पीसीएल लक्ष्य प्लेटफार्मों के लिए आम विधानसभाओं के लिए सीमित हैं:

एक पोर्टेबल कक्षा लाइब्रेरी परियोजना में, आप प्लेटफार्मों आप लक्षित करना चाहते निर्दिष्ट करें, और के लिए सिर्फ समर्थित विधानसभाओं उन प्लेटफार्मों को आपके प्रोजेक्ट में संदर्भित किया गया है। यदि आप किसी ऐसे असेंबली को संदर्भित करने का प्रयास करते हैं जो आपके द्वारा लक्षित प्लेटफ़ॉर्म के लिए समर्थित नहीं है, तो विजुअल स्टूडियो आपको असंगतता की चेतावनी देता है। कोर असेंबली (mscorlib.dll, System.dll, System.Core.dll, और System.Xml.dll) सभी प्लेटफ़ॉर्म पर समर्थित हैं।

जब आप निर्दिष्ट करें:

के रूप में एक ही लेख के सारांश तालिका में कहा गया है, नेटवर्क कक्षा लाइब्रेरी (एनसीएल) हर मंच लेकिन XBox 360 निम्नलिखित जानकारी के लिए आगे पढ़ने सुराग के लिए समर्थित है प्लेटफॉर्म जिन्हें आप पोर्टेबल क्लास लाइब्रेरी प्रोजेक्ट में लक्षित करना चाहते हैं, उन प्लेटफ़ॉर्म के लिए समर्थित असेंबली स्वचालित रूप से आपके प्रोजेक्ट में संदर्भित की जाती हैं। आपको असेंबली जोड़ने या हटाने की ज़रूरत नहीं है। यदि आप लक्षित प्लेटफॉर्म बदलते हैं तो संदर्भित असेंबली स्वचालित रूप से अपडेट हो जाती हैं।

तो, शायद, आपने प्रोजेक्ट निर्माण के दौरान हर प्लेटफॉर्म का चयन किया था। एक्सबॉक्स 360 को अक्षम करने से आपको एनसीएल और उडप्लिएंट के लिए समर्थन वापस लाया जाना चाहिए। हालांकि, यदि आपको Xbox 360 के लिए भी समर्थन की आवश्यकता है, तो आपके पास दो विकल्प हैं: एक प्रोजेक्ट प्रकार चुनना जो पीसीएल नहीं है या मैन्युअल रूप से यूडीपी समर्थन को लागू करता है।

+1

मैं Xbox 360 को लक्षित नहीं कर रहा हूं। एनसीएल में 'System.Net' शामिल है लेकिन 'System.Net.Sockets' नहीं है। मैं पीसीएल के कारणों को समझता हूं, मैंने सोचा कि 'सॉकेट' को प्रत्येक प्लेटफॉर्म (Xbox के अलावा) में समर्थित किया गया था। ऐसा लगता है कि यह मामला नहीं है। – Erik

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