2008-08-22 6 views
7

भी देखें How does a WCF server inform a WCF client about changes? (Better solution then simple polling, e.g. Coment or long polling)डब्ल्यूसीएफ फ़ायरवॉल के माध्यम से ग्राहक को धक्का?

मैं ग्राहक फायरवॉल के माध्यम से WCF के साथ धक्का-प्रौद्योगिकी का उपयोग करने की जरूरत है। यह एक आम समस्या होनी चाहिए, और मुझे लगता है कि यह सिद्धांत में काम करता है (नीचे दिए गए लिंक देखें), लेकिन मैं इसे काम करने में असफल रहा हूं, और मैं इसे प्रदर्शित करने वाला कोड नमूना नहीं ढूंढ पा रहा हूं।

आवश्यकताएँ:

  • WCF TCP पोर्ट 80 (netTcpBinding) के माध्यम से
  • ग्राहक सर्वर से कनेक्ट।
  • सर्वर अनियमित अंतराल (1 मिनट से कई घंटे) पर वापस जानकारी धक्का देता है।
  • उपयोगकर्ताओं को अपने फ़ायरवॉल को कॉन्फ़िगर नहीं करना चाहिए, सर्वर धक्का उन सभी फायरवॉल से गुज़रना होगा जिनमें सभी इनबाउंड बंदरगाह बंद हैं। इसके लिए उसी कनेक्शन पर टीसीपी डुप्लेक्स की आवश्यकता है, क्लाइंट फ़ायरवॉल पर बंदरगाह खोलने के बाद से दोहरी बाध्यकारी काम नहीं करती है।
  • ग्राहक नियमित अंतराल पर सर्वर पर दिल की धड़कन भेजते हैं (शायद हर 15 मिनट) तो सर्वर जानता है कि क्लाइंट अभी भी जिंदा है।
  • सर्वर WAS के साथ IIS7 है।

समाधान डुप्लेक्स netTcp बाइंडिंग प्रतीत होता है। इस जानकारी के आधार:

WCF through firewalls and NATs

Keeping connections open in IIS

लेकिन मैं अभी तक एक कोड नमूना है कि काम करता है खोजने के लिए .. मैं माइक्रोसॉफ्ट के WCF नमूने से "द्वैध" और "TcpActivation" नमूने के संयोजन की कोशिश की है बिना किसी किस्मत के। कृपया कोई मुझे उदाहरण कोड पर इंगित कर सकता है जो काम करता है, या एक छोटा सा नमूना ऐप बनाता है। आपका बहुत बहुत धन्यवाद!

+1

आप अपवाद के किसी भी प्रकार का सामना कर रहे हैं? यह वास्तव में क्या काम नहीं कर रहा है? – jrista

उत्तर

3

मैं समाधान की एक जोड़ी मिल गया है। केवल परीक्षण किया है। .NET Remoting से अधिक शक्तिशाली लगता है और बहुत सक्रिय रूप से विकसित किया गया है।

RemObjects वाणिज्यिक, सक्रिय विकास, सब कुछ का समर्थन करता है लेकिन ऐसा लगता है कि GenuineChannels का उपयोग करने वाली सभी और अधिक उन्नत विशेषताएं नहीं हैं।

GenuineChannels। यह बहुत अच्छी अतिरिक्त सुविधाओं के साथ रिमोटिंग का उपयोग करता है, सबसे महत्वपूर्ण यह क्लाइंट फ़ायरवॉल खोलने की आवश्यकता के बिना एनएटी के माध्यम से काम करता है। दुर्भाग्य से बहुत मृत लगता है।

एक अन्य समाधान इस लेख के अनुसार, आईआईएस के साथ स्ट्रीमिंग उपयोग करने के लिए है: Keeping connections open in IIS

ग्राहक पोर्ट 80 पर सर्वर से पहले कनेक्शन (http IIS6 साथ, IIS7 के साथ टीसीपी) बनाता है, कनेक्शन तो रखा है एक स्ट्रीमिंग प्रतिक्रिया के साथ खुला है जो कभी खत्म नहीं होता है।

मेरे पास इसका प्रयोग करने का समय नहीं है, और मुझे एक नमूना नहीं मिला है जो कहता है कि यह विशेष रूप से फ़ायरवॉल-समस्या हल करता है, लेकिन यहां एक उत्कृष्ट नमूना है जो शायद काम करता है: Streaming XML

+0

जब आप आईआईएस पर कनेक्शन खोलते हैं तो आपको वास्तव में सावधान रहना होगा - आप कार्यकर्ता धागे से बाहर निकल सकते हैं (और उस पर तेज़)। मैं आपको IAsyncHttpHandler पर पढ़ने की सलाह देता हूं - और डब्ल्यूसीएफ से समान कार्यक्षमता कैसे प्राप्त करें। सबसे बुरी स्थिति में आपको मतदान करना पड़ सकता है। –

1

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

अधिकांश कॉर्प वातावरण किसी भी मशीन को किसी भी तरह से आउटबाउंड टीसीपी कनेक्शन बनाने की अनुमति नहीं देंगे।

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

यदि आपको समय-समय पर डेटा को उप-दूसरी भूमि (यानी वित्तीय सेवाओं) में धक्का देना है, तो क्लाइंट पक्ष पर एनएस सर्विसबस वितरक जैसे कुछ संदेश बुनियादी ढांचे पर विचार करें, लेकिन इसके लिए ग्राहक स्थापित करने की आवश्यकता होगी ...

तो क्या आपने टोरडो का उपयोग करने की कोशिश की है? यह पढ़कर कि यह वहां दिखाई देगा, उपयोगकर्ता को सेटअप करने के लिए यह बहुत जटिल है।

1

मैंने उस परिदृश्य की कोशिश नहीं की है जिसकी आप बात करते हैं, इसलिए मुझे बहुत मदद नहीं मिल सकती है, क्षमा करें। यदि आपको बाईपास करने की आवश्यकता है तो क्लाइंट फ़ायरवॉल है, तो आप this post को देखना चाहेंगे।

शुभकामनाएं।http://www.codeproject.com/KB/WCF/WCF_Duplex_UI_Threads.aspx

आप क्या आप पहले से ही प्रयास किया है के उदाहरण प्रदान कर सकते हैं:

2

आप देख करने की कोशिश की है? फ़ायरवॉल आदि के विवरण के साथ, त्रुटि संदेश?

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

एक वाणिज्यिक विकल्प के साथ

ZeroC Ice जीपीएल:

+0

हां, यह फ़ायरवॉल के माध्यम से काम नहीं करता है। – Sire

1

क्या आपने इसे आजमाया है? DuplexHttpBinding

यह कस्टम डब्ल्यूसीएफ बाध्यकारी के रूप में encapsulated स्मार्ट मतदान तकनीक का उपयोग कर रहा है। तो यह बॉक्स से बाहर काम करना चाहिए।

-1

आप फ़ायरवॉल सक्षम क्लाइंट पर डुप्लेक्स वेब सेवा तक पहुंचने के लिए क्लाइंट में निम्न परिवर्तन कर सकते हैं।

  • सेट WebHttp विकल्प फ़ायरवॉल में जाँच -> उन्नत -> (नेटवर्क कनेक्शन की स्थापना की) सेटिंग्स -> वेब सर्वर (HTTP)
+0

ग्राहकों में फ़ायरवॉल में बदलाव करना एक विकल्प नहीं है। और उनके पास एक हार्डवेयर फ़ायरवॉल हो सकता है जिस स्थिति में यह वैसे भी विफल हो जाता है। – Sire

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