2009-09-01 10 views
5

मैं (intranet.mydomain.net पर होस्ट) एक Silverlight अनुप्रयोग और एक WCF सेवा है (webservices.mydomain.net)सिल्वरलाइट WCF सेवा क्रॉस-डोमेन प्रश्न

मैं एक क्रॉस साइट नीति फ़ाइल की ज़रूरत है? यदि हां, तो यह केवल इंट्रानेट.mydomain.net से पहुंच की अनुमति देने जैसा दिखता है?

उत्तर

4

हां, आपको अपने सेवा डोमेन (webservices.mydomain.net) के रूट में clientaccesspolicy.xml फ़ाइल की आवश्यकता होगी।

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

<?xml version="1.0" encoding="utf-8" ?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from http-request-headers="*"> 
     <domain uri="http://intranet.mydomain.net"/> 
     </allow-from> 
     <grant-to> 
     <resource path="/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 

यह केवल intranet.mydomain.net से अनुरोध की अनुमति होगी:

यहाँ एक उदाहरण फ़ाइल है।

संपादित

यह कहा गया है: कैसे होगा अगर मैं दो WCF सेवा है यह काम करता है? /ServiceA/a.svc और /ServiceB/b.svc और मैं सेवा ए को किसी भी, कहीं भी, और सेवा बी को केवल अपने इंट्रानेट से काम करने के लिए खोलना चाहता हूं?

आपकी पॉलिसी फ़ाइल इस प्रकार दिखाई देगा:

<?xml version="1.0" encoding="utf-8" ?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from http-request-headers="*"> 
     <domain uri="http://*"/> 
     </allow-from> 
     <grant-to> 
     <resource path="/ServiceA/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 

    <policy> 
     <allow-from http-request-headers="*"> 
     <domain uri="http://intranet.mydomain.net"/> 
     </allow-from> 
     <grant-to> 
     <resource path="/ServiceB/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 
+0

कैसे करता है, तो मैं दो WCF सेवा है यह काम करेंगे? '/ ServiceA/a.svc' और'/serviceB/b.svc' और मैं सेवा इंटनेट से केवल काम करने के लिए सेवा ए को किसी भी, कहीं भी, और सेवा बी के लिए खोलना चाहता हूं? क्या यह क्रॉसडोमेन फ़ाइल से संभव है? – Nate

+1

मैंने अपना जवाब संपादित कर लिया है। – DaveB

+0

क्या यह सफारी पर काम करेगा? ऐसा लगता है जैसे सफारी डिफ़ॉल्ट रूप से क्रॉस डोमेन xml-s का समर्थन नहीं करता है। बेशक, इससे कोई फर्क नहीं पड़ता ... – Gyuri

5

आप नीचे दिए गए लिंक की जाँच करने के लिए चाहते हो सकता है के बारे में टिम ह्यूअर द्वारा 'क्रॉस डोमेन नीति फ़ाइलें का उपयोग कैसे करें सिल्वरलाइट के साथ'।

http://timheuer.com/blog/archive/2008/04/06/silverlight-cross-domain-policy-file-snippet-intellisense.aspx

alt text

मैं अपनी खुद की WCF सेवा लिखने पर विचार होगा:

http://silverlight.net/learn/videos/all/how-to-use-cross-domain-policy-files-with-silverlight/

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

यह विधि तब भी उपयोगी होती है जब दूसरी सेवा आपके हाथों से बाहर होती है और अक्सर बदल सकती है। आप यह नियंत्रित कर सकते हैं कि यह आपकी अपनी सेवा के माध्यम से कैसे संभाला जाता है और कभी भी आपके चांदी के नियंत्रण को अपडेट करने की आवश्यकता नहीं होती है (माना जाता है कि परिवर्तन कठोर नहीं हैं)।

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