विंडोज 8 में मेट्रो ऐप एक ही मशीन पर बैकएंड डेस्कटॉप ऐप के साथ कैसे संवाद कर सकता है?


120

ऐसी स्थिति में जहां आपके पास विंडोज़ 8 के लिए नई मेट्रो शैली के ऐप्स का उपयोग करके यूआई फ्रंटेंड बनाया गया है, और यह उसी स्थानीय मशीन (जैसे विंडोज़ सेवा ऐप) पर डेस्कटॉप पर चलने वाले .NET एप्लिकेशन के साथ संवाद करना पसंद करेगा।

मेट्रो ऐप और डेस्कटॉप ऐप के बीच इंटरप्रोसेस संचार के कौन से रूप उपलब्ध हैं?

विजुअल स्टूडियो टीम के पावेल मिनावे का धन्यवाद, जिन्होंने कुछ टिप्पणी में यहां कुछ प्रारंभिक जानकारी दी है:

मार्टीन लवेल के अनुसार, इसके लिए कोई जानबूझकर तंत्र नहीं है, और इसके लिए इस्तेमाल किए जाने वाले कुछ जानबूझकर प्रतिबंधित हैं। नामांकित पाइप वहाँ नहीं हैं, उदाहरण के लिए, और न ही मेमोरी मैप की गई फ़ाइलें हैं। सॉकेट्स (सर्वर सॉकेट सहित) हैं, लेकिन लोकलहोस्ट से कनेक्ट होने पर, आप केवल उसी ऐप से कनेक्ट कर सकते हैं। आप साझा किए गए "ज्ञात फ़ोल्डर" (दस्तावेज़, चित्र आदि) में से एक में सामान्य फ़ाइलों का उपयोग कर सकते हैं, लेकिन यह एक काफी कच्चा हैक है जो मतदान की आवश्यकता है और उपयोगकर्ता को दिखाई देता है। - इस मुद्दे पर टिप्पणी करते हुए पावेल मिनेव

इसलिए सामान्य दृष्टिकोणों में असफल होने के कारण मैं वेब सेवाओं का उपयोग करने या किसी डेटाबेस में पढ़ने / लिखने के बारे में सोच रहा था ताकि संचार के कुछ प्रकार प्राप्त हो सकें, दोनों एक ही मशीन पर चलने वाली प्रक्रियाओं के दौरान ओवरकिल की तरह प्रतीत होते हैं।

क्या मैं यहाँ समझदारी का प्रयास कर रहा हूँ? मैं एक मौजूदा सेवा के लिए एक मेट्रो ऐप की आवश्यकता देख सकता हूं जो डेस्कटॉप पर चल रही है। या फिर डेस्कटॉप पर चलने वाले फ्रंट यूआई के लिए WPF का उपयोग करना बेहतर है (यानी एक गैर-मेट्रो ऐप)।


2
एक स्थानीय WCF सेवा के बारे में क्या?
ग्लीनो सेप

2
@ ग्लेनो जो प्रश्न में "वेब सेवाओं का उपयोग करने की सोच" को कवर किया जाएगा। उस ने कहा, मुझे आश्चर्य है कि अगर यह भी काम करेगा - यदि .NET कोर में प्रदान की जाने वाली WCF क्लाइंट लाइब्रेरी का कार्यान्वयन WinRT सॉकेट्स के शीर्ष पर बनाया गया है, तो संभवतः वही "कोई लोकलहोस्ट" प्रतिबंध लागू नहीं होगा। इसे जांचने की जरूरत है।
पावेल मिनेव

1
ऐसा लग रहा है कि मेट्रो में प्रतिबंध के कारण WCF की नेटनेमपाइपबाइंडिंग और नेटटैपबाइंडिंग (लोकलहोस्ट से अधिक) वैसे भी उपलब्ध नहीं होगी। यह वेब सेवाओं या MSMQ बाइंडिंग को छोड़ देगा? यकीन नहीं होता कि क्या ईमानदार होने के लिए मेट्रो में डब्ल्यूसीएफ खुद उपलब्ध है।
dodgy_coder

6
मुझे अपने प्रश्न को चारों ओर घुमाएं और आपसे पूछें: क्या होगा यदि डेस्कटॉप सेवा जिसके साथ आप संवाद कर रहे हैं वह मौजूद नहीं है? याद रखें कि आपका एप्लिकेशन केवल स्टोर से इंस्टॉल किया जा सकता है और इस प्रकार यह डेस्कटॉप सेवा की उपस्थिति पर भरोसा नहीं कर सकता है।
ReinstateMonica Larry Osterman

