2008-10-31 20 views
13

मैं सिल्वरलाइट को त्वरित नमूना एप्लिकेशन के साथ काम करने की कोशिश कर रहा हूं और एक अन्य कंप्यूटर पर एक बाकी सेवा कॉल कर रहा हूं। सर्वर है कि बाकी सेवा एक clientaccesspolicy.xml जो की तरह लग रहा है:सिल्वरलाइट रेस्ट सर्विस, सुरक्षा अपवाद

<access-policy> 
    <cross-domain-access> 
     <policy> 
      <allow-from http-request-headers="*"> 
       <domain uri="*"/> 
      </allow-from> 
      <grant-to> 
       <resource path="/" include-subpaths="true"/> 
      </grant-to> 
     </policy> 
    </cross-domain-access> 
</access-policy> 

और उठाया जा रहा है (कम से कम नेटवर्क निशान मैं चलाने के अनुसार), और वहाँ crossdomain के लिए कोई अनुरोध है। एक्सएमएल। सी # कोड की तरह दिखता है:

public Page() 
{ 
    InitializeComponent(); 

    string restUrl = "http://example.com/rest_service.html?action=test_result"; 

    WebClient testService = new WebClient(); 
    testService.DownloadStringCompleted += new DownloadStringCompletedEventHandler(testService_DownloadStringCompleted); 
    testService.DownloadStringAsync(new Uri(restUrl, UriKind.Absolute)); 

} 

void testService_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
{ 
    if (e.Error == null) 
    { 
     LoadTreeViewWithData(e.Result); 
    } 
} 

हालांकि, मैं हमेशा वापस निम्नलिखित सुरक्षा त्रुटि मिलती है:

 
{System.Security.SecurityException ---> System.Security.SecurityException: Security error. 
    at System.Net.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 
    at System.Net.BrowserHttpWebRequest.c__DisplayClass5.b__4(Object sendState) 
    at System.Net.AsyncHelper.c__DisplayClass2.b__0(Object sendState) 
    --- End of inner exception stack trace --- 
    at System.Net.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 
    at System.Net.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
    at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result) 
    at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)} 

क्या मैं गलत कर रहा हूँ? और सुरक्षा त्रुटि मुझे कुछ और उपयोगी जानकारी क्यों नहीं बताती है?

+1

इसे काम करने के लिए आपको क्या बदलना पड़ा? – stimms

+0

जब आप सिल्वरलाइट प्रोजेक्ट एक वेब प्रोजेक्ट नहीं है तो आप बाकी सेवाओं को कॉल नहीं कर सकते हैं। –

उत्तर

8

यदि आपने पहले से ऐसा नहीं किया है, तो मैं पहले अपने मुख्य कोड कार्यों को सत्यापित करने के लिए बस उसी सर्वर पर एक स्थिर HTML पृष्ठ (या यदि आपके सर्वर पर होना आवश्यक है) की तरह कुछ सरल करने के लिए restUrl को बदलने का प्रयास करता हूं ।

सुरक्षा अपवाद मानना ​​उस REST URL (या साइट) के लिए विशिष्ट है, तो आप URL Access Restrictions in Silverlight 2 आलेख को देख सकते हैं। अधिक ज्ञात क्रॉस डोमेन नियमों के अतिरिक्त फ़ाइल प्रकारों और "इंटरनेट जोन" से जुड़े कुछ गैर-स्पष्ट सुरक्षा नियम हैं।

मैं सिल्वरलाइट में कई अपवाद संदेशों के बारे में शिकायत बहुत उपयोगी नहीं हूं। उपर्युक्त संदर्भित एमएसडीएन आलेख में एक मनोरंजक नोट है:

जब उपयोगकर्ताओं को ऐसी त्रुटि नीतियों में से किसी एक के परिणामस्वरूप त्रुटि मिलती है, तो त्रुटि सटीक कारण का संकेत नहीं दे सकती है।

+0

आह, छोटे ज्ञात क्रॉस-जोन प्रतिबंध ... मुझे यह पता लगाने में कई दिन लगे कि मेरी समस्याएं पैदा हो रही हैं। लिंक के लिए धन्यवाद। +1 – Phil

0

एक "विश्वसनीय साइट" से HTML लोड हो रहा है पृष्ठों अपने स्थानीय आवेदन (http://localhost/) के लिए विफल - जब तक मैं विश्वसनीय साइट्स की सूची में स्थानीय होस्ट गयी।

सिल्वरलाइट "क्रॉस जोन" कॉल (मेरे मामले में स्थानीय नेटवर्क बनाम विश्वसनीय साइट्स) और "क्रॉस स्कीम" कॉल (ई। जी। Http बनाम https) को रोकता है।

और अब तक यह केवल "crossdomain.xml" फ़ाइल के साथ काम करता है। मैंने पहले "clientaccesspolicy.xml" की कोशिश की, लेकिन इसे नहीं मिला।

4

मैं clientaccesspolicy.xml में अनुमति-से तत्व में http-विधियों = "*" को जोड़ने के बिना क्रॉस डोमेन REST HTTP deletes नहीं कर सका। जब मैंने http-methods विशेषता को जोड़ा, तो सबकुछ काम करता था और सुरक्षा अपवाद हो रहा था।

+0

इसके लिए धन्यवाद - यह मेरी समस्या भी साबित हुई। –

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