2011-06-03 18 views
10

मेरे पास एक छोटा क्लाइंट/सर्वर परीक्षण एप्लिकेशन है जहां मेरे पास एक फ्लेक्स ऐप है जो सर्वर ऐप का HTTP अनुरोध करता है। सर्वर ऐप मेरी स्थानीय मशीन पर चल रही एक स्क्रिप्ट है, पोर्ट 8001 पर सुन रहा है। क्लाइंट एक एसएफएफ है जिसे मैं स्थानीय रूप से चला रहा हूं, और पृष्ठ अनुरोध करने के लिए mx.rpc.http.HTTPService का उपयोग करता है।फ्लैश एक crossdomain.xml फ़ाइल की मांग क्यों कर रहा है जब .swf और http लक्ष्य दोनों स्थानीयहोस्ट पर हैं?

HTTPService नीचे प्रति के रूप में स्थापित किया जा रहा है: जब मैं एक बुनियादी पृष्ठ अनुरोध, अपने सर्वर अनुप्रयोग पहले एक "GET /crossdomain.xml HTTP/1.1" अनुरोध है, जो के बाद से मैं एक crossdomain नहीं है विफल हो रहा है प्राप्त कर रहा है बनाने के

_HttpService = new HTTPService(); 
_HttpService.url = "http://localhost:8001"; 
_HttpService.contentType = "text/xml"; 

जगह में .xml फ़ाइल। मेरे पास एक जगह नहीं है क्योंकि यह सब मेरी स्थानीय मशीन (अभी के लिए) पर हो रहा है और मुझे एक की आवश्यकता नहीं है (मुझे नहीं लगता)।

जब मैं फ्लेक्स 3.x का उपयोग कर रहा था तो मुझे निश्चित रूप से crossdomain.xml के बिना यह कोड काम कर रहा था। मैंने सोचा कि मैं फ्लेक्स 4 के साथ भी काम कर रहा था। अब मैं फ्लेक्स 4.5 का उपयोग कर रहा हूँ। सुरक्षा नीति में बदलाव के कारण संभवतः यहां कोई समस्या है?

स्थानीयहोस्ट पर यह सब हो रहा है, फ्लैश प्लेयर crossdomain.xml फ़ाइल का अनुरोध क्यों कर रहा है?

मामले में यह मदद करता है में, विशिष्ट गलती मेरी AsyncResponder वापस है हो रही है:

[FaultEvent fault=[RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"] messageId="F43DCBFF-E99A-99CC-57D8-535C13C7CD48" type="fault" bubbles=false cancelable=true eventPhase=2] 

उत्तर

11

यह हो सकता है हो सकता है कि यद्यपि आप ग्राहक पेज और सर्वर, भिन्न पोर्ट कारणों के बीच एक ही मेजबान और प्रोटोकॉल है फ़्लैश एक ही मूल परीक्षण में विफल होने के लिए और crossdomain.xml का अनुरोध करने के लिए अनुरोध करें कि उसे क्या करने की अनुमति है। मुझे लगता है कि आपके फ्लैश सामग्री को होस्ट करने वाला पेज पोर्ट 80 पर चल रहा है? यदि ऐसा है, तो विवरण के लिए उसी मूल नीति (http://en.wikipedia.org/wiki/Same_origin_policy) पर विकिपीडिया के आलेख को देखें।

crossdomain.xml स्थानीय परीक्षण के लिए बहुत बोझिल प्रतीत नहीं होता है और help.adobe.com पर बहुत अच्छी तरह से प्रलेखित है। आप मूल रूप से किसी भी डोमेन अनुमति दे रहे हैं के रूप में

<?xml version="1.0"?> 
<!-- http://localhost/site/crossdomain.xml --> 
<cross-domain-policy> 
    <site-control permitted-cross-domain-policies="all"/> 
    <allow-access-from domain="*" to-ports="*"/> 
</cross-domain-policy> 

मैं स्थानीय विकास के अलावा और कुछ के लिए ऊपर का उपयोग नहीं होगा: आप इस तरह अपनी वेबसाइट, की जड़ में एक crossdomain.xml जो सभी का उपयोग की अनुमति देगा बना सकते हैं सामग्री का अनुरोध करने के लिए।

आशा है कि इससे मदद मिलती है!

+0

धन्यवाद! मुझे यह देखने की आवश्यकता होगी कि फ्लैश कैसे समान-मूल परीक्षण करता है। अधिक विशिष्ट होने के लिए, मेरा "सर्वर" एक xmlrpc सर्वर है जो परिवहन के लिए HTTP का उपयोग करता है। यह इस समय जीईटी अनुरोधों को संभाल नहीं करता है, हालांकि मैं निश्चित रूप से इसे मजबूर कर सकता हूं। फ्लैश कंटेंट का स्रोत आईडीई द्वारा उत्पन्न एक स्थानीय फाइल है जिसे मैं फिलहाल उपयोग कर रहा हूं (विजुअल स्टूडियो के लिए एमेथिस्ट प्लगइन)। – Russ

+0

अपने स्वयं के xmlrpc सर्वर को रोल करना मजेदार लगता है, हालांकि आपको किसी भी अतिरिक्त बारीकियों का समर्थन करना होगा फ्लैश आपको फेंकता है ... जैसे crossdomain.xml के लिए प्राप्त करें।मैं अपने कार्यान्वयन के बारे में सुनिश्चित नहीं कर रहा हूँ, लेकिन यह इसके लायक एक मौजूदा वेब ढेर लाभ और फिर xmlrpc उपयोग करने के बजाय एक सरल वेब सेवा बनाने की जांच के लिए हो सकता है। आप सी # उपयोग कर रहे हैं/एमएस, ढेर सादे पुराने एक्सएमएल साथ WCF बाकी बाहर की जाँच - देखें: [कड़ी] (http://www.michaelckennedy.net/blog/2009/03/24/RESTfulWebServicesWithWCFScreencast.aspx) – mrdc

+1

+1 । एमआरडीसी सही है। क्रॉसडोमेन नीतियों को अनदेखा करने के लिए डोमेन * और * पोर्ट को समान होना चाहिए। यदि पोर्ट वेबसर्वर से अलग है, तो यह crossdomain.xml की तलाश करेगा। सबसे आसान तरीका है (glassfish या बिल्ला की तरह अगर जावा/नेट का प्रयोग करके) इस काम के पाने के लिए यदि कोई अनुप्रयोग कंटेनर में अपने सर्वर के लिए या जो भी वेब सर्वर सर्वर साइड पटकथा भाषा (PHP, ASP, आदि) को सर्व करने की उपयोग। सभी के लिए यह बहुत आसान है सिर्फ एक सर्वर के साथ किया है। –

2

policyfile.txt का उपयोग करके मैंने पाया कि नीति फ़ाइल अस्वीकार कर दी गई थी क्योंकि सर्वर द्वारा निर्दिष्ट कोई सामग्री-प्रकार नहीं था। यह बताता है कि इसके बारे में कुछ भी ब्लॉग करना असंभव क्यों था।

उम्मीद है कि यह किसी की मदद करेगा।

फ्लेक्स 4.5 में मैक /उपयोगकर्ताओं/[YOUR_USER_NAME]/पुस्तकालय/प्राथमिकताएं/मैक्रोमीडिया/फ़्लैश प्लेयर/लॉग्स> पूंछ -f policyfiles.txt

+0

क्या मैं policyfiles.txt मिटा सकता हूं? –

+1

अच्छा सवाल, मुझे लगता है कि जवाब हाँ है। यह एक स्थानीय फ़ाइल है, iirc यह आपकी स्थानीय मशीन पर नीति फ़ाइल गतिविधि का सिर्फ एक लॉग है। यदि आप इसे मिटा देते हैं और अधिक गतिविधि होती है तो इसे फिर से उत्पन्न करना चाहिए? इसे कॉन्फ़िगर करने के तरीके के बारे में अधिक जानकारी के लिए http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7ec4.html देखें। – Shanimal

+0

मैंने इसके बाद एक समान प्रश्न पोस्ट किया और उन्होंने पुष्टि की कि यह मिटाना ठीक था। धन्यवाद! –