3
ऐसा प्रतीत होता है कि उद्यम कस्टम ऐप्स को साइडलोड कर सकते हैं और विंडोज स्टोर को बायपास कर सकते हैं। यदि ऐसा है, तो यह समझ में आता है कि आप यह मान सकते हैं कि कुछ अनुप्रयोग एंटरप्राइज एनवर्जन में चल रहे थे। उस ने कहा, मुझे लगता है कि मूल पोस्टर को अपने उद्देश्यों के लिए एक डेस्कटॉप WPF दृश्यपटल का उपयोग करना चाहिए।
अंकुर गोयल

जवाबों:


54

मैं अपने मौजूदा प्रोजेक्ट को अभी Win8 में पोर्ट कर रहा हूं। इसमें विंडोज़ सेवा और ट्रे एप्लिकेशन शामिल हैं जो NamedPipes WCF के माध्यम से एक दूसरे से बात कर रहे हैं। जैसा कि आप पहले से ही जानते हैं कि मेट्रो नामित पाइपों का समर्थन नहीं करता है। मैं पूर्ण द्वैध कनेक्शन के लिए TcpBinding का उपयोग कर समाप्त हुआ।

यह पोस्ट वर्णन करती है कि कार्यक्षमता क्या समर्थित है।

मेरे WCF सर्वर है कि मेट्रो ग्राहक उपभोग कर सकते हैं का नमूना है यहाँ

यह भी ध्यान रखें कि आप मेट्रो में सिंक्रोनस WCF का उपयोग नहीं कर सकते हैं। आपको टास्क- आधारित आवरण का उपयोग करना होगा जो केवल अतुल्यकालिक है।

और सवाल करने के लिए धन्यवाद। मैं मेरे लिए अच्छा शुरुआती बिंदु था :)


7
इसके लिए धन्यवाद ... यह एक बड़ी मदद है। इसके बजाय एक व्यावहारिक जवाब देखने के लिए अच्छा है कि यह नहीं किया जाना चाहिए / नहीं किया जा सकता है।
dodgy_coder

1
यह एक बेवकूफी भरा सवाल हो सकता है ... लेकिन आप अपने नमूने का उपयोग करके लोकलहोस्ट से जुड़ सकते हैं या नहीं? जो प्रश्न आप लिंक करते हैं, वह दृश्य स्टूडियो के आंतरिक भाग को दिखाता है (मैंने इसे रास्ते से हटा दिया है, लेकिन अगर मैं गलत हूं, तो कृपया मुझे सुधारें)। क्या WCF (स्थानीयहोस्ट के साथ संयुक्त) WCF के बाहर काम करता है?
dzendras

1
@ डेज़ेंड्र्स ज़रूर, यह काम करेगा। यह लोकलहोस्ट के साथ भी काम करेगा।
विशेषज्ञ

3
मुझे शक है कि इस तरह एक ऐप स्टोर प्रमाणीकरण पारित करेगा, हालांकि।
Ani

6
यदि ऐसा कुछ भी नियम है, तो मुझे लगता है कि उद्धृत किया जा सकता है "3.9 सभी एप्लिकेशन तर्क से उत्पन्न होना चाहिए, और में रहना चाहिए, आपका ऐप पैकेज आप ऐप को कोड के गतिशील समावेशन के किसी भी रूप के माध्यम से पैक की गई सामग्री को बदलने या विस्तारित करने का प्रयास नहीं करना चाहिए। वह डेटा जो परिवर्तन करता है कि एप्लिकेशन विंडोज रनटाइम के साथ कैसे इंटरैक्ट करता है, या स्टोर पॉलिसी के संबंध में व्यवहार करता है। उदाहरण के लिए, किसी दूरस्थ स्क्रिप्ट को डाउनलोड करने और उसके बाद आपके ऐप पैकेज के स्थानीय संदर्भ में उस स्क्रिप्ट को निष्पादित करने की अनुमति नहीं है। "
Ani

38

एक // बिल्ड / सेशन के अंत में मैंने इस तरह के कई सवाल पूछे थे। एलेस होलेक, जो निष्पादन बड़े चित्र सत्रों में से एक था, उन्हें संभालने के लिए दर्शकों से बाहर आया। यदि आप C ++ डेवलपर नहीं हैं, तब भी उस सत्र को डाउनलोड करें और Q & A. http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C देखें

