2011-05-22 17 views
5

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

इस परियोजना में कई वेब और कार्यकर्ता भूमिकाएं हैं - जिनमें से सभी को बदलते समय नई कॉन्फ़िगरेशन के बारे में जानना होगा।

विन्यास टिकाऊ भंडारण के लिए जारी है, और यह एक स्थिर चर में रनटाइम के दौरान भी कैश किया जाता है।

मेरा समाधान मेरी भूमिकाओं पर एक आंतरिक (टीसीपी) एंडपॉइंट बनाना था, और उन भूमिकाओं के भीतर सभी भूमिकाओं और उदाहरणों के माध्यम से लूप करने के लिए इसका उपयोग करें, फ्लाई पर क्लाइंट बनाएं, और नई सेटिंग के बारे में उदाहरण बताएं । (बहुत अधिक समान: http://msdn.microsoft.com/en-us/gg457891)

पहले मैंने वेबरोल की रोलएन्ट्रीपॉइंट में सर्विसहोस्ट शुरू किया ... और मैं उलझन में था कि जब मैं संचार के माध्यम से कदम उठाता था तो स्थिर सब कुछ ठीक लग रहा था (स्थैतिक चर जहां सही ढंग से सेट हो रहा है) - फिर भी जब मैं अन्य webservice कॉल करता हूं, तो स्थैतिक चर को "भूल गया" लग रहा था जो मैंने इसे सेट किया था।

यह स्थानीय रूप से और Azure स्टेजिंग वातावरण दोनों में मामला था।

इस बिंदु पर मुझे एहसास हुआ कि चूंकि हम पूर्ण-आईआईएस मोड का उपयोग कर रहे हैं, इसलिए रोलएन्ट्रीपॉइंट और वेब सेवाएं दो अलग-अलग प्रक्रियाओं में चल रही थीं - एक एज़ूर के स्टब में और एक आईआईएस में।

"कोई समस्या नहीं है" मैंने कहा, मैं बस कोड की रेखा को स्थानांतरित करूंगा जो मेरे रोलएन्ट्रीपॉइंट से ServiceHost को global.asax में शुरू करता है - जिस बिंदु पर सर्विसहोस्ट उसी प्रक्रिया में शुरू हो जाएगा जैसा बाकी है साइट के - और स्थिर चर समान होंगे।

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

प्रश्न:

  • क्या बनाम देव वातावरण जाता है कि इस के कारण Azure के बारे में अलग है?
  • मैं समस्या को ठीक या हल कैसे कर सकता हूं?
  • क्या किसी के पास कोई और सामान्य सलाह है कि मुझे और अधिक वर्णनात्मक त्रुटि प्राप्त करने के बारे में क्या जाना चाहिए ... क्या मुझे यह प्राप्त करने के लिए Azure में पूर्ण WCF डायग्नोस्टिक्स सक्षम करना है, या अपवाद विवरण पर मुझे कुछ और तरीका मिल सकता है ?

फ़ॉलो-अप:

  • गैर HTTP सक्रियण Azure WebRoles पर डिफ़ॉल्ट रूप से स्थापित नहीं है:

    वाया दूरस्थ डेस्कटॉप मैं कई दिलचस्प बातें सीखा है। मेरा मानना ​​है कि इसे स्टार्टअप स्क्रिप्ट के माध्यम से दूर किया जा सकता है:

    प्रारंभ/w pkgmgr/iu: डब्ल्यूसीएफ-गैरएचटीटीपी-सक्रियण;

  • वेब भूमिका से आईआईएस में बनाई गई वेबसाइट में net.tcp प्रोटोकॉल डिफ़ॉल्ट रूप से सक्षम नहीं है।मैं भी मानते हैं कि यह एक स्टार्टअप स्क्रिप्ट के साथ दूर किया जा सकता:

    % systemroot% \ system32 \ inetsrv \ appcmd.exe सेट एप्लिकेशन "वेबसाइट का नाम यहाँ" /enabledProtocols:https,http,net.tcp

मेरे पास इस तरह से लेने का समय नहीं है, क्योंकि समय सीमा ने मुझे कुछ कामकाज अस्थायी रूप से लागू करने के लिए मजबूर किया है।

कुछ उपयोगी इस विषय से संबंधित लिंक:

http://msdn.microsoft.com/en-us/magazine/cc163357.aspx

http://forums.iis.net/t/1160443.aspx

http://msdn.microsoft.com/en-us/library/ms731053.aspx

http://labs.episerver.com/en/Blogs/Paul-Smith/Dates/2008/6/Hosting-non-HTTP-based-WCF-applications-in-IIS7/

+0

मुझे नहीं पता कि इस समस्या का समाधान क्या है, लेकिन मुझे ऐसा कुछ मिला है जो बहुत समान है: http://stackoverflow.com/questions/5956814/unable-to-host-a-service-bus- wcf-host-in-iis-on-azure – knightpfhor

उत्तर

1

अद्यतन (2011/06/27):

आश्चर्यजनक, माइक्रोसॉफ्ट (जिसका ब्लॉग पर मैंने टिप्पणी की) वास्तव में मुझे इस पर एक जवाब मिल गया पर किसी।

Azure & WCF टीमों इस पोस्ट अद्यतन:

http://blogs.msdn.com/b/windowsazure/archive/2011/06/27/hosting-services-with-was-and-iis-on-windows-azure.aspx

लिंक जानकारी के सभी आप इस के साथ जा रहा की आवश्यकता होती है।

और जीत के साथ एमएसएफटी पीएम, यवेर जॉर्जिएव के लिए एक बड़ा धन्यवाद जाता है।


यह काफी देर के बाद से मैं प्रश्न पूछा गया है हो गया है, और कोई जवाब है, तो मुझे इस छोड़ने:

प्रति पोस्ट में अपने अनुवर्ती, इस काम करने के तरीके हैं ... लेकिन वे जटिल और लागू करने में मुश्किल हैं।

वर्कर ROLES के लिए, netTcp बाइंडिंग पूरी तरह से काम करता है। यहां कोई समस्या नहीं है। आगे बढ़ें और इसका इस्तेमाल करें।

वेब रॉल्स के लिए, आपको समस्याएं मिली हैं। लेकिन netTcp बाइंडिंग आंतरिक अंतराल को उजागर करने के लिए आपको उपयोग करने की आवश्यकता है। क्या करें?

ठीक है, यहाँ मैं क्या किया है: ServiceHost का उपयोग कर

  • अपने RoleEntryPoint में प्रारंभ netTcpBinding सेवा।
  • SOAP/JSON/जो कुछ भी आप चाहते हैं उसका उपयोग करके अपनी वेब भूमिका में मानक डब्ल्यूसीएफ सेवा बनाएं।
  • जब आप अपने नेट टीसीपी बाइंडिंग के माध्यम से अनुरोध प्राप्त करते हैं, तो उन्हें लूपबैक एडाप्टर पर डब्ल्यूसीएफ सेवा के साथ प्रॉक्सी करें।
  • एसएसएल क्लाइंट कॉर्ट के साथ अपनी "आंतरिक" डब्ल्यूसीएफ सेवा को सुरक्षित रूप से सुरक्षित करें।

यह सही नहीं है ... लेकिन यह काम करता है, और यह भयानक नहीं है।

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

जाहिर है, वाईएमएमवी।

0

मैं मचान में उदाहरणों के बीच काम कर रहे HTTP हो रही एक दुखी समय था, और जब ऐसा लगता था कि मुझे गड़बड़ की जरूरत है तो छोड़ दिया netsh के साथ मेरी प्रक्रियाओं को एक HttpListener (शीश!) के माध्यम से सुनने की अनुमति देने के लिए। इसलिए मैंने सॉकेट के माध्यम से टीसीपी में स्विच किया। HTTP इस तरह एक पॉइंट-टू-पॉइंट संचार परिदृश्य में ओवरहेड जोड़ता है।

+0

शायद मैं उलझन में हूं। मैं netTcp बाइंडिंग का उपयोग कर रहा हूँ ... HTTP नहीं। आप कहते हैं कि "सॉकेट के माध्यम से टीसीपी पर स्विच किया गया" ... क्या आप इसका उदाहरण दे सकते हैं कि आप इसे कैसे करने में सक्षम थे और सर्विसहोस्ट आपके चल रहे आईआईएस-होस्टेड .NET एप्लिकेशन के साथ इंटरैक्ट करते हैं? – Steve

+0

मुझे शायद मेरा जवाब एक टिप्पणी के रूप में पोस्ट करना चाहिए था, क्योंकि वास्तव में मैं सिर्फ यह साझा करने की कोशिश कर रहा था कि मैं भूमिकाओं के बीच कैसे संवाद करता हूं। मैं Global.asax.cs के भीतर Application_Start में एक थ्रेड शुरू करता हूं। यह कार्यकर्ता भूमिकाओं से संदेश प्राप्त करने के लिए निम्न-स्तरीय सॉकेट एपीआई का उपयोग करता है, जो निम्न-स्तरीय सॉकेट एपीआई का भी उपयोग करता है। जो कहना है, शायद डब्ल्यूसीएफ का उपयोग न करने का प्रयास करें। –