मेट्रो ऐप डेस्कटॉप ऐप या मशीन पर इंस्टॉल की जा रही सेवाओं पर भरोसा नहीं कर सकते हैं। और डेस्कटॉप ऐप्स चल रहे मेट्रो ऐप्स पर भरोसा नहीं कर सकते, क्योंकि उन्हें किसी भी समय निलंबित किया जा सकता है। आपको अलग तरह से सोचना शुरू करना होगा। इस पर एलेक को सुनें।


6
यह सटीक सवाल वीडियो में 47:20 पर पूछा गया लगता है।
पावेल मिनेव

3
... और एक और 55:00 बजे। जवाब, आम तौर पर, बोल, लगता है "आप ऐसा नहीं कर सकते"।
पावेल मिनावे

1
@dodgy_coder मुझे यकीन नहीं है कि WCF / TCP (या HTTP) एक ही मशीन पर काम करेगा। यदि सैंडबॉक्स आपको localhostटीसीपी सॉकेट के माध्यम से सीधे कनेक्ट करने की अनुमति नहीं देता है , तो यह आपको डब्ल्यूसीएफ के माध्यम से ऐसा करने की अनुमति क्यों देगा?
पावेल मिनेव

2
दिलचस्प है, शेयर कॉन्ट्रैक्ट के माध्यम से दो मेट्रो ऐप के बीच संचार के लिए समर्थन में बनाया गया है, लेकिन यह क्लिपबोर्ड के उपयोग के समान है, और एक स्रोत ऐप से एक लक्ष्य ऐप के लिए एक-तरफ़ा स्थानांतरित करने के बजाय, एक दो कहने के लिए। -वे संचार प्रोटोकॉल।
dodgy_coder 3

4
मुझे लगता है कि साइड-लोड किए गए एलओबी मेट्रो ऐप्स को स्थापित डेस्कटॉप ऐप या सेवा के आधार पर कोई समस्या नहीं होगी। मेरा मानना ​​है कि यह बहुत ही व्यावहारिक परिदृश्य का समर्थन नहीं किया जाएगा। सिल्वरलाइट के साथ, हमने डेस्कटॉप / देशी इंटरॉप क्षमताओं में धीरे-धीरे वृद्धि देखी ... मुझे इन परिदृश्यों के साथ कुछ निश्चित है (नामित पाइप, या मेमोरी-मैप की गई फ़ाइलें, या कुछ और ...) का समर्थन किया जाएगा (मार्गदर्शन डॉक्स के साथ) भविष्य में।
डेविड क्यूकेया

11

ध्यान दें कि विंडोज 8.1 अपडेट के साथ, .NET स्टोर 4.5 के लिए C # में लिखे गए विंडोज स्टोर ऐप और डेस्कटॉप घटकों के बीच संचार अब आधिकारिक तौर पर एंटरप्राइज़ परिदृश्यों में साइड-लोडेड एप्लिकेशन के लिए समर्थित है:

साइड लोडेड विंडोज स्टोर एप्स के लिए ब्रोकेड विंडोज रनटाइम कंपोनेंट्स

उद्धरण के लिए:

यह स्वीकार करते हुए कि महत्वपूर्ण व्यावसायिक कार्यों और नियमों को मौजूदा सॉफ़्टवेयर परिसंपत्तियों में सन्निहित किया गया है और उद्यमों के पास विभिन्न प्रकार के परिदृश्य हैं, जिनके लिए नई एप्लिकेशन शैली अत्यधिक उत्पादक होगी, विंडोज 8.1 अपडेट में साइड लोडेड के लिए ब्रोकेर्ड विंडोज रनटाइम घटकों नामक एक नई सुविधा शामिल है। अनुप्रयोग। विंडोज स्टोर ऐप में इस कोड के साथ बातचीत करते समय मौजूदा डेस्कटॉप सॉफ़्टवेयर परिसंपत्तियों को एक प्रक्रिया (डेस्कटॉप घटक) में चलाने की क्षमता का वर्णन करने के लिए हम IPC (अंतर-प्रक्रिया संचार) शब्द का उपयोग करते हैं। यह एंटरप्राइज़ डेवलपर्स के लिए एक परिचित मॉडल है क्योंकि डेटा बेस एप्लिकेशन और विंडोज़ में एनटी सर्विसेज का उपयोग करने वाले एप्लिकेशन एक समान मल्टी-प्रोसेस आर्किटेक्चर साझा करते हैं।

हालांकि इस दृष्टिकोण को लागू करना शुरू में जटिल पक्ष पर थोड़ा सा है, यह विंडोज स्टोर और डेस्कटॉप घटकों में गहन एकीकरण की अनुमति देता है। बस ध्यान रखें कि कुछ समय के लिए, यह सार्वजनिक विंडोज स्टोर प्रमाणीकरण पारित नहीं करेगा।


5

InfoQ पर एक लेख है कि प्रोटोकॉल हैंडलर्स के साथ शिथिल युग्मित मेट्रो ऐप कैसे बनाएं । यह एक ऐसी चीज है जो लंबे समय तक विंडोज द्वारा समर्थित है और एक डेस्कटॉप एप्लिकेशन को प्रोटोकॉल हैंडलर के रूप में पंजीकृत कर सकता है और शायद मेट्रो एप्लिकेशन इस तंत्र के माध्यम से संवाद कर सकता है।

अगर यह संभव है तो मुझे कोई अंदाजा नहीं है, लेकिन यह देखना दिलचस्प हो सकता है।


लेख कहता है: "जिस तरह से आप मेट्रो में ऐसा कर सकते हैं [एक अलग एप्लिकेशन में किसी अन्य वर्कफ़्लो पर कूदें - क्योंकि आपका ऐप छोटा और अत्यधिक फ़ोकस होने वाला है] प्रोटोकॉल का लाभ उठाता है। प्रोटोकॉल के ऊपर हमारे उदाहरण के लिए ऐसा लग सकता है। "एक्मे स्टॉक खरीद: // ग्राहक = 123 & शेयर = XYZ" "। - तकनीकी रूप से इसका क्या अर्थ है, "प्रोटोकॉल का लाभ उठाना"?
लूमी

इस दृष्टिकोण के साथ समस्या यह है कि यह केवल एक ही तरीका है संचार।
विशेषज्ञ

3

क्रिस्टोफ़ नसेरे ने स्थानीय फ़ाइलों का उपयोग करने के लिए एक बल्कि हैक करने के तरीके के बारे में ब्लॉग किया है । परिणाम दो ऐप के UI के बीच स्विच किए बिना, डेस्कटॉप ऐप / विंडोज़ स्टोर ऐप (ब्लॉग में DA / WSA के रूप में संदर्भित) के बीच संचार है। उन्होंने प्रोटोकॉल हैंडलर से जुड़ी एक और कम हैक तकनीक के बारे में भी ब्लॉग किया।

ध्यान दें कि एक WSA जो DA के साथ संचार करता है, स्टोर एप्लिकेशन प्रमाणन आवश्यकताओं द्वारा स्पष्ट रूप से निषिद्ध है

विंडोज स्टोर ऐप्स को स्थानीय डेस्कटॉप एप्लिकेशन या सेवाओं के साथ स्थानीय तंत्रों के माध्यम से संवाद नहीं करना चाहिए, जिसमें फाइलें और रजिस्ट्री कुंजी शामिल हैं।

... लेकिन यह केवल "स्थानीय तंत्र" को प्रतिबंधित करता है। इसलिए मुझे लगता है कि संचार संचार के लिए एक वेब सेवा का निर्माण किया जा सकता है।


3

अगर आपको लगता है कि आप एक अतिरिक्त मैनुअल cmd ऑपरेशन कर सकते हैं, तो आप कोशिश कर सकते हैं:

X:/> CheckNetIsolation.exe LoopbackExempt a n=<packageID>;

CheckNetIsolation.exe winRT इंस्टॉल में शामिल है, इसलिए इंस्टॉल होने के लिए कुछ भी अतिरिक्त नहीं है।

मैंने इसे आजमाया: पैकेज अपडेट के बाद भी यह काम करता है।

जैसा कि दिखाया गया है: http://msdn.microsoft.com/en-us/library/windows/apps/Hh780593.aspx

यहाँ यह बताया गया है कि अपने ऐप के लिए पैकेजआईडी का पता कैसे लगाएं: http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/82bad7d4-d52b-4731-a39b-13ab9004c1cc/how-to-get-get -APPID-के-एक-मेट्रो-शैली-app-


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

2

स्थानीय सेवा का उपयोग करके मेट्रो ऐप से डेस्कटॉप ऐप तक एक ही मशीन पर संचार करना संभव है। मैंने कुछ समय पहले लागू किया है सरल "अवधारणा का प्रमाण", स्थानीय सेवा का उपयोग करके WinRT सैंडबॉक्स को कैसे बायपास करें। यह अभी भी सेवा स्थापित करने के लिए किसी प्रकार के "सोशल इंजीनियरिंग" या प्रत्यक्ष मार्गदर्शिका की आवश्यकता है, लेकिन वैसे भी, यह संभव है।
मुझे यकीन नहीं है कि विंडोज स्टोर में इस तरह के ऐप को जोड़ने पर "स्थानीय सेवा" संचार के बारे में प्रमाणन नियम हैं।

यहाँ नमूना

डिजाइन द्वारा मेट्रो आवेदन सीधे अंतर्निहित पीसी तक नहीं पहुंच सकता है, केवल WinRT एपीआई और उपलब्ध क्षमताओं का उपयोग कर। लेकिन जब आप पीसी और सभी डेटा तक पहुँचने के लिए बैक-एंड सेवा बनाते हैं, तो यह मूल रूप से सैंडबॉक्स में नहीं चलता है।

एकमात्र "समस्या" यह है कि उपयोगकर्ता को मैन्युअल रूप से इस बैक-एंड सेवा को स्थापित करना होगा, लेकिन यह कुछ "सोशल इंजीनियरिंग" का उपयोग करने में समस्या नहीं होगी: उपयोगकर्ता डाउनलोड "पीसी ब्राउज़र" मेट्रो ऐप, उपयोगकर्ता सभी चित्रों, संगीत और वीडियो ब्राउज़ कर सकता है , WinRT API का उपयोग करके, लेकिन ऐप सबसे नीचे संदेश भी दिखाता है: "हमारे पीसी ब्राउज़र पॉवरपैक को डाउनलोड करें और अपने पूरे पीसी को ब्राउज़ करें, जैसे कि"

उपयोगकर्ता वेब पेज पर पुनर्निर्देशित किया जाता है, जहां से उपयोगकर्ता पूरे पीसी पर उपयोगकर्ताओं तक फ़ाइलों को एक्सेस करने के लिए "पीसी ब्राउज़र" बैक-एंड सेवा युक्त क्लासिक डेस्कटॉप इंस्टॉलर डाउनलोड कर सकता है। एक बार जब यह डेस्कटॉप सेवा स्थापित हो जाती है, तो मेट्रो ऐप इसका पता लगा सकता है और इसका उपयोग पूरे पीसी को ब्राउज़ करने के लिए कर सकता है। उपयोगकर्ता खुश है, लेकिन WinRT सैंडबॉक्स समझौता किया है।

बेशक यह विंडोज 8 एआरएम टैबलेट पर काम नहीं करेगा। इस वर्कअराउंड का उपयोग करना क्लासिक डेस्कटॉप ऐप जैसे एंटीवायरस, टोरेंट / पी 2 पी क्लाइंट आदि के लिए मेट्रो ऐप क्लाइंट बनाने के लिए भी संभव हो सकता है।


3
यह निश्चित नहीं है कि आपको सोशल इंजीनियरिंग के बारे में उल्लेख करने की आवश्यकता क्यों है ... चूंकि मूल प्रश्न डेस्कटॉप ऐप / सेवा के बारे में मेट्रो ऐप से बात कर रहा है, इसलिए यह उम्मीद की जाती है कि उपयोगकर्ता को अलग से डेस्कटॉप ऐप / सेवा स्थापित करने की आवश्यकता होगी। तो डेस्कटॉप सेवा और मेट्रो ऐप के बीच आपने संचार की किस पद्धति का उपयोग किया?
dodgy_coder

0

शायद मैं इस बिंदु से चूक गया लेकिन निजी नेटवर्क क्षमता को सक्रिय करते हुए मैं स्थानीय आईपी पते (लोकलहोस्ट नहीं) का उपयोग करके स्थानीय रनिंग (http) सर्वर से जुड़ सकता हूं। यह मेरे परिदृश्य को सक्षम करता है जहां एक winrt ऐप एक wpf डेस्कटॉप ऐप के साथ संचार करